From 5abd1abece8d9afc72081dec62ff64b035743b9e Mon Sep 17 00:00:00 2001 From: zhy200308 <2258391712@qq.com> Date: Wed, 8 Jul 2026 17:05:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=B3=E9=97=AD=E6=AF=8F=E5=B8=A7=E4=B8=B2?= =?UTF-8?q?=E5=8F=A3=E6=97=A5=E5=BF=97(=E9=BB=98=E8=AE=A4)=20+=20=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E6=95=B0=E6=8D=AE=E6=89=8B=E5=86=8C=E6=97=B6=E9=92=9F?= =?UTF-8?q?=E4=B8=8A=E9=99=90=E4=B8=8E40MHz=E6=8F=90=E9=80=9F=E8=B7=AF?= =?UTF-8?q?=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 数据手册 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,隔离)及长线风险。 --- Core/Src/spi.c | 16 +++++++++++++--- SystemDrivers/ILI9341.h | 3 ++- 2 files changed, 15 insertions(+), 4 deletions(-) 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