网上找到一个关于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才能正常收发。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
shikihane
1楼-- · 2019-10-16 04:44
好帖子,强力支持
ST-FAE-SALE
2楼-- · 2019-10-16 05:45
 精彩回答 2  元偷偷看……
ST-FAE-SALE
3楼-- · 2019-10-16 08:52
恩,好东西,谢谢分享。
无帝老三
4楼-- · 2019-10-16 12:33
自己调试中使用keil,发现第二条很对症,当仿真观察SPI寄存器时,会出现死在while等待RXEN处,关掉SPI寄存器窗口,一直运行了一下午也没出现。
lvehe
5楼-- · 2019-10-16 14:20
本帖最后由 lvehe 于 2016-12-14 12:18 编辑

难道这些不是很正常的设置吗?按官方标准库例程或原子的例程来也不至于出这么多问题。

一周热门 更多>