STM32 LCD 使用 BSP 與STM32CubeMX
本文以STM32F469NI Discovery為範例。目標是以STM32F469的BSP lib操作STM32F469 Discovery的TFT-LCD。
STM32CubeMX configuration
先將周邊開啟如以下設定。
LTDC : LCD-TFT Display Controller,硬體優化的LCD控制介面。
DSIHOST: Display Serial Interface Host,由MIPI alliance建立的行動顯示protocol。提供高速的LCD framrate。
DMA2D : Chrom-Art Accelerator™ 用來做圖像操作的DMA,可以做出限定範圍的填滿等記憶體操作。適用AHB bus,可以將結果導入AHB slave端(DSI HOST)。
RCC : LTDC , DSI HOST需要時序。
I2C : 觸控需要。(stm32f469_discovery.c需要I2C)。
FMC : 用BSP時可以選擇使用SDRAM存儲資料。
時脈控制,由於開啟HSE,所以DSI有了clock source。(這部分要注意STM32CubeMX產生出來的程式碼是否會讓clock超過硬體限制)。
選擇RGB565為color mode。
Pixel format選用ARGB8888。
引入Driver
在專案資料夾下的Drivers/BSP/Components/otm8009a 中,將該路徑下的otm8009a.c 加入keil專案。otm8009a為STM32F469_Discovery上的觸控顯示螢幕。
在專案資料夾下的Drivers/BSP/STM32469I_Discovey中,將該路徑下的stm32469i_discovery.c、stm32469i_discovery_lcd.c、stm32469i_sdram.c加入keil專案中。
去下載STM32CubeMX STM32F4 firmware link: http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32cube-embedded-software/stm32cubef4.html
解開來,將Utilities資料夾放入project根目錄。
去下載STM32CubeMX STM32F4 firmware link: http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32cube-embedded-software/stm32cubef4.html
解開來,將Utilities資料夾放入project根目錄。
新增好的檔案架構如下。
在options for target -> C/C++ -> include path中加入那兩個資料夾。如下:
程式撰寫
main.c中include "stm32469i_discovery_lcd.h"
其中的初始流程為:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
int main(void) | |
{ | |
/* USER CODE BEGIN 1 */ | |
/* USER CODE END 1 */ | |
/* MCU Configuration----------------------------------------------------------*/ | |
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */ | |
HAL_Init(); | |
/* USER CODE BEGIN Init */ | |
/* USER CODE END Init */ | |
/* Configure the system clock */ | |
SystemClock_Config(); | |
/* USER CODE BEGIN SysInit */ | |
/* USER CODE END SysInit */ | |
/* Initialize all configured peripherals */ | |
MX_GPIO_Init(); | |
MX_DMA2D_Init(); | |
MX_DSIHOST_DSI_Init(); | |
MX_SPI2_Init(); | |
MX_SPI1_Init(); | |
MX_LTDC_Init(); | |
MX_I2C1_Init(); | |
MX_I2C2_Init(); | |
MX_FMC_Init(); | |
/* USER CODE BEGIN 2 */ | |
BSP_LCD_Init(); | |
BSP_LCD_LayerDefaultInit(0, LCD_FB_START_ADDRESS); | |
BSP_LCD_SelectLayer(0); | |
BSP_LCD_Clear(LCD_COLOR_WHITE); | |
BSP_LCD_SetFont(&Font24); | |
BSP_LCD_SetTextColor(LCD_COLOR_BLACK); | |
BSP_LCD_FillRect(0, 0, 800, 112); | |
BSP_LCD_SetTextColor(LCD_COLOR_GRAY); | |
BSP_LCD_FillRect(0, 112, 800, 368); | |
BSP_LCD_SetBackColor(LCD_COLOR_DARKGRAY); | |
BSP_LCD_DisplayStringAtLine(1, (uint8_t *)" El Psy Congroo"); | |
BSP_LCD_SetFont(&Font16); | |
BSP_LCD_DisplayStringAtLine(4, (uint8_t *)"IBN5100"); | |
BSP_LCD_DisplayStringAtLine(5, (uint8_t *)"yee "); | |
/* USER CODE END 2 */ | |
/* Infinite loop */ | |
/* USER CODE BEGIN WHILE */ | |
while (1) | |
{ | |
/* USER CODE END WHILE */ | |
/* USER CODE BEGIN 3 */ | |
} | |
/* USER CODE END 3 */ | |
} |
- 初始化LCD =>以BSP_LCD_Init()
- 選擇LCD layer => BSP_LCD_SelectLayer()
- 啟動LCD => BSP_LCD_DisplayOn()
剩下繪製部分所提供的函式都在stm32469_discovery_lcd.h中。
不過功能僅有基本。
No comments:
Post a Comment