网上找到一个关于SPI调试的好贴,记录一下,与大家分享

2019-10-16 02:02发布

                原文出处及连接如下,如有疑问请与原作者联系,与本人无关。谢谢!


STM32F030与STM32F411的SPI调试经验–兼RXNE不能置位的原因                                          本文作者:Aleyn.wu                           本文出处:莴牛实验室[http://www.wisearm.com]                         
                              一、这两天在调试STM32F030的SPI,主机模式。在调试的时候,发现SPI寄存器的RXNE总是置位,后来查手册,才知道是数据位数和应答的关系。
1。源程序上需要修改。
SPI_RxFIFOThresholdConfig(SPI1, SPI_RxFIFOThreshold_QF);  //要加入这一句,把应答的数据位数设置为8位
SPI_Cmd(SPI1, ENABLE); //上面的语句要在SPI使能之前。
2。IAR环境。
如果你使用IAR在调试,那么需要关闭SPI寄存器的监控窗口,否则RXNE也不能置位。这个应该是IAR先读取了SPI状态寄存器而导致RXNE清零的原因。
3。硬件上的修正
SPI的MOSI,MISO,SCK,CSN,这四个IO,内部上拉电阻好像不起作用,所以需要外部加上10K的上位电阻
4。与Flash连接时
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
5。与nRF24L01连接时
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
二、STM32F411的SPI,与nRF24L01连接的时候,总是出现移位接收错误,就算是把SCK时钟调到很低,也不行。
后来,本着试一下,把GPIO_OType,从GPIO_OType_OD改为GPIO_OType_PP,故障清除。
在STM32F030下,可以使用GPIO_OType_OD,但在STM32F411下,只能使用GPIO_OType_PP才能正常收发。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。