新手上路
- 积分
- 41
- 金钱
- 41
- 注册时间
- 2013-11-9
- 在线时间
- 0 小时
|
5金钱
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">问题:如果将SetRX_Mode(),放在while循环之外 只能接收一个数据, 且就是在上电那一刻。 求同行帮忙分析一下,</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">/***************主程序******************/</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">void main(void)</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">{</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">unsigned char tf =0;</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">unsigned char TxBuf[32]="WangChengJunWangChengJunWangChen"; // </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">unsigned char RxBuf[32]={0};</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">UART_init(); </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;"> init_NRF24L01();</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">//SetTX_Mode(); </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">while(1)</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">{ </span><br />
<span style="font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;color:#FF0000;">SetRX_Mode();</span><span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;"> //如果将次语句放在while循环之外就不能连续接收数据,只会在上电接收一次数据 </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">// nRF24L01_TxPacket(TxBuf); // Transmit Tx buffer data</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">Delay(6000);</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">led = ~led; </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">if(nRF24L01_RxPacket(RxBuf))</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;"> {</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;"> RxBuf[31] ='\0';</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">  rintf(RxBuf); // 串口发送数据</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;"> BufSet(RxBuf,32,0); //清除缓存区</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;"> }</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;"> }</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">}</span><br />
<br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">/*****************************************************************************************************/</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">void SetRX_Mode(void)</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">{</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">CE=0;</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH); //选择通道0的有效数据宽度 </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // IRQ收发完成中断响应,16位CRC ,主接收</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">CE = 1; </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">inerDelay_us(130);</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">}</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">/****************************************************************************************************/</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">/*函数:void SetTX_Mode(void)</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">/*功能:数据发送配置 </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">/****************************************************************************************************/</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">void SetTX_Mode(void)</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">{</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">CE=0;</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // 写本地地址</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">SPI_RW_Reg(WRITE_REG+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次 </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;"> SPI_RW_Reg(WRITE_REG+CONFIG,0x0e); //配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">CE = 1; </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">inerDelay_us(130); </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">}</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">//****************************************************************************************</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">/*NRF24L01初始化</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">//***************************************************************************************/</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">void init_NRF24L01(void)</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">{</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;"> inerDelay_us(100);</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;"> CE=0;//待机模式Ⅰ (写寄存器之前一定要进入待机模式或掉电模式)</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;"> CSN=1;</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;"> SCK=0;</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;"> IRQ=1; </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;"> </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // 频道0自动 ACK应答允许 </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // 允许接收地址只有频道0,如果需要多频道可以参考Page21 </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">SPI_RW_Reg(WRITE_REG + RF_CH,40); // 设置信道工作为2.4GHZ,收发必须一致</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0f); //设置发射速率为1MHZ,发射功率为最大值0dB</span><br />
<br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">CE = 1;</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">}</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">/******************************************************************************************************/</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">/*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">/*功能:数据读取后放如rx_buf接收缓冲区中</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">/******************************************************************************************************/</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">{</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;"> unsigned char revale=0;</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">sta=SPI_Read(STATUS); // 读取状态寄存其来判断数据接收状况</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">SPI_RW_Reg(WRITE_REG+STATUS,sta); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">if(RX_DR) // 判断是否接收到数据</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">{</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;"> CE = 0; //SPI使能</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">SPI_RW_Reg(FLUSH_RX,0xff);//清除RX FIFO寄存器 </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">revale =1; //读取数据完成标志</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">}</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">return revale;</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">}</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">/***********************************************************************************************************</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">/*函数:void nRF24L01_TxPacket(unsigned char * tx_buf)</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">/*功能:发送 tx_buf中数据</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">/**********************************************************************************************************/</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">void nRF24L01_TxPacket(unsigned char * tx_buf)</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">{</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">CE=0; //StandBy I模式 </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); // 装载数据 </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">CE=1; //置高CE,激发数据发送 </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">while(IRQ!=0);//等待发送完成</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">sta=SPI_Read(STATUS); //读取状态寄存器的值 </span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">SPI_RW_Reg(WRITE_REG+STATUS,sta); //清除TX_DS或MAX_RT中断标志</span><br />
<br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">inerDelay_us(10);</span><br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">}</span><br />
<br />
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">/*****************************************END FILE***************************************************/</span> |
最佳答案
查看完整内容[请看2#楼]
回复【2楼】正点原子:
---------------------------------
恩恩,我手头上只有一个mini开发板,这个代码是跑在51单片机上的。 问题我现在已经解决了,在接收函数里将CE = 0;去掉就可以了!
|