OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5113|回复: 2

请教一下关于SPI操作NRF2401的奇怪现象.

[复制链接]

10

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2012-10-15
在线时间
4 小时
发表于 2012-11-29 11:57:03 | 显示全部楼层 |阅读模式
<div>(程序在下方)<br />
<div>我利用STM32的SPI控制NRF2401,在读寄存器时总是只能读到NRF的状态寄存器值0x0E, 而读不到指定寄存器(0x00配置寄存器)的值. 在调试时我发现, 用JTAG 执行到断点1(下方标出)再执行到断2, 可以成功读到数据. 全部执行则读取不到第二个数据. 按之前的经验一般调试模式成功,实际操作失败大多是时序问题,我试着在很多地方加入延时函数, 还是无法解决.</div>
<div><br />
</div>
请原子大哥帮忙看一下.<br />
<br />
u8 NRF2401_RdReg(u8 addr)</div>
<div>{</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>u8 rxfifo;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; //此前已将CE=0 CS=1 NRF开机等待100us.</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>NRF2401_ResetCS();</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);<span class="Apple-tab-span" style="white-space:pre;">        </span> &nbsp;//等待缓冲空<span class="Apple-tab-span" style="white-space:pre;">        </span> &nbsp; !!!死循环危险</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI_I2S_SendData(SPI1, addr);</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);<span class="Apple-tab-span" style="white-space:pre;">        </span> &nbsp; //<span class="Apple-tab-span" style="white-space:pre;">        </span>!!!</div>
<div>断1<span class="Apple-tab-span" style="white-space:pre;">        </span>SPI_I2S_SendData(SPI1, 0x00);<span class="Apple-tab-span" style="white-space:pre;">                                                                        </span> &nbsp; //随机发送一个数,以接收寄存器内容</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);<span class="Apple-tab-span" style="white-space:pre;">                </span>//RXNE=1;接收为空,即未接收到数据; &nbsp;!!!&nbsp;</div>
<div>断2<span class="Apple-tab-span" style="white-space:pre;">        </span>rxfifo = SPI1-&gt;DR;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>NRF2401_SetCS();</div>
<div><br />
</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>return rxfifo;</div>
<div>}</div>
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2012-10-15
在线时间
4 小时
 楼主| 发表于 2012-11-29 17:11:21 | 显示全部楼层
找到错误了,&nbsp;第一次接收后RXNE未清空
回复 支持 反对

使用道具 举报

22

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-6-14
在线时间
0 小时
发表于 2014-7-16 11:18:43 | 显示全部楼层
回复【2楼】wkong501:
<br>---------------------------------
<br>你用到是NRF24L01+还是以前的NRF2401AG模块?stm32控制nrf2401AG好像很不好处理。用SPI好像不能通信!!
越是自由的环境中越要自律
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 15:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表