OpenEdv-开源电子网

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

NRF24L01无线模块初始化函数中这两条语句看不懂!!!求助,求助!

[复制链接]

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2014-10-27
在线时间
0 小时
发表于 2015-2-3 19:31:15 | 显示全部楼层 |阅读模式
5金钱
<span></span><span>void Nrf24l01_Init(u8 model, u8 ch)</span><br />
<span>{</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>SPI_CE_L();</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,RX_ADDRESS, RX_ADR_WIDTH); &nbsp; //写RX节点地址&nbsp;</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Buf(NRF_WRITE_REG+TX_ADDR, &nbsp; TX_ADDRESS, TX_ADR_WIDTH); &nbsp; //写TX节点地址 &nbsp;</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Reg(NRF_WRITE_REG+EN_AA, &nbsp; &nbsp; 0x01); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//使能通道0的自动应答&nbsp;</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Reg(NRF_WRITE_REG+EN_RXADDR, 0x01);         &nbsp; &nbsp;//使能通道0的接收地址&nbsp;</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x1a);         &nbsp; &nbsp;//设置自动重发间隔时间:500us;最大自动重发次数:10次&nbsp;</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Reg(NRF_WRITE_REG+RF_CH, &nbsp; &nbsp; &nbsp; 40);         &nbsp; &nbsp;//设置RF通道为CHANAL</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Reg(NRF_WRITE_REG+RF_SETUP, &nbsp;0x0f); &nbsp; &nbsp;//设置TX发射参数,0db增益,2Mbps,低噪声增益开启</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>//NRF_Write_Reg(NRF_WRITE_REG+RF_SETUP, 0x07); &nbsp; &nbsp;         &nbsp; &nbsp;//设置TX发射参数,0db增益,1Mbps,低噪声增益开启</span><br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>/////////////////////////////////////////////////////////</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>i</span><span>f(model==1)         //RX</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>{</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);         &nbsp;//选择通道0的有效数据宽度&nbsp;</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Reg(NRF_WRITE_REG + CONFIG, 0x0f); &nbsp; &nbsp;// IRQ收发完成中断开启,16位CRC,主接收</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>}</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>else if(model==2)         //TX</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>{</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);         &nbsp; &nbsp; &nbsp;//选择通道0的有效数据宽度&nbsp;</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Reg(NRF_WRITE_REG + CONFIG, 0x0e); &nbsp; &nbsp;// IRQ收发完成中断开启,16位CRC,主发送</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>}</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>else if(model==3)         //RX2</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>{</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Reg(FLUSH_TX,0xff);         &nbsp;//清除TX FIFO寄存器</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Reg(FLUSH_RX,0xff);         &nbsp;//清除RX FIFO寄存器</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Reg(NRF_WRITE_REG + CONFIG, 0x0f); &nbsp; &nbsp;// IRQ收发完成中断开启,16位CRC,主接收</span><br />
<br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>Spi_RW(0x50);</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>Spi_RW(0x73);</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Reg(NRF_WRITE_REG+0x1c,0x01);         &nbsp;//使能通道0的动态数据长度</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Reg(NRF_WRITE_REG+0x1d,0x06);         &nbsp;//使能总通道动态数据,且使能ACK应答</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>}</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>else         //TX2</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>{</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Reg(NRF_WRITE_REG + CONFIG, 0x0e); &nbsp; &nbsp;// IRQ收发完成中断开启,16位CRC,主发送</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Reg(FLUSH_TX,0xff);         &nbsp;//清除TX FIFO寄存器</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Reg(FLUSH_RX,0xff);         &nbsp;//清除RX FIFO寄存器</span><br />
<br />
<span></span><span>&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;</span><span>Spi_RW(0x50);</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>Spi_RW(0x73);</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Reg(NRF_WRITE_REG+0x1c,0x01);         &nbsp;//使能通道0的动态数据长度</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>NRF_Write_Reg(NRF_WRITE_REG+0x1d,0x06);         &nbsp;//使能总通道动态数据长度,且总使能ACK应答</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>}<br />
<span>&nbsp; &nbsp;&nbsp;</span><span>SPI_CE_H();</span><br />
<span>}<br />
</span><br />
上面</span>这个函数是四轴程序里NRF24L01无线模块的初始化函数,但是其中<span>&nbsp;<br />
&nbsp; &nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>Spi_RW(0x50);</span><br />
<span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>Spi_RW(0x73);<br />
这两条语句是什么意思呢?前面<br />
uint8_t NRF_Write_Reg(uint8_t reg, uint8_t value)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;uint8_t status;<br />
&nbsp;&nbsp;&nbsp;&nbsp;SPI_CSN_L();                                         &nbsp;/* 选通器件 */<br />
&nbsp;&nbsp;&nbsp;&nbsp;status = Spi_RW(reg); &nbsp;/* 写寄存器地址 */<br />
&nbsp;&nbsp;&nbsp;&nbsp;Spi_RW(value);                 &nbsp;/* 写数据 */<br />
&nbsp;&nbsp;&nbsp;&nbsp;SPI_CSN_H();                                         &nbsp;/* 禁止该器件 */<br />
&nbsp; &nbsp;&nbsp;return         status;<br />
}<br />
<br />
这个函数都<span>&nbsp; ( &nbsp;</span><span>SPI_CSN_H();         &nbsp;/* 禁止该器件 */)关掉该无线模块了,这两条语句能起到作用吗?</span><br />
</span><br />
<br />
<br />

