驗證環(huán)境
- Win10 64位
- Keil MDK 5.30
- ART-Pi 開發(fā)板:STM32H750XBH6開發(fā)板
- 工程:最小RT-Thread 系統(tǒng),版本:RT-Thread v4.1.0 released
功能驗證
- 構(gòu)建最小系統(tǒng),開啟了ART-Pi 板載LCD驅(qū)動
- 驗證SPI 屏是否能正常驅(qū)動,為了后面運行LVGL

2022-04-02_173632.png

2022-04-02_173704.png
問題一:內(nèi)存申請失敗
- 發(fā)現(xiàn)初始化提示 內(nèi)存申請失敗,LCD 的測試例程無法通過
___ ______ _____ ______ _ ______ _____ _____ _____
/ _ \ | ___ \|_ _| | ___ \(_) | ___ \/ _ \/ _ \|_ _|
/ /_\ \| |_/ / | | ______ | |_/ / _ | |_/ /| | | || | | | | |
| _ || / | | |______|| __/ | | | ___ \| | | || | | | | |
| | | || |\ \ | | | | | | | |_/ /\ \_/ /\ \_/ / | |
\_| |_/\_| \_| \_/ \_| |_| \____/ \___/ \___/ \_/
Powered by RT-Thread.
[D/drv.sdram] sdram init success, mapped at 0xC0000000, size is 33554432 bytes, data width is 16
[I/I2C] I2C bus [i2c2] registered
\ | /
- RT - Thread Operating System
/ | \ 4.1.0 build Apr 2 2022 16:47:54
2006 - 2022 Copyright by RT-Thread team
[E/drv.spi_lcd] init frame buffer failed!
msh >
msh >
msh >ile
msh >ili
ili9488_test
msh >ili9488_test
(device != RT_NULL) assertion failed at function:rt_spi_transfer, line number:260
解決方法
- 解決方法,開啟RT-Thread memheap,片內(nèi)的SRAM不夠,可以使用開發(fā)板的外部SDRAM

2022-04-02_174024.png
問題二:LCD初始化死機
\ | /
- RT - Thread Operating System
/ | \ 4.1.0 build Apr 2 2022 17:09:28
2006 - 2022 Copyright by RT-Thread team
psr: 0x21000000
r00: 0xc008082f
r01: 0x40003800
r02: 0x0000ffff
r03: 0x000003e8
r04: 0x24000324
r05: 0x000003e8
r06: 0x00000534
r07: 0x0000ffff
r08: 0xc008082f
r09: 0x00000000
r10: 0x0000ffff
r11: 0x0000ffff
r12: 0x00000000
lr: 0x90004f91
pc: 0x90005144
hard fault on thread: main
thread pri status sp stack size max used left tick error
-------- --- ------- ---------- ---------- ------ ---------- ---
tidle0 31 ready 0x00000058 0x00000100 34% 0x0000001c 000
main 10 running 0x000000a8 0x00000800 19% 0x0000000a 000
FPU active!
usage fault:
SCB_CFSR_UFSR:0x100 UNALIGNED
問題解決
- 開始懷疑內(nèi)存對齊問題,手動申請大塊內(nèi)存,發(fā)現(xiàn)沒有死機
- 通過軟件單步調(diào)試,最終不斷縮小問題的【范圍】
- 最后確認死機來自ST HAL SPI 驅(qū)動
- 【嘗試方法一】:更換ST HAL庫,發(fā)現(xiàn)問題依舊
- 【嘗試方法二】:對比ART-Pi SDK,對比驅(qū)動,定位在:
drv_spi.c - 通過代碼對比ART-PI SDK 正常點屏的
drv_spi.c驅(qū)動,最終定位在一個SPI 的配置上
$ git diff rtt_4.1.0/libraries/HAL_Drivers/drv_spi.c
diff --git a/rtt_4.1.0/libraries/HAL_Drivers/drv_spi.c b/rtt_4.1.0/libraries/HAL_Drivers/drv_spi.c
index 7630d39..79f65bb 100644
--- a/rtt_4.1.0/libraries/HAL_Drivers/drv_spi.c
+++ b/rtt_4.1.0/libraries/HAL_Drivers/drv_spi.c
@@ -228,7 +228,7 @@ static rt_err_t stm32_spi_init(struct stm32_spi *spi_drv, struct rt_spi_configur
spi_handle->Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
spi_handle->Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_ENABLE;
spi_handle->Init.IOSwap = SPI_IO_SWAP_DISABLE;
- spi_handle->Init.FifoThreshold = SPI_FIFO_THRESHOLD_08DATA;
+ spi_handle->Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
#endif
if (HAL_SPI_Init(spi_handle) != HAL_OK)
- 解決方法為:
spi_handle->Init.FifoThreshold = SPI_FIFO_THRESHOLD_08DATA;要改為:
spi_handle->Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA; - 這個方法算是臨時的解決方法,后面研究有效的解決方法,次方法發(fā)現(xiàn)刷屏【卡頓】
編譯下載
- 通過修復(fù)
drv_spi.c的配置,配置了memheap,發(fā)現(xiàn)屏幕正常的點亮了

2022-04-02_175819.png
小結(jié)
- 熟悉RT-Thread 最新版本 ART-Pi 最小工程的搭建方法
- 熟悉 ART-Pi 板載 SPI LCD的驅(qū)動方法
- 修復(fù)LCD無法點亮的問題