打印

stm32 spi rxne的问题

[复制链接]
6212|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
接收程序如下
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1, 0x00);
while(SPI_I2S_GetITStatus(SPI1, SPI_I2S_IT_RXNE)==RESET);
  return SPI_I2S_ReceiveData(SPI1);
为什么我停在while(SPI_I2S_GetITStatus(SPI1, SPI_I2S_IT_RXNE)==RESET);
这句 我看波形sck已经有了啊 。SPI1是做主的话,是不是只要sck波形正常,过了8个sck周期,rxne就应该被置位啊 波形如图 前面0x58是mosi输出的 后面的0x03是miso上的数据。为什么rxne不置位呢 谢谢

QQ截图20111201101233.jpg (24.89 KB )

QQ截图20111201101233.jpg
沙发
jiaojian|  楼主 | 2011-12-1 10:01 | 只看该作者
调试看RXNE已经被置位了 为什么还停在断点上 运行不到下一步了呢

QQ截图20111201102425.jpg (90.57 KB )

QQ截图20111201102425.jpg

使用特权

评论回复
板凳
香水城| | 2011-12-1 10:11 | 只看该作者
调试器窗口读出DR寄存器时,RXNE被自动清除,因此程序执行不下去。

请不要把断点放在while语句上或之前。

使用特权

评论回复
地板
jiaojian|  楼主 | 2011-12-1 11:30 | 只看该作者
谢谢 版主 之前的帖子我也看了 断点 原来断点是下在了下一句的 全速运行就是到不了入图的断点 所以我才下在了while处 看看rxne置位没有  现在看rxne是置位了 可为什么还是过不去while这一句呢 还有什么可能设置没做对?

未命名.jpg (39.18 KB )

未命名.jpg

使用特权

评论回复
5
香水城| | 2011-12-1 11:44 | 只看该作者
有可能是时序问题。你在那个while之前加一个小小的延迟试试看。

使用特权

评论回复
6
jiaojian|  楼主 | 2011-12-1 11:55 | 只看该作者
现在我把函数改成了直接操作寄存器 这回可以跳过 while了。但是调试窗口 SPI1_DR内容是0x0003 函数返回值就是SPI1_DR ,而被赋值的ReceiveData 却是0x0000 ??

未命名2.JPG (63.75 KB )

未命名2.JPG

使用特权

评论回复
7
jiaojian|  楼主 | 2011-12-1 15:08 | 只看该作者
第一个图是没加延时 第二个加了个延时 SPI_DR内容还不一样了 ?什么原因呢

0003.JPG (77.49 KB )

0003.JPG

0000.JPG (78.44 KB )

0000.JPG

使用特权

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

本版积分规则

65

主题

196

帖子

0

粉丝