现象:
SPI的clock为2Mhz时通信正常,如果是4Mhz甚至更高则无法通信。卡死在
while (0 == (SPI1->SR & SPI_SR_TXE));
通过逻辑分析仪查看时钟时发现写数据时只出现4个时钟脉冲,后续一直为高。
如果查看SPI时钟频率2Mhz时的时钟如下图所示
可以发现第一个时钟的占空比还算正常,后续的占空比逐渐增加,到第八个时钟时已经达到88%。
原因
原理图上,SPI的时钟加了一个RC滤波电路
电容设计时为1nF,但是实际测量时偏大(10nF),导致截止频率下降,当时钟频率过高时就会被滤波。
解决方法
去掉电容或者换个540pF的电容,时钟频率提高之后通信依然正常。