[STM32F1] stm32关于spi的读写问题,调试2401遇到的。

[复制链接]
1575|5
 楼主| lucky2013 发表于 2015-9-29 15:57 | 显示全部楼层 |阅读模式
最近调试用keil mdk调试2401,遇到诸多问题,主要搞不懂的问题是这里,希望大腿们帮帮忙,拜谢!stm32做master,2401做slave。现在我的主要问题是为啥是程序执行到86行的retry=0以后,RXNE会变成0,而此时的SPI->DR的值是0x0E而不是像RXNE所表现得那样(接收缓存器是空)?这直接导致后面的87行程序:   
while((SPI->SR&1<<0==0)){
................
                                                   }

死在这里使该函数没有返回值。
希望明白的大腿帮帮忙。

这一步还是spi的SR寄存器为3

这一步还是spi的SR寄存器为3

这里SR就变2

这里SR就变2
111111111.png
222.png
2222222.png
 楼主| lucky2013 发表于 2015-9-29 16:39 | 显示全部楼层
没人解决吗???
 楼主| lucky2013 发表于 2015-9-29 16:39 | 显示全部楼层
自己顶下,别沉了!!
aozima 发表于 2015-9-29 16:52 | 显示全部楼层
本帖最后由 aozima 于 2015-9-29 16:55 编辑

不要用调试器观察那些有读清除的寄存器,数据被调试器读取后,RXNE就被清了。
DR寄存器被刷一遍后,之前的数据也就没了。
 楼主| lucky2013 发表于 2015-9-29 17:08 | 显示全部楼层
aozima 发表于 2015-9-29 16:52
不要用调试器观察那些有读清除的寄存器,数据被调试器读取后,RXNE就被清了。
DR寄存器被刷一遍后,之前的 ...

嗯嗯,确实是的。当看到    “此标志为’1’时表明在接收缓冲器中包含有效的接收数据。读SPI数据寄存器可以清除此标志”   时还纳闷我又没有读DR怎么会RXNE呢?您的解答真是太到位了。~\(≧▽≦)/~~\(≧▽≦)/~
另外有一点还是不明白,既然stlink读了DR了,为什么DR还有数据呢?
aozima 发表于 2015-9-29 17:41 | 显示全部楼层
空间就在那里,不过你读不读,或是否有效,当RXNE为0时,不管里面是什么都是无效的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部