ILI9341: 修复每帧多耗~5ms的空等 + SPI 10MHz->20MHz,解决移动错位
日志实测定位:单块 flush 耗时~9.7ms,远超面板扫描周期(~16ms)导致扫描 在写入途中'套圈',方块被撕成多个错位副本。两处根因: - LCD_SPI_WaitShiftEmpty 轮询 TXC,但 HAL 在 EOT 后关闭 SPI,TXC 恒0, 每帧白等满 5ms 超时。HAL 的 EOT/阻塞传输已保证数据移出,直接删除。 - SPI 仅 10MHz(pll1_q40M/4),0.8us/byte。改 prescaler 4->2 = 20MHz。 合计单块 flush ~9.7ms -> ~2.3ms,远小于扫描周期,错位应显著消除。 spi.c 与 .ioc(本就=_2) 对齐。
This commit is contained in:
+4
-1
@@ -45,7 +45,10 @@ void MX_SPI1_Init(void)
|
||||
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
|
||||
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||||
hspi1.Init.NSS = SPI_NSS_SOFT;
|
||||
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
|
||||
/* pll1_q=40MHz / 2 = 20MHz SPI(原来 /4=10MHz 太慢,单块刷新耗时逼近
|
||||
* 面板扫描周期导致移动错位)。ILI9341 写周期实测可稳定跑 20~40MHz;
|
||||
* 若接线长/花屏,退回 SPI_BAUDRATEPRESCALER_4。 */
|
||||
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
|
||||
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||||
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
|
||||
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
||||
|
||||
Reference in New Issue
Block a user