使用2.4G无线芯片nrf24L01+与蓝牙芯片nrf52832通信,nrf52832工作在2.4G模式。
nrf24L01+使用以前调试通过程序,两个nrf24L01+通信良好。
nrf52832模块使用sdk13.0中esb历程\nRF5_SDK_13.0.0_04a0bfd\examples\proprietary_rf\esb_ptx,两个nrf52832可以实现互相通信
完成以上两个基础步骤后,开始nrf24L01+与nrf52832通信。
两个设备之间的通信要匹配一下参数:
1、通讯速率 bitrate
2、数据传输宽度 payload length
3、通讯频率 frequency
4、通道号 pipe
5、CRC校验
6、ACK应答
7、白化
8、通讯地址
其中,在nrf52832中,4~7可以不用更改,是默认值,通道0,16位CRC校验,禁止自动应答(这个可以打开),白化是disable的。这些与nrf24L01+一致,也可以更改成一致的。
nrf52832的接收例程中prx更改地方为
main中
nrf_esb.h中
nrf24L01+中的初始化如下:
注意:最后红色框里面这两句很重要,有些nrf24L01+的历程里面没有,如果没有这两句是不能喝nrf52832通讯的,所以这一点要强调一下。
手册中定义为
ps:中文的nrf2401手册中没有翻译这两个寄存器,也找不到相应的使用说明
接下来是地址,地址有一个比较麻烦的变换,其实也还好,理解了也不难,开始为了躲开这种变换可以使用0xE7,0xE7,0xE7,0xE7,0xE7,如下:
nrf24L01+地址
nrf52832地址
要想改变为自己想要的地址需要遵循以下原则,地址中每个字节中的bit首位交换,地址中字节首位交换,来看一个表会比较清晰。
注意这里,这里的变换指的是写到寄存器BASE0中的数据,nrf52832的历程里面已经写好了转换函数,如下
在nrf_esb.c
感兴趣的可以按照这个方法算一算,我计算了一遍,挺有意思的,很巧妙。
那么,我们的地址究竟要怎么对应呢,看两个实际应用的图就知道了
nrf24L01
nrf52832
要知道的就是prefix[0]+addr_0是通道0的地址,其他的地址是prefix[1]~[7]+addr_1
来源:CSDN
作者:yangyang_1024
链接:https://blog.csdn.net/yangyang_1024/article/details/79580439