最佳答案

查看完整内容[请看2#楼]

不好说了。 不是什么高深的难题,实验一下看;如果确认有问题,那就是例程有 bug,自己加上吧。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6289

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11357
金钱
11357
注册时间
2014-4-1
在线时间
1270 小时
发表于 2015-2-3 19:31:16 | 显示全部楼层
不好说了。
<br>不是什么高深的难题,实验一下看;如果确认有问题,那就是例程有&nbsp;bug,自己加上吧。
回复

使用道具 举报

58

主题

6289

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11357
金钱
11357
注册时间
2014-4-1
在线时间
1270 小时
发表于 2015-2-3 20:25:02 | 显示全部楼层
Spi_RW()函数没有亮出来,
<br>
<br>也许在Spi_RW里面重新打开。
回复

使用道具 举报

70

主题

231

帖子

0

精华

高级会员

Rank: 4

积分
976
金钱
976
注册时间
2013-8-14
在线时间
103 小时
发表于 2015-2-4 08:57:16 | 显示全部楼层
你去问茶不思呀,跑这里谁知道呀
谢谢!
回复

使用道具 举报

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2014-10-27
在线时间
0 小时
 楼主| 发表于 2015-2-4 11:51:07 | 显示全部楼层
回复【2楼】xuande:
<br>---------------------------------
<br>u8&nbsp;Spi_RW(u8&nbsp;dat)&nbsp;
<br>{&nbsp;
<br>        /*&nbsp;当&nbsp;SPI发送缓冲器非空时等待&nbsp;*/&nbsp;
<br>        while&nbsp;(SPI_I2S_GetFlagStatus(SPI1,&nbsp;SPI_I2S_FLAG_TXE)&nbsp;==&nbsp;RESET);&nbsp;&nbsp;&nbsp;&nbsp;//TXE为0表示非空
<br>        /*&nbsp;通过&nbsp;SPI1发送一字节数据&nbsp;*/&nbsp;
<br>        SPI_I2S_SendData(SPI1,&nbsp;dat);&nbsp;
<br>        /*&nbsp;当SPI接收缓冲器为空时等待&nbsp;*/&nbsp;
<br>        while&nbsp;(SPI_I2S_GetFlagStatus(SPI1,&nbsp;SPI_I2S_FLAG_RXNE)&nbsp;==&nbsp;RESET);&nbsp;&nbsp;&nbsp;//RXNE为0表示空
<br>        /*&nbsp;Return&nbsp;the&nbsp;byte&nbsp;read&nbsp;from&nbsp;the&nbsp;SPI&nbsp;bus&nbsp;*/&nbsp;
<br>        return&nbsp;SPI_I2S_ReceiveData(SPI1);&nbsp;
<br>}
<br>
<br>这里也没有打开
回复

使用道具 举报

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2014-10-27
在线时间
0 小时
 楼主| 发表于 2015-2-4 11:52:19 | 显示全部楼层
回复【3楼】今天天气不好:
<br>---------------------------------
<br>“茶不思”是哪位前辈?
回复

使用道具 举报

58

主题

6289

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11357
金钱
11357
注册时间
2014-4-1
在线时间
1270 小时
发表于 2015-2-4 12:28:24 | 显示全部楼层
继续,SPI_I2S_SendData()?
回复

使用道具 举报

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2014-10-27
在线时间
0 小时
 楼主| 发表于 2015-2-4 12:37:19 | 显示全部楼层
回复【6楼】xuande:
<br>---------------------------------
<br>void&nbsp;SPI_I2S_SendData(SPI_TypeDef*&nbsp;SPIx,&nbsp;uint16_t&nbsp;Data)
<br>{
<br>&nbsp;&nbsp;/*&nbsp;Check&nbsp;the&nbsp;parameters&nbsp;*/
<br>&nbsp;&nbsp;assert_param(IS_SPI_ALL_PERIPH(SPIx));
<br>&nbsp;&nbsp;
<br>&nbsp;&nbsp;/*&nbsp;Write&nbsp;in&nbsp;the&nbsp;DR&nbsp;register&nbsp;the&nbsp;data&nbsp;to&nbsp;be&nbsp;sent&nbsp;*/
<br>&nbsp;&nbsp;SPIx-&gt;DR&nbsp;=&nbsp;Data;
<br>}
<br>这个函数是固件库里的,就是把数据发给DR寄存器嘛,也没有打开无线模块
回复

使用道具 举报

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2014-10-27
在线时间
0 小时
 楼主| 发表于 2015-2-6 11:55:09 | 显示全部楼层
回复【2楼】xuande:
<br>---------------------------------
<br>http://www.openedv.com/posts/list/46875.htm
<br>对于这个问题前辈可否解疑呢???
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2015-5-18
在线时间
0 小时
发表于 2015-5-18 19:18:32 | 显示全部楼层
Spi_RW(0x50);
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Spi_RW(0x73);
<br>是对NRF24L01的0x50寄存器写入0x70指令,具体可以看看NRF24L01的手册,
<br>SPI_CSN_L();是使能NRF24L01NRF24L01的片选脚。
<br>SPI_CSN_H();是静止NRF24L01NRF24L01的片选脚。
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2015-9-17
在线时间
0 小时
发表于 2015-10-4 10:27:41 | 显示全部楼层
回复【10楼】ywanlik:
<br>---------------------------------
<br>这个地址都找不到,怎么看
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-9-29 23:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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