完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
2.4g无线跳频(一)
这里是针对一对一无线通信的简单定时跳频。 一、随机种子与序列 无线跳频首选要生成一个随机的频道序列,让通信的双方按照这个序列跳频。利用C语言库函数rand()与srand(SEED)可实现伪随机数的生成。实际上我们只需要库中固有序列,而随机种子才是我们要注意的。一般随机种子可以用单片机AD脚悬空值,像STM32F4系列本身自带硬件随机数生成器,更方便。 只要有了随机种子SEED,无线通信的双方只需交流种子,便可算出一个序列,这个序列可以是无限,也可以是有限长度的。如果使用有限长度的序列进行跳频,需要在上个周期通知对方下个周期的随机种子,以使通信能够维持。 二、代码 void BuildRandomSequence(unsigned char * data,const unsigned int len,const unsigned int seed) { unsigned char temp,xr; unsigned int i=0; for(i=0; i { data = i; } srand(seed); for(i=0; i { xr=rand()%len; temp=data; data=data[xr]; data[xr]=temp; } } BuildRandomSequence()函数可生成一个长度为len,由[0, len-1]的整数组成的不重复序列,序列由种子参数seed决定。 1.在一对一通信开始之前,应避免大量机器开机时同时使用一个通道,所以从机应该随机选择一个规定范围内的频道,因此主机并不知道从机的所在频道。MCU需生成一个真随机数作为种子,利用以上函数再生成随机序列。用序列对应的频道去轮询从机,一旦有回应,则可找到从机的频道。通信就是这样开始。 2.如果使用有限长度的序列,那么此函数可以生成一个周期内的跳频序列,通信中,每一周期,主机负责生成序列,并且需要提前通知从机随机种子SEED。 三、验证: 在电脑上使用DEV-C++验证 可见种子相同,则生成相同的序列,例子程序中排序是为了方便观察对比。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1561 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1501 浏览 1 评论
933 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
665 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1555 浏览 2 评论
1850浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
613浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
506浏览 3评论
510浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
491浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 18:48 , Processed in 1.052368 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号