OpenEdv-开源电子网

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

无线模块24l01探索历程和一些问题求助

[复制链接]

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
发表于 2017-9-25 23:49:22 | 显示全部楼层 |阅读模式
搞了一晚的24l01模块,在网上查了好多资料,并没有太多有的的,但也不能全否,看的帖子了解了很多,程序倒是没多少适合新手的,快要抓狂把模块扔一边时,想想不行!人家都一两个礼拜搞定,我得坚持,于是就把原子哥的无线通信视频又看了一遍,,之前遇到的问题是我手里只有一个战舰版,再有就是51板和一个c8t6的小模块板,c8t6小板的引脚少,没有战舰的PG678,我直接改历程的引脚还通信不了(这里有很大问题后来解决,也是关键),然后我就以为引脚不能随意改,就去看芯片的数据手册,看了看也是蒙圈,就开始各种找历程,找了几个全都是工程上的,,,!@#¥%&**,,,,后来我就不信邪,我感觉引脚配置对了应该没问题的,我就把PG789改成了c8t6上有的PB68,PC13,配置都是按原子哥历程的来的,搞了两个程序,一个专门用战舰来接收,一个专门用c8t6发送,不废话了,我最后就是把c8t6发送的程序中,lcd.c给移走了,然后就好使了,战舰上的屏幕一直刷着字符串,然后我就激动的来发个帖子,这肯定是个好开头,我会继续改下去,继续深究,弄到差不多了我在传上来程序,好啦,继续搞起。
7CFE6FAC2342755AB216A2746FB0BE3A.png
qq1950361006,互帮互助,共同进步。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2017-9-25 23:51:28 | 显示全部楼层
那么问题来了,为什么lcd。c去掉 之后就好使了,是不是lcd里的io没连,程序卡主了,还是什么原因,求解答
qq1950361006,互帮互助,共同进步。
回复 支持 反对

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2017-9-26 00:20:20 | 显示全部楼层
还有个问题,发送现在是这样的
NRF24L01_TX_Mode();
                mode=' ';//′ó¿Õ¸ñ¼ü¿aê¼  
                while(1)
                {                
                        if(NRF24L01_TxPacket(tmp_buf)==TX_OK)
                        {
          
                                key=mode;
                                for(t=0;t<32;t++)
                                {
                                        key++;
                                        if(key>('~'))key=' ';
                                        tmp_buf[t]=key;       
                                }
                                mode++;
                                if(mode>'~')mode=' ';            
                                tmp_buf[32]=0;        //&#188;óè&#235;&#189;áê&#248;·&#251;       
                        }                            
                }       

为什么接收端会无线循环,我在结尾放了break,就不显示了,不放就一直循环,如何设置才能让发送想要的字符,接收应该没有问题
qq1950361006,互帮互助,共同进步。
回复 支持 反对

使用道具 举报

19

主题

246

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2017-9-21
在线时间
171 小时
发表于 2017-9-26 13:46:33 | 显示全部楼层
我做过一个多设备双向的,不过是基于UCOSIII的,感觉这个24L01还是有一点问题的,接收方如果很快的将数据接收并清除中断和接收FIFO的话,发射方会判定为发送超时、、、按道理都有接收中断出来了,肯定是ACK成功了的,所以这点一直找不到原因,最后只能抛弃传输数据量,幸好是用于传输控制命令而不是传输大数据、、、、以后可以相互交流交流
回复 支持 反对

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2017-9-26 20:53:02 | 显示全部楼层
int main(void)
{                             
        delay_init();                     //&#209;óê±oˉêy3&#245;ê&#188;&#187;ˉ          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éè&#214;&#195;&#214;D&#182;&#207;ó&#197;&#207;è&#188;&#182;·&#214;×é&#206;a×é2£o2&#206;&#187;&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;£&#172;2&#206;&#187;&#207;ìó|ó&#197;&#207;è&#188;&#182;
        uart_init(115200);                 //′&#174;&#191;ú3&#245;ê&#188;&#187;ˉ&#206;a115200
        LED_Init();                                          //3&#245;ê&#188;&#187;ˉó&#235;LEDá&#172;&#189;óμ&#196;ó2&#188;t&#189;ó&#191;ú
        KEY_Init();                                        //3&#245;ê&#188;&#187;ˉ°′&#188;ü
        NRF24L01_Init();                    //3&#245;ê&#188;&#187;ˉNRF24L01
                                               
  NRF24L01_TX_Mode();
        while(1)
        {       
                NRF24L01_TxPacket("aaa");
                delay_ms(500);
  }
}

