原文出处及连接如下,如有疑问请与原作者联系,与本人无关。谢谢!
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才能正常收发。
难道这些不是很正常的设置吗?按官方标准库例程或原子的例程来也不至于出这么多问题。
一周热门 更多>