|
本帖最后由 胡胜朋 于 2020-2-25 10:25 编辑
利用普中的51开发板和stm32f1开发板,其中51的开发板只做为发射端,stm32的开发板只作为接收端,另外在网上的很多NRF的例程,都是有自动应答(即在发送端发送完数据完成,接收端接收到数据之后会返回给发送端数据,来表示自己已经接收到数据),在我的代码中我将这些删掉很多代码,因为我在刚开始学的时候,特别怕麻烦,一看到官方的代码,就头大,所以我是51发数据,51开发板上提供了四个独立按键,k1~k4,我是按下一个按键,就给32发送一个数据,(如果不按的话,就不发送)k1~k4,分别发送上(up)下(down)左(left)右(right),那么怎么样判断32是否接收到数据,在32的循环中,我将数据区的值,显示在液晶屏上,如果接受到了数据,那么就会显示,up,down,left,right其中一个,具体是哪个,取决于你按下的按键就可以了,另外32接受到数据之后,我没有让它返回给发送端一个值,也就是说发射端并不知道对方是否接收到,不过我亲测,一按下就可以接收到,另外在32的代码中,我将每一个功能的函数,都写成一个自定义函数,这样在主函数中就会显得简洁,看起来舒服些。 nRF24L01是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器芯片,输出功率频道选择和协议的设置可以通过SPI 接口进行设置,发射数据时,首先将nRF24L01配置为发射模式:接着把接收节点地址TX_ADDR和有效数据TX_PLD按照时序由SPI口写入nRF24L01缓存区,TX_PLD必须在CSN为低时连续写入,而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10μs,延迟130μs后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进入接收模式,接收应答信号(自动应答接收地址应该与接收节点地址TX_ADDR一致)。如果收到应答,则认为此次通信成功,TX_DS置高,同时TX_PLD从TXFIFO中清除;若未收到应答,则自动重新发射该数据(自动重发已开启),若重发次数(ARC)达到上限,MAX_RT置高,TXFIFO中数据保留以便再次重发;MAX_RT或TX_DS置高时,使IRQ变低,产生中断,通知MCU。最后发射成功时,若CE为低则nRF24L01进入空闲模式1;若发送堆栈中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高,则进入空闲模式2。
在32的开放板上,我主要实现的功能是1:利用超声波模块测出障碍物的距离,并显示在液晶屏上
2:利用ds18b20模块测环境温度,并显示在液晶屏上
3:测出32开发板芯片内部的温度,并显示在液晶屏上
4:NRF的状态是否存在,存在显示success,不存在显示error
5:显示NRF接收到的值
注:完整的功能是:1:能够进行超声波避障的小车 2:自动寻迹的小车,3:通过51来遥控的小车,具体是避障还是寻迹还是遥控,可以通过NRF在51开发板上选择,不过由于时间紧,缺少一些小零件,没有完全实现,但是主要功能已经完成,我会尽快更新。本工程的代码以压缩包的形式上传在附件中,另外有功能实现的效果图(图片的形式),以及所用到的模块的使用方法(PPT的形式)。
|
评分
-
查看全部评分
|