|
关于STM32的SPI只发送模式SPI_Direction_1Line_Tx
[复制链接]
最近做一款TFT屏SPI驱动,由于是单向写数据没有用到MISO脚,因此SPI配置为SPI_Direction_1Line_Tx模式。但调试的时候发现屏始终未能正常显示,分析SPI波形后发现CS信号总是在数据未传输完成前被置高了(CS低电平有效)。后面参照了别人的例程向DR写数据后不再等待判断TXE位置1,而是等待BSY位为零。结果也还是未能解决CS被提前置高的问题,网上问了一圈之后依然没有得到想要的答案。最后仔细研读了一遍STM32F103的技术手册才发现了问题的症结所在:原来在向DR写数据后SPI并不会立即启动发送此时BSY仍然为0,TXE为0,延迟2个APB时钟周期后发送启动TXE变为1,BSY变为1,等到数据发送完成BSY再变为0。因此关于我的问题解决办法是写DR后先等待TXE为1以确认发送动作已启动,后面再等待BSY为0即发送结束可以置高CS信号。如此问题解决。另外附上数据手册上的原文:
“注: 1. 对于不连续的传输,在写入 SPI_DR 寄存器的操作与设置 BSY 位之间有 2 个 APB 时钟周期的延
迟,因此在只发送模式下,写入最后一个数据后,最好先等待 TXE=1 ,然后再等待 BSY=0 。
2 . 只发送模式下,在传输 2 个数据之后,由于不会读出接收到的数据, SPI_SR 寄存器中的 OVR 位
会变为 ’1’ 。 ( 译注:软件不必理会这个 OVR 标志位 )”
详见数据手册23.3.5节,第466页。
|
|