diff --git a/Core/Src/spi.c b/Core/Src/spi.c index 2937822..db6b85e 100644 --- a/Core/Src/spi.c +++ b/Core/Src/spi.c @@ -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; diff --git a/SystemDrivers/ILI9341.h b/SystemDrivers/ILI9341.h index 5aa733b..ad453c9 100644 --- a/SystemDrivers/ILI9341.h +++ b/SystemDrivers/ILI9341.h @@ -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