|
本帖最后由 iYoutudou 于 2022-6-11 02:33 编辑
目的:借鉴Mirf库驱动nRF模块,通过串口监视工作状态
特别说明:我将模块配置为了无需ACK的单发状态(EN_AA/EN_RXADDR/SETUP_RETR均配置为0x00)
现象问题:寄存器配置显示正确,数据也加载到FIFO中了,但就是发不出去(STATUS=0E,FIFO_STATUS=0X01)串口通信正常,模块是正常的(换到STM32驱动就可以发出去)
引脚关系: CE -> 8 // * CSN -> 7 // * SCK -> 13 * MOSI -> 11 * MISO -> 12 * IRQ -> 2
整体思路:nRF初始化默认配置为接收状态,在接到电脑通过串口发送的命令后启动发送
setup():
串口和定时器初始化
Mirf.init,配置CE和CSN引脚
Mirf.config 配置为接收模式--清空FIFO接收区
loop():
读取当前EN_AA / EN_RXADDR / SETUP_RETR / CONFIG寄存器配置状态和STATUS、FIFO_STATUS寄存器状态
Mirf.send 检验是否在发送状态---配置为发送模式---清空FIFO发送区---CE置高发送
读取发送后STATUS、FIFO_STATUS寄存器配置状态
延时循环计数
源代码如下:
1.主程序
- void loop() {
- Serial.print( "循环第" );
- Serial.print(i, HEX );
- Serial.println("次");
- /***********1.读取EN_AA等寄存器的配置值*******************/
- Mirf.readRegister(EN_AA,&temp[0],1); //读取寄存器配置值
- Serial.print( "EN_AA:" );
- Serial.println( temp[0], HEX );
-
- Mirf.readRegister(EN_RXADDR,&temp[0],1); //读取寄存器配置值
- Serial.print( "EN_RXADDR:" );
- Serial.println( temp[0], HEX );
- Mirf.readRegister(SETUP_RETR,&temp[0],1); //读取寄存器配置值
- Serial.print( "SETUP_RETR:" );
- Serial.println( temp[0], HEX );
-
- Mirf.readRegister(CONFIG,&temp[0],1); //读取寄存器配置值
- Serial.print( "CONFIG:" );
- Serial.println( temp[0], HEX );
- /***********2.读取STATUS等寄存器的初始值*******************/
- //Mirf.readRegister(STATUS,&temp[0],1); //读取寄存器配置值
- temp[0] = Mirf.getStatus();
- Serial.print( "发送前STATUS:" );
- Serial.println( temp[0], HEX );
-
- Mirf.readRegister(FIFO_STATUS,&temp[0],1); //读取寄存器配置值
- Serial.print( "发送前FIFO_STATUS:" );
- Serial.println( temp[0], HEX );
- /**************3.发送数据*******************/
- Mirf.send(PC_Buf); //发送指令,发送32字节数据
- //while(Mirf.isSending()) delay(20); //直到发送成功(TX_DS为1),退出循环 20220529卡死
- /***********4.读取STATUS等寄存器的初始值*******************/
- Mirf.readRegister(STATUS,&temp[0],1); //读取寄存器配置值
- Serial.print( "发送后STATUS:" );
- Serial.println( temp[0], HEX );
- Mirf.readRegister(FIFO_STATUS,&temp[0],1); //读取寄存器配置值
- Serial.print( "发送后FIFO_STATUS1:" );
- Serial.println( temp[0], HEX );
- //Mirf.writeRegister(STATUS,0xff,1); //改造为清除状态寄存器
- delay(1000*i); if(i<5)i++; //此行为节奏控制,后续可删除
- }
复制代码 2.Mirf.CPP[改造后]
源码.rar
(7.1 KB, 下载次数: 0)
|
|