原因
課設項目用到了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;
成功運行