[STM32] 2016-07-17 10:48 我来说两句  

STM32F030与STM32F411的SPI调试经验–兼RXNE不能置位的原因

一、这两天在调试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才能正常收发。