关闭每帧串口日志(默认) + 记录数据手册时钟上限与40MHz提速路径

- 数据手册 18.3.4: 4-line SPI 写周期 twc>=100ns => 标称上限 10MHz;
  读 150ns=>6.67MHz(不涉及)。现运行 20MHz 已超规格2倍但零错误。
- 结论: 错位是无TE的扫描不同步撕裂,非时钟错误,提速只降概率。
- ILI9341_LOG_EN 默认置0: 每帧阻塞打印~8ms会打乱帧节奏、放大撕裂观感。
- spi.c 注释记录到40MHz的PLLQ改法(仅SPI123用pll1_q,隔离)及长线风险。
This commit is contained in:
zhy200308
2026-07-08 17:05:37 +08:00
parent a26b1f7a8a
commit 5abd1abece
2 changed files with 15 additions and 4 deletions
+13 -3
View File
@@ -45,9 +45,19 @@ void MX_SPI1_Init(void)
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
/* pll1_q=40MHz / 2 = 20MHz SPI(原来 /4=10MHz 太慢,单块刷新耗时逼近
* 面板扫描周期导致移动错位)。ILI9341 写周期实测可稳定跑 20~40MHz
* 若接线长/花屏,退回 SPI_BAUDRATEPRESCALER_4。 */
/* SPI 时钟 = pll1_q / prescaler。当前 pll1_q=40MHz(main.c PLLQ=24)
* prescaler 2 => 20MHz
*
* 数据手册(18.3.4 4-line SPI)写周期 twc>=100ns,即标称上限 10MHz
* 20MHz 已超规格 2 倍,靠面板余量稳定运行(日志 err=0)。撕裂的根因是
* 面板扫描与写 GRAM 不同步(无 TE),非时钟错误,提速只降低撕裂概率。
*
* 想进一步提速到 40MHz(社区常用、超规格 4 倍):把 main.c 的 PLLQ 由
* 24 改为 12(pll1_q 变 80MHz,本工程仅 SPI123 使用它,不影响 UART/系统),
* 保持本处 prescaler 2 即得 40MHz。注意:长排线在 40MHz 易串扰花屏,
* 先把 SCK/MOSI/CS/DC 换短线或加地线。若花屏/不稳定,退回:
* - prescaler 改回 SPI_BAUDRATEPRESCALER_4 => 10MHz(数据手册内)
* - 或 PLLQ 改回 24 保持 20MHz。 */
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;