touchgfx程序_TouchGFX的stm32移植教程

TouchGFX的stm32移植教程[复制链接]本帖最后由 feiting94 于 2015-12-4 18:32 编辑还在玩emwin的小伙伴们,你们可以看看touchGFX啦,可以看看这个效果什么是touchGFX?它是一款UI设计软件,专为低功耗、低主频的cortex-m系列单片机打造目前支持的芯片有QQ截图20151203162130.png (48.62 KB, 下载次数: 0)2015...
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值