使用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 |
|