驱动程序标准库到HAL库的移植 F407 ST7789


原因

课设项目用到了ST7789这款lcd,但是官方给的例程都是标准库,在网上也没有找到HAL库的驱动。所以自己移植一下,使用STM32Cubeide

首先新建项目,打开SPI1,需要更改的地方如下

 

 

 

关于引脚如何配置,这里参考一下原例程,PG12和PD5为SPI1的SCL和SDA角,在cubemx中我们使用SPI默认的PA5和PA7。其余的三个角都设置为gpio output并上拉和默认输出高电平(BLK可不接)。

 

这样cubemx就配置好了。

接下来打开原例程的文件夹,首先我们来移植lcd_init.h和lcd_init.c

 

 

在新工程路径下的CORE文件夹里新建一个HARDWARE文件夹,把这两个直接粘贴进去。(.h文件要在inc文件里再粘贴一份,后面所有.h文件都要在inc文件夹里面粘贴一份)

然后我们在cbueide里面编译一下

 

很自然的他报错了。接下来我们开始修改

首先把所有的#include "sys.h"更改为#include "stm32f4xx_hal.h"

并且因为HAL库里面没有宏定义u8,u16等,这里在.h文件里面添加宏定义

#define u8 uint8_t
#define u16 uint16_t
#define u32 uint32_t

在后面移植的所有.h文件里,有使用到u8的都需要加一下这三个宏定义。

 

接着修改引脚的宏定义,把SCL和SDA的部分注释到掉行(因为他们在cubemx中配置过了,所以就不需要我们给他们初始化了)

 

其余部分需要把写引脚的函数更改一下,把GPIO_ResetBits()改为HAL_GPIO_WritePin()

 

 

接下来修改lcd_init.c文件,这部分是关于使能时钟和一些引脚的初始化,我们把ST7789需要用到的引脚在cubemx进行了同样的定义之后,就不需要这些定义了,直接删除就行。

 

本工程中我们用到的引脚除了SCL和SDA外只有PD4和PD15,在cubemx中的配置方式如下

 

 (在生成代码时要记得勾选这个。配置完成之后,ctrl+s就能生成代码)

 

 

 

 接着回到lcd_init.c。

在lcd_init()函数里面,lcd_gpio_init()初始化函数就可以删掉了。

 

然后把delay_ms()函数也改为HAL库的HAL_Delay()函数

 

接下来把LCD_Writ_Bus(u8 dat) 修改一下,这个标准库的SPI写函数,该为HAL库,我们只需要一个HAL_SPI_Transmit(&hspi1, &dat, 1, 0xffff)函数就能代替他的整串代码。(别忘了在头文件加上"spi.h")

 

 

 

 这样这两个文件就移植完成了(可以编译一下看是否还有其它错误)

接下来移植剩余的文件,把原例程里LCD文件里面的剩余的所有文件都粘贴过来就行。(别忘.h文件要在inc文件夹里面再粘贴一份)

然后再编译一下,就能再cubeide里面看到所有文件了。

老样子先改头文件和宏定义

 

 头文件改好之后,编译一下,这时候就没有错误了

 

 

 然后我们就可以在主函数中添加测试代码了。先把头文件包含进去。

#include "lcd.h"
#include "lcd_init.h"
#include "pic.h"

 

 

然后添加初始化函数和测试代码

      LCD_ShowIntNum(84,82,16,2,RED,WHITE,16);
      LCD_ShowString(80,40,"LCD_H:",RED,WHITE,16,0);
      LCD_ShowIntNum(128,40,LCD_H,3,RED,WHITE,16);
      LCD_ShowString(80,40,"LCD_H:",RED,WHITE,16,0);
      LCD_ShowString(0,70,"Increaseing Nun:",RED,WHITE,16,0);
      LCD_ShowFloatNum1(128,70,t,4,RED,WHITE,16);
      t+=0.11;

 

 

成功运行

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM