实现51和stm32之间通过nrf24l01通信

stm32的代码复杂些,而且某宝卖家给的代码写得有点乱而且注释有问题啊。。

吐槽完毕,还是要脑子清醒思路清晰才能高效完成工作发现问题分析问题解决问题

总结下睡觉。

1.地址、接收通道、通信频道什么的,反正收发模式设置要相同

2.数据宽度、地址宽度

3.关键一点:数值和字符!

      ASCII码表在线查询(1.0 beta 1)

  由于stm32上的与24l01有关的代码现在还是用的某宝卖家的,还没完全吃透。就这么说吧,其中的函数的参数是数字(不知道是不是这样表达的即表里的代码,另外c语言的变量不允许数字开头),而我发送的数据是字符串,发现问题花了一会儿,想办法解决又花了好一会儿。两边代码都不好改,参数如果是数组(指针)那真是传来传去如果要改都不知道改哪了,stm32的代码更是,想想其他的解决办法吧。

一个解决方法:step1.数值,字符嘛,查ascⅡ码表呗

       step2.见下面的4,用 if ,只把数组的第一个元素拿出来,转换成数字或者把数字变回去。

 

4.再来一个关键一点24l01发数据的时候不知道为什么,在把数据宽度设定为8字节后,接收方还是收到32字节的数据,而且前8位后那些会混杂好多数据。当传输数据为字符串数组时,如果只有一组数据,那后面的会混杂乱码,只要传输过程不丢帧什么的,每一次的乱码都一样;如果有多组数组,则会包含这一数组和下一数组的数据,也是每一次都一样。这是用串口看到的,即收到数据后存入rx_buf[],然后通过串口在电脑上显示。显示的应该就是收到的数据。

一个解决方法是用 if 来个判断,

实现51和stm32之间通过nrf24l01通信
if(!strcmp(RX_Buffer,"Forward "))
            {
                ES = 0;            
                for(i=0;i<8;i++)
                {
                    SBUF = RX_Buffer[i];
                    RX_Buffer[i]=0;
                    while(!TI);
                    TI = 0;
                }
                ES = 1;
            }
实现51和stm32之间通过nrf24l01通信

 

因为前面8字节在不丢帧的情况下是正确的,那就在 if 里面用 strcmp 比较一下,如果和预期的相同再进行下一步处理。这样就能控制在串口助手上显示8字节的数据,也就可以作为舍弃多余数据的条件。

另外当把数据宽度调整到32字节时,串口助手就能一次收到252字节的数据(可能是丢包了,看着应该像256=32*8 字节)。

这个问题先撂下了,如果有朋友知道请多指教:)

 

 

就到这吧,感觉有点乱。。以后再整理吧,这里只做个备忘。

现在只是验证性的完成了,即51和stm32之间能通过24l01通信了(控制点亮led),还要做好多事情呢。只是这么简单的整理完又花了不下40分钟,表达能力捉急。。睡觉睡觉

实现51和stm32之间通过nrf24l01通信

上一篇:RuleML 例子 - discount-1.0.ruleml.xml


下一篇:汇编语言读书笔记(二)