移植好LCD驱动程序,我使用cortex-m4驱动好了ST7789
安装好X-Cube-TOUCHGFX插件
移植步骤1、开启x-cube-touchgfx
2、配置TouchGFX为240*320像素
保存,重新生成工程使用mdk打开工程
3、使用TouchGFX Designer打开工程
4、使用TouchGFX设计简单的界面
设计好后生成一下代码
5、生成工程后,需要修改TouchGFX的头文件引用到CM4,同时删除CM7的头文件引用。
../cm4/middlewares/st/touchgfx/framework/include
../cm4/touchgfx/generated/fonts/include
../cm4/touchgfx/generated/gui_generated/include
../cm4/touchgfx/generated/images/include
../cm4/touchgfx/generated/texts/include
../cm4/touchgfx/generated/videos/include
../cm4/touchgfx/gui/include
6、修改链接文件,编译链接时会报错如下:
使用vscode打开mdk工程,找到
<FilePath>../cm4/middlewares/st/touchgfx/lib/core/cortex_m7/Keil/touchgfx_core.lib</FilePath>
这一行,修改为cortex-m4f
7、修改TouchGFXHAL.cpp
在头部添加引用
#ifdef __cplusplus
extern "C"{
#include "lcd.h"
#include "stdio.h"
#include "spi.h"
#include "stdint.h"
}
#endif
extern SPI_HandleTypeDef hspi1;
#include <touchgfx/hal/OSWrappers.hpp>
8、修改flushFrameBuffer
void TouchGFXHAL::flushFrameBuffer(const touchgfx::Rect& rect)
{
TouchGFXGeneratedHAL::flushFrameBuffer(rect);
volatile uint16_t* buffer = getClientFrameBuffer()+(rect.y*LCD_WIDTH)+rect.x;
lcd_set_address(rect.x, rect.y, rect.x+rect.width-1, rect.y+rect.height-1);
lcd_write_ram();
hspi1.Init.DataSize = SPI_DATASIZE_16BIT;
HAL_SPI_Init(&hspi1);
LCD_CS(0);
LCD_WR(1);
for(uint32_t i=0; i<rect.height; i++)
{
lcd_write_16bit_datas((uint16_t*)buffer, rect.width);
buffer += LCD_WIDTH;
}
LCD_CS(0);
LCD_WR(1);
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
HAL_SPI_Init(&hspi1);
}
9、在底部添加刷新函数:
extern "C"
void touchgfxSignalVSync(void)
{
HAL::getInstance()->vSync();
OSWrappers::signalVSync();
HAL::getInstance()->swapFrameBuffers();
}
10、在定时器里添加心跳调用:
11、在main中初始化TouchGFX,并在while里面周期调用刷新
MX_TouchGFX_Init();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
MX_TouchGFX_Process();
BSP_LED_Toggle(LED1);
HAL_Delay(5);
/* USER CODE END WHILE */
MX_TouchGFX_Process();
/* USER CODE BEGIN 3 */
}
到此移植就完成结束,下载到开发板后效果如下:
stm32Cube生态提供了良好的GUI界面设计工具。大缩短用的是GUI设计成本。
但是,STM32CubeMX对STM32H755的支持还有些欠缺,比如目前只支cortex-M4内核的TouchGFX,生成的MDK工程也还有许多BUG,还有就是生成的STM32CubeIDE的TouchGFX工程还不支持TouchGFX Desinger等