STM32F407/405 SPI屏幕+TouchGFX

本文介绍了如何在STM32F407/405上使用SPI连接320*240屏幕,并结合TouchGFX实现图形界面。通过STM32CubeMX配置工程,启用SPI2 DMA_TX,使能CRC和FreeRTOS。TouchGFX参数调整以支持部分缓冲帧更新。在MDK工程中,自定义TouchGFXHAL并编写相关函数以实现LCD的刷新和数据传输。最后创建任务调度TouchGFX内核运行。
摘要由CSDN通过智能技术生成

STM32F407/405 SPI屏幕+TouchGFX

新版的TouchGFX支持部分缓冲帧,只刷新一部分要更新的内容

STM32CubeMX创建工程

  1. 创建STM32F405工程,配置好时钟,我使用的是SPI 320*240 屏幕,所以使能SPI2(吐槽一下SPI2比SPI1要慢好多),使能SPI2 DMA_TX(因为是显示屏,所以只需要发送就行了),配置好显示屏的触摸驱动引脚
    在这里插入图片描述
  2. 使能CRC(TouchGFX需要用到),使能FreeRTOS(选择CMSIS V2),设置FreeRTOS TOTAL_HEAP_SIZE为50*1024,(设置多少自己定啦)。
    在这里插入图片描述
  3. 使能TouchGFX,参数设置如下图
    在这里插入图片描述
    参数中的Number of Blocks参数设置为2或者更多时该怎么写程序目前还没有搞定,不过有一个可以用了就好,再多了就用带LTDC的芯片了不是嘛。
    参数中的BlockSize设置可以根据自己的情况定,我的GUI中最小的图片高度是20,所以我设置的比9600高,当全图刷新时,每次都只会刷新240*20高度的数据。具体原因再FramBufferAllocator.hpp文件中的virtual uint16_t allocateBlock(const uint16_t x, const uint16_t y, const uint16_t width, const uint16_t height, uint8_t** block)的函数中,可以自己分析。

生成MDK工程。打开工程文件下的ApplicationTemplate.touchgfx文件,添加几个BOX等,让界面上有显示,点击生成代码。

  1. 打开MDK工程,编译。打开TouchGFXHAL.cpp文件,找到void TouchGFXHAL::flushFrameBuffer(const touchgfx::Rect& rect)函数,可以看到他调用的是TouchGFXGeneratedHAL,cpp中的void TouchGFXGeneratedHAL::flushFrameBuffer(const touchgfx::Rect& rect)函数,根据我们的编译信息,可知需要自己完成
    void TouchGFXGeneratedHAL::flushFrameBuffer(const touchgfx::Rect& rect)函数,
    int touchgfxDisplayDriverTransmitActive()函数和
    "C" void touchgfxSignalVSync(void);函数的编写。
    创建TouchGFX_User.c/.h文件,在TouchGFX_User.c中添加
osMessageQueueId_t xQueueLCD;
const osMessageQueueAttr_t xQueueLCD_attributes = {
   
  .name = "xQueueLCD"
};

并在freertos.c文件中MX_FREERTOS_Init(void)函数中创建该队列
创建LCD刷新信息的通讯队列

	xQueueLCD = osMessageQueueNew (10, sizeof(_st_lcd), &xQueueLCD_attributes);

创建函数 void touchgfxDisplayDriverTransmitBlock()

void touchgfxDisplayDriverTransmitBlock(const uint8_t* pixels, uint16_t x, uint16_t y, uint16_t w, uint16_t h)
{
   
	const uint8_t* a =pixels;
	  _st_lcd lcdinfo = {
   
      .pixels = a,
      .x = x,
      .y = y,
      .w = w,
      .h = h
		   };
	
		if(
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值