打印
[STM32F1]

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

[复制链接]
1268|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
最近调试用keil mdk调试2401,遇到诸多问题,主要搞不懂的问题是这里,希望大腿们帮帮忙,拜谢!stm32做master,2401做slave。现在我的主要问题是为啥是程序执行到86行的retry=0以后,RXNE会变成0,而此时的SPI->DR的值是0x0E而不是像RXNE所表现得那样(接收缓存器是空)?这直接导致后面的87行程序:   
while((SPI->SR&1<<0==0)){
................
                                                   }

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

11111.png (242.95 KB )

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

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

111111111.png (242.72 KB )

这里SR就变2

这里SR就变2

111111111.png (242.72 KB )

111111111.png

222.png (243.19 KB )

222.png

2222222.png (246.9 KB )

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寄存器被刷一遍后,之前的数据也就没了。

使用特权

评论回复
5
lucky2013|  楼主 | 2015-9-29 17:08 | 只看该作者
aozima 发表于 2015-9-29 16:52
不要用调试器观察那些有读清除的寄存器,数据被调试器读取后,RXNE就被清了。
DR寄存器被刷一遍后,之前的 ...

嗯嗯,确实是的。当看到    “此标志为’1’时表明在接收缓冲器中包含有效的接收数据。读SPI数据寄存器可以清除此标志”   时还纳闷我又没有读DR怎么会RXNE呢?您的解答真是太到位了。~\(≧▽≦)/~~\(≧▽≦)/~
另外有一点还是不明白,既然stlink读了DR了,为什么DR还有数据呢?

使用特权

评论回复
6
aozima| | 2015-9-29 17:41 | 只看该作者
空间就在那里,不过你读不读,或是否有效,当RXNE为0时,不管里面是什么都是无效的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