关闭每帧串口日志(默认) + 记录数据手册时钟上限与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:
+13
-3
@@ -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;
|
||||
|
||||
@@ -40,7 +40,8 @@ extern "C" {
|
||||
#define ILI9341_USE_DMA 1
|
||||
#endif
|
||||
#ifndef ILI9341_LOG_EN
|
||||
#define ILI9341_LOG_EN 1
|
||||
#define ILI9341_LOG_EN 0 /* 诊断已完成关闭:每帧阻塞打串口约 8ms,比刷新还久,
|
||||
* 会拖长且打乱帧节奏,反而让撕裂更明显。需要再诊断时置 1。 */
|
||||
#endif
|
||||
#ifndef ILI9341_LOG_EVERY
|
||||
#define ILI9341_LOG_EVERY 1U
|
||||
|
||||
Reference in New Issue
Block a user