HAL库移植正点原子屏幕显示和触摸驱动

说明

本文主要内容如下:
使用STM32CubeMX生成Keil工程,并移植TFT-LCD的显示和触摸驱动到正点原子的探索者开发板【STM32F407ZGT6】以及STM32F407ZGT6最小系统板上。

文末提供程序【百度网盘】

写这篇博客的原因: 没有看到有完整移植过程、描述清楚的博客。导致我认识的同学在移植的过程中遇到了很多问题。我尽力写得清楚点。

注意: 本文不介绍原理,原因是我个人认为能用就行,遇到了问题或者感兴趣再去了解原理。本文只是记录了一个完整的移植过程。后文提供博客中提到的所有程序。

环境:

  1. STM32CubeMX 6.61
  2. ARM Compiler V6.18
    HAL库移植正点原子屏幕显示和触摸驱动_第1张图片
    3.正点原子的显示工程和触摸工程

STM32CubeMX配置

文中没有标注序号的均是可以不用修改的部分

RCC

HAL库移植正点原子屏幕显示和触摸驱动_第2张图片

SYS

HAL库移植正点原子屏幕显示和触摸驱动_第3张图片

Clock Configuration

HAL库移植正点原子屏幕显示和触摸驱动_第4张图片

GPIO

HAL库移植正点原子屏幕显示和触摸驱动_第5张图片

串口

配置串口的原因:正点原子的代码中含有自己写的串口代码,并且和HAL生成的串口代码文件一致,均为usart.c和usart.h。后续移植过程中不会引入正点原子的串口程序,但是他的其他文件中包含这两个uart文件,所以在这里配置一下。
HAL库移植正点原子屏幕显示和触摸驱动_第6张图片

FSMC

HAL库移植正点原子屏幕显示和触摸驱动_第7张图片

Project Manager

HAL库移植正点原子屏幕显示和触摸驱动_第8张图片
HAL库移植正点原子屏幕显示和触摸驱动_第9张图片
生成代码后进入Keil,建议编译一下空项目,没问题就进入下一步。

显示驱动的移植

引入LCD驱动

在这里插入图片描述
将件夹下的Drivers\BSP\LCD移植到自己工程下,我移植到了这里面
HAL库移植正点原子屏幕显示和触摸驱动_第10张图片

底层文件

正点原子重新实现了一些函数,包括delay,引脚控制等,移植的时候很容易在这上面出错。我们也不需要重写或者做大幅度的修改。只需要解决一些冲突和报错即可。

打开正点原子工程中的Drivers\SYSTEM,将下图中的两个文件夹复制到自己的工程下面。我的放在了BSP\SYSTEM下面。【参考上图文件夹】
HAL库移植正点原子屏幕显示和触摸驱动_第11张图片

keil添加文件和文件路径

HAL库移植正点原子屏幕显示和触摸驱动_第12张图片
HAL库移植正点原子屏幕显示和触摸驱动_第13张图片

编译

头文件路径修改

移植好后不能编译,因为头文件路径有问题。我们需要修改所有引入的文件的路径。只要有一个没改就会有报错。另外图中的usart.h可以注释也可以不注释,如果没有在STM32CubeMX配置串口,就需要注释。
HAL库移植正点原子屏幕显示和触摸驱动_第14张图片

注释printf

修改头文件路径后,还需要注释所有的printf,可以快捷键Ctrl + F呼出搜索面板:
HAL库移植正点原子屏幕显示和触摸驱动_第15张图片
然后注释掉引入的文件中的所有printf。【这么做的原因是我没有写串口重定向,后面调试的时候需要的话还是可以取消注释的】

HAL_SRAM_MspInit

此时再次编译,依旧会报错,报错问题在HAL_SRAM_MspInit这个函数上。原因是正点原子在lcd.c文件中定义并实现了这个函数,STM32CubeMX在生成代码时,在fsmc.c中也生成了这个函数,导致了多重定义。
解决办法也很简单:注释其中一个即可,为了不破坏HAL库,我们可以优先注释lcd.c的HAL_SRAM_MspInit【两种注释方法我都尝试了,都能正常驱动屏幕】

delay.c的修改

此时编译不会再出现问题。但是驱动屏幕会无法正常显示。问题出在delay.c这个文件中。
我们将delay_us这个函数中的内容进行注释,并写入如下内容(需要注意,下面的delay_us延时时间是不准确的。):

void delay_us(uint32_t nus)
{
	for(int i  = 0; i < nus ; i ++) {
        __asm volatile ("nop");
    }
}

注释delay_ms中的内容,并修改为HAL_Delay

void delay_ms(uint16_t nms)
{
    HAL_Delay(nms);
}

同时也要注意,文件中含有两个delay_msdelay_ns,实在分不清楚,请两个都做修改。并且delay.c的最下方有一个HAL_Delay,请将这个函数的内容包括函数名都注释掉,如下图。【2023-3-18补充】
HAL库移植正点原子屏幕显示和触摸驱动_第16张图片

显示颜色

main.c中引入lcd.h这个头文件并且在main函数的**while(1)**之前写上:

lcd_init()
lcd_clear(GREEN);

HAL库移植正点原子屏幕显示和触摸驱动_第17张图片
然后编译下载程序,复位开发板后即可。

报错

如果此时编译还出现报错,很有可能是你引入了lcd_ex.c这个文件,移除重新编译即可【如下图】
HAL库移植正点原子屏幕显示和触摸驱动_第18张图片

触摸驱动的移植

引入触摸驱动

和上面的步骤是类似的,先找到触摸工程:
在这里插入图片描述
并将路径Drivers\BSP下的三个文件夹【如下图】复制到自己工程中
HAL库移植正点原子屏幕显示和触摸驱动_第19张图片

Keil中添加文件和文件路径

HAL库移植正点原子屏幕显示和触摸驱动_第20张图片
HAL库移植正点原子屏幕显示和触摸驱动_第21张图片

编译

和引入显示驱动一致,需要修改一下文件中头文件的路径。也要注释printf

报错虽然多,但是容易修改。ft5206.c中有一个printf忘记注释导致触摸无法工作,顺带还影响了显示。

触摸测试

在最小系统板上,下面的代码调用了触摸案例。
HAL库移植正点原子屏幕显示和触摸驱动_第22张图片
而在正点原子的探索者开发板上,初始化的时候进入到了其他的else中,这个else中没有触摸测试程序。所以还需要移植一下正点原子的触摸案例。

程序

完整的工程如下:
链接:https://pan.baidu.com/s/1wJnGJlebi5vQRwY_XeEwmA?pwd=3hxg
提取码:3hxg

总结

待补充。

你可能感兴趣的:(单片机,stm32,嵌入式硬件)