驅動程序標准庫到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