uint8_t AX_NRF24L01_Init(void); //NRF24L01初始化 void AX_NRF24L01_SetMode(uint8_t mode, uint8_t *addr_tx, uint8_t *addr_rx); //NRF24L01设置发射接收模式及地址 uint8_t AX_NRF24L01_SendPacket(uint8_t *pbuf); //NRF24L01发送数据包 uint8_t AX_NRF24L01_ReadPacket(uint8_t *pbuf); //NRF24L01读取数据包 |
//NRF24L01 地址宽度 #define AX_TX_ADR_WIDTH 5 //发送地址宽度 #define AX_RX_ADR_WIDTH 5 //接收地址宽度 //NRF24L01 数据宽度 #define AX_TX_PLOAD_WIDTH 32 //发送数据宽度 #define AX_RX_PLOAD_WIDTH 32 //接收数据宽度 //NRF24L01 操作状态 #define AX_NRF24L01_TX_ERR 0xff //发送未知错误 #define AX_NRF24L01_TX_MAX 0x10 //达到最大发送次数 #define AX_NRF24L01_TX_OK 0x20 //发送数据完成 #define AX_NRF24L01_RX_ERR 0x55 //接收未知错误 #define AX_NRF24L01_RX_OK 0x40 //接收数据完成 #define AX_NRF24L01_MODE_TX 0x01 //发送模式 #define AX_NRF24L01_MODE_RX 0x02 //接收模式 |
int main(void) { uint8_t mode; //工作模式 uint8_t xrt1_address[AX_TX_ADR_WIDTH] = { 0x01,0x02,0x03,0x04,0x01 }; //发送端地址 uint8_t xrt2_address[AX_RX_ADR_WIDTH] = { 0x01,0x02,0x03,0x04,0x01 }; //接收端地址 uint8_t nrf24l01_txbuf[32] = { 0 }; uint8_t nrf24l01_rxbuf[32] = { 0 }; /* X-CTR100初始化 */ AX_Init(115200); printf("***X-CTR100 NRF24L01无线通信测试例程***rnrn"); //获取拨码开关SW1状态,并设定发射接收模式 mode = AX_SW_GetSW1Status(); printf("*通过拨码开关SW1可切换发送或接收模式,复位有效rn"); //模块初始化及配置 if (AX_NRF24L01_Init()) //NRF24L01初始化 { if (mode == 1) //发送模式 { printf("*当前工作模式:发射模式 rn"); AX_NRF24L01_SetMode(AX_NRF24L01_MODE_TX, xrt1_address, xrt2_address); //设置为发送模式,并配置地址 printf("*发射地址:%2x %2x %2x %2x %2x rn", xrt1_address[0], xrt1_address[1], xrt1_address[2], xrt1_address[3], xrt1_address[4]); printf("*接收地址:%2x %2x %2x %2x %2x rnrn", xrt2_address[0], xrt2_address[1], xrt2_address[2], xrt2_address[3], xrt2_address[4]); } else //接收模式 { printf("*当前工作模式:接收模式 rn"); AX_NRF24L01_SetMode(AX_NRF24L01_MODE_RX, xrt2_address, xrt1_address); //设置为接收模式,并配置地址 printf("*接收地址:%2x %2x %2x %2x %2x rn", xrt1_address[0], xrt1_address[1], xrt1_address[2], xrt1_address[3], xrt1_address[4]); printf("*等待接收数据...... rnrn"); } } else { //NRF24L01 故障或未连接 printf("*NRF24L01 初始化失败,请查看模块是否连接。。。 rn"); while (1) { AX_Delayms(50); AX_LEDR_Toggle(); //红灯闪烁 } } //X-API测试:无线发送接收测试 nrf24l01_txbuf[0] = 0; nrf24l01_txbuf[1] = 1; nrf24l01_txbuf[2] = 2; nrf24l01_txbuf[3] = 3; while (1) { if (mode == 1) //发送模式 { if (AX_NRF24L01_SendPacket(nrf24l01_txbuf) == AX_NRF24L01_TX_OK) { printf("*发送的数据:%2x %2x %2x %2x rn", nrf24l01_txbuf[0], nrf24l01_txbuf[1], nrf24l01_txbuf[2], nrf24l01_txbuf[3]); AX_LEDG_On(); AX_Delayms(100); AX_LEDG_Off(); AX_Delayms(100); } else //发送失败红灯闪烁 { AX_LEDR_On(); AX_Delayms(100); AX_LEDR_Off(); AX_Delayms(100); } nrf24l01_txbuf[0]++; } else //接收模式 { if (AX_NRF24L01_ReadPacket(nrf24l01_rxbuf) == AX_NRF24L01_RX_OK) { printf("*接收到数据:%2x %2x %2x %2x rn", nrf24l01_rxbuf[0], nrf24l01_rxbuf[1], nrf24l01_rxbuf[2], nrf24l01_rxbuf[3]); AX_LEDG_On(); AX_Delayms(90); AX_LEDG_Off(); AX_Delayms(90); } else //接收失败红灯闪烁 { AX_Delayms(90); } } } } |
更多回帖