费劲千辛万苦,一直写好多行函数还用数组去实现发送指定数据,真是走了坎坷路,没想到一行就可以,确实怪我不够仔细,c语言也不够扎实,感觉犯了好低级的错误,幸好偶然发现lcd的显示函数字符串格式和这个是一个类型,继续搞继续搞去l
qq1950361006,互帮互助,共同进步。
回复 支持 反对

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2017-9-26 22:11:14 | 显示全部楼层
现在又遇到问题了,发送端是解决了,但是接收也仅仅是在lcd上显示数据,但是如何判断接收到的消息是什么,这又是一个问题,现在就算是调到接收部分的程序了,如果能判断接收内容,并根据相应的内容去执行别的语句,才算接收部分调好,但是我不太会了,发送部分发送aa字符,NRF24L01_TxPacket("aa");,如何在接收端去判断收到的内容是aa,还是什么别的,我想用switch语句,应该是用数组,怎么用呢,啊啊啊啊啊
qq1950361006,互帮互助,共同进步。
回复 支持 反对

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2017-9-26 22:48:37 | 显示全部楼层
u8 tmp_buf[2],dd[2]={"aa"},i;                这个定义dd和接收的字符串

if(dd==tmp_buf) i=1;
                        switch(i)
                        {
                                case 1: LED1=0;break;
                                case 2: LED1=0;break;
                                case 3: LED1=0;break;
                                case 4: LED1=0;break;       
                        }
这个if好像并未成功,为什么呢,tmp_buf收到的数据是aa字符,我定义dd也为aa字符,想用switch,没有成功,求解
qq1950361006,互帮互助,共同进步。
回复 支持 反对

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2017-9-27 12:28:39 | 显示全部楼层
#include "string.h" //ó&#195;strcmp£&#172;×&#214;·&#251;′&#174;±è&#189;&#207;
....
u8 tmp_buf[2],aa[5]={"aaaaa"},bb[5]={"bbefg"},cc[2]={"cc"},dd[10]=("dddddeeeee"),i;       
.....
if(strcmp((const char*)tmp_buf,(const char*)cc)==0)
       i=3;
                         if(strcmp((const char*)tmp_buf,(const char*)aa)==0)
       i=1;
                         if(strcmp((const char*)tmp_buf,(const char*)bb)==0)
       i=2;
                         if(strcmp((const char*)tmp_buf,(const char*)dd)==0)
       i=4;
                        switch(i)
                        {
                                case 1:
                                        LCD_ShowString(30,210,200,16,16,"Received aa");                                       
                                        LED1=0;break;
                                case 2:
                                        LCD_ShowString(30,230,200,16,16,"Received bb");       
                                        LED1=1;break;
                                case 3:
                                        LCD_ShowString(30,250,200,16,16,"Received cc");
                                        LED1=0;break;
                                case 4:
                                        LCD_ShowString(30,270,200,16,16,"Received dd");       
                                        LED1=1;break;       
                        }

昨晚弄好了,但是太晚就没发出来,今天早上又修改了一下,基本弄懂了。也算是掌握了用法基础了,楼下把程序贴出来,这个接受主要是用字符串比较函数,用string。h里的        strcmp函数比较,具体百度就能懂,反正如果字符串相同返回0,判断是0就继续执行就ok,直接在if下运行程序也行,我这样用switch也是美观一些,好了,下一个准备攻克摄像头,加油
qq1950361006,互帮互助,共同进步。
回复 支持 反对

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2017-9-27 12:30:33 | 显示全部楼层
打包程序,发送用的c8t6,接收用的战舰,战舰有lcd显示,所以用来 接收,也好观测,新学的朋友快去下载测试吧,

无线通信实验发送.zip

3.73 MB, 下载次数: 191

无线通信实验接收.zip

3.8 MB, 下载次数: 164

qq1950361006,互帮互助,共同进步。
回复 支持 反对

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2017-12-1 09:24:58 | 显示全部楼层
偶然看到之前的帖子,现在在研究4463,之前的24L01那么通信有点复杂,还得再接收端设置字符串,然后判断接收到的是不是字符串,后来改成直接发送数组的数,我水平差叫不上来名字,有时间把改好的程序发进来
qq1950361006,互帮互助,共同进步。
回复 支持 反对

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2017-12-1 21:31:02 | 显示全部楼层
改版后,目前是原始最长支持32字节,等摄像头能搞好,就来个无线传输图像的玩玩

24L01无线发送接收报警.zip

10.03 MB, 下载次数: 308

qq1950361006,互帮互助,共同进步。
回复 支持 反对

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4416
金钱
4416
注册时间
2018-5-11
在线时间
922 小时
发表于 2018-5-27 21:32:42 | 显示全部楼层
最好是使用中断方式进行发送和接收,
尤其是接收数据,用中断方式非常有必要.
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2018-7-25
在线时间
13 小时
发表于 2019-1-10 23:03:04 | 显示全部楼层
可以可以
回复 支持 反对

使用道具 举报

9

主题

120

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1133
金钱
1133
注册时间
2014-7-8
在线时间
133 小时
发表于 2019-3-1 10:38:53 | 显示全部楼层
支持一下,这两天也在调试这东西!烦!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 22:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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