touchgfx程序_TouchGFX的stm32移植教程

  • Post author:
  • Post category:其他


TouchGFX的stm32移植教程

[复制链接]

本帖最后由 feiting94 于 2015-12-4 18:32 编辑

还在玩emwin的小伙伴们,你们可以看看touchGFX啦,可以看看这个效果

什么是touchGFX?

它是一款UI设计软件,专为低功耗、低主频的cortex-m系列单片机打造

目前支持的芯片有

QQ截图20151203162130.png (48.62 KB, 下载次数: 0)

2015-12-3 16:21 上传

之前我在stm32论坛发了入门的知识,感觉太冷清了,还是来eeworld发帖子了

touchGFX移植主要分四个部分,基本思想是按照这张图来的

QQ截图20151203185437.png (85.85 KB, 下载次数: 5)

2015-12-3 18:54 上传

移植的思想就是初始化正确,对上层应用来说底层是透明且有效的,我们的移植就成功了

(1)内部lcd控制器,外部sram,外部flash正确初始化

就是裸机的时候这些模块都是正常工作的,其中外部flash不是必须的,但因为sdram的部分要作为显存,因此sdram必须要有,这个因为不同的开发板都不同,我就不说了

(2)通过继承 touchGFX::HAL 得到适合自己MCU系列的子类,

目的是对上层屏蔽底层MCU硬件的差别

主要实现5个函数

FUNCTIONPURPOSE

configureInterrupts()配置DMA中断和LCD的VSYNC中断,两个中断的优先级必须相同,因为两个中断服务程序都经过touchGFX内部状态信息,不能出现抢占竞争状态

注:如果使用freeRTOS,必须保证中断优先级功能上低于(也就是数目上大于) configMAX_SYSCALL_INTERRUPT_PRIORITY这个宏,这样就

enableLCDControllerInterrupt()使能LCD控制器的VSYNC中断

disableInterrupts()失能LCD控制器中断和 DMA中断

enableInterrupts()使能LCD控制器中断和 DMA中断,这个函数和上面的函数配合使用保护临界区域,

getTFTFrameBuffer()得到TFT控制器的显存的首地址,

setTFTFrameBuffer()设置TFT控制器的显存首地址

以stm32f746为例可以看到 例程是如何初始化的

代码来自 STM32F7HAL.cpp 文件

uint16_t* STM32F7HAL::getTFTFrameBuffer() const

{

return (uint16_t*)LTDC_Layer1->CFBAR;

}

void STM32F7HAL::setTFTFrameBuffer(uint16_t* adr)

{

LTDC_Layer1->CFBAR = (uint32_t)adr;

/* Reload immediate */

LTDC->SRCR = (uint32_t)LTDC_SRCR_IMR;

}

void STM32F7HAL::configureInterrupts()

{

NVIC_SetPriority(DMA2D_IRQn, 9);

NVIC_SetPriority(LTDC_IRQn, 9);

}

static uint16_t lcd_int_active_line;

static uint16_t lcd_int_porch_line;

/* Enable LCD line interrupt, when entering video (active) area */

void STM32F7HAL::enableLCDControllerInterrupt()

{

lcd_int_active_line = (LTDC->BPCR & 0x7FF) – 1;

lcd_int_porch_line = (LTDC->AWCR & 0x7FF) – 1;

LTDC->LIPCR =  lcd_int_active_line;

LTDC->IER = 1;

}

void STM32F7HAL::disableInterrupts()

{

NVIC_Di



版权声明:本文为weixin_34252946原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。