风云天 发表于 2012-9-5 15:01:02

为什么NRF24L01接收的数据违反C规则的显示正确,对的代码.....

我用2个NRF24L01,一个发,一个收,发送数组unsigned char TxBuf=
{0x21,0x22,0x23,0x24,0x25,0x26,0x27};其中RX_PLOAD_WIDTH=TX_PLOAD_WIDTH=8;
当主程序这样写时串口能正确接收:23 24 25 26 27 21 22 23 24 25 26 27 21 22 23 24 25 26 27
主程序:#include "NRF24L01.h"
uchar RxBuf[]={0};

unsigned char TxBuf=
{0x21,0x22,0x23,0x24,0x25,0x26,0x27};
void main(void)
{
unsigned char i,sta;

   NRF24L01_Init();
        USART_Init(9600);
        //NRF24L01_Check()
        RX_Mode();
   while(1)
       {                       
                                /*if(NRF24L01_RxPacket(RxBuf))
                                {        for(i=1;i<2;i++)               
                                                USART_SendData(*(RxBuf+i));
                               
                                }*/
                                NRF24L01_RxPacket(RxBuf);
                                for(i=1;i<8;i++)
                                        USART_SendData(RxBuf);//串口显示
               
       }
}说明能正确接收了,但是数组这样写是违法的啊,数组应该是从0开始写啊:
如果写成这样for(i=0;i<7;i++)
接收的数据为:00 21 22 23 24 25 26 00 21 22 23 24 25 26 00 21 22 23 24 25 26 00 21 22 23 24 25 26 00
为什么正确的代码不行,违反C规则的代码显示却正确?
用指针的话串口干脆出现乱码了或不显示了
很蛋疼

风云天 发表于 2012-9-5 15:02:04

修正一下,RX_PLOAD_WIDTH=TX_PLOAD_WIDTH=7;,上面的写错了

风云天 发表于 2012-9-5 15:02:49

#define TX_ADR_WIDTH    5   //5字节的地址宽度
#define RX_ADR_WIDTH    5   //5字节的地址宽度
#define TX_PLOAD_WIDTH7//7字节的用户数据宽度
#define RX_PLOAD_WIDTH7//7字节的用户数据宽度

风云天 发表于 2012-9-5 15:03:27

求解了!!!!!!!!!!!!!!

trey21ic 发表于 2012-9-5 15:06:05

要看你NRF24L01接收中的前导,同步,地址数据载荷及CRC数据报是否处理正确

dzmcs 发表于 2012-9-5 15:13:33

看看NRF24L01_RxPacket(RxBuf);这个接收不会就是从1开始吧

不爱吃鱼 发表于 2012-9-9 14:42:12

for(i=1;i<8;i++)
USART_SendData(RxBuf);//串口显示
i=0怎么办?
for(i=1;i<8;i++)
USART_SendData(RxBuf);//数据是从0存入的,这样写从1开始了
页: [1]
查看完整版本: 为什么NRF24L01接收的数据违反C规则的显示正确,对的代码.....