原因
课设项目用到了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;
成功运行