/* * 函数名:NRF_Tx_Dat * 描述 :用于向NRF的发送缓冲区中写入数据 * 输入 :txBuf:存储了将要发送的数据的数组,外部定义 * 输出 :发送结果,成功返回TXDS,失败返回MAXRT或ERROR * 调用 :外部调用 */ u8 NRF_Tx_Dat(u8 *txbuf,u32 len) { u8 state; u32 L; if( nrf_mode != TX_MODE) { NRF_TX_Mode(); } L = (len+MAX_ONCE_TX_NUM-1) / MAX_ONCE_TX_NUM ; //进位取整 while(L--) { state = NRF_TX_Dat_Once(txbuf); if( !(state & TX_DS)) //如果发送不成功,则结束 { break; //跳出while循环 } txbuf += MAX_ONCE_TX_NUM; //修正指向的位置 } #if IS_AUTO_RX_MODE //自动进入接收模式 NRF_RX_Mode(); #endif return state; }
int main(void) { /* 串口1初始化 */ USART1_Config(); /*SPI接口初始化*/ SPI_NRF_Init(); printf("\r\n 这是一个 NRF24L01 无线传输实验 \r\n"); printf("\r\n 这是无线传输 从机端 的反馈信息\r\n"); printf("\r\n 正在检测NRF与MCU是否正常连接。。。\r\n"); /*检测NRF模块与MCU的连接*/ status = NRF_Check(); if(status == SUCCESS) printf("\r\n NRF与MCU连接成功\r\n"); else printf("\r\n 正在检测NRF与MCU是否正常连接。。。\r\n"); while(1) { printf("\r\n 从机端 进入接收模式\r\n"); NRF_RX_Mode(); /*等待接收数据*/ status = NRF_Rx_Dat(rxbuf); /*判断接收状态*/ if(status == RX_DR) { for(i=0; i<4; i++) { printf("\r\n 从机端 接收到 主机端 发送的数据为:%d \r\n",rxbuf[i]); /*把接收的数据+1后发送给主机*/ rxbuf[i]+=1; txbuf[i] = rxbuf[i]; } } printf("\r\n 从机端 进入自应答发送模式\r\n"); NRF_TX_Mode(); /*不断重发,直至发送成功*/ do { status = NRF_Tx_Dat(txbuf); } while(status == MAX_RT); } }
/* * 函数名:NRF_Tx_Dat * 描述 :用于向NRF的发送缓冲区中写入数据 * 输入 :txBuf:存储了将要发送的数据的数组,外部定义 * 输出 :发送结果,成功返回TXDS,失败返回MAXRT或ERROR * 调用 :外部调用 */ void NRF_ISR_Tx_Dat(u8 *txbuf,u32 len) { u32 L = (len+ MAX_ONCE_TX_NUM -1)/MAX_ONCE_TX_NUM; if( nrf_mode != TX_MODE) { NRF_TX_Mode(); } while(isr_L != 0); //等待isr_L 为 0 ,即 发送完毕 isr_addr = txbuf; isr_L = L; NRF_ISR_Tx_Dat_Once(); //激活一次发送,此后的发送由中断来调用 }
/** * @brief 主函数 * @param 无 * @retval 无 */ int main(void) { SPI_NRF_Init(); /* 串口1初始化 */ USART1_Config(); printf("\r\n 这是一个 NRF24L01 无线传输实验 \r\n"); printf("\r\n 这是无线传输 主机端 的反馈信息\r\n"); printf("\r\n 正在检测NRF与MCU是否正常连接。。。\r\n"); /*检测NRF模块与MCU的连接*/ status = NRF_Check(); /*判断连接状态*/ if(status == SUCCESS) printf("\r\n NRF与MCU连接成功!\r\n"); else printf("\r\n NRF与MCU连接失败,请重新检查接线。\r\n"); while(1) { printf("\r\n 主机端 进入自应答发送模式\r\n"); NRF_TX_Mode(); /*开始发送数据*/ status = NRF_Tx_Dat(txbuf); /*判断发送状态*/ switch(status) { case MAX_RT: printf("\r\n 主机端 没接收到应答信号,发送次数超过限定值,发送失败。 \r\n"); break; case ERROR: printf("\r\n 未知原因导致发送失败。 \r\n"); break; case TX_DS: printf("\r\n 主机端 接收到 从机端 的应答信号,发送成功! \r\n"); break; } printf("\r\n 主机端 进入接收模式。 \r\n"); NRF_RX_Mode(); /*等待接收数据*/ status = NRF_Rx_Dat(rxbuf); /*判断接收状态*/ switch(status) { case RX_DR: for(i=0;i<4;i++) { printf("\r\n 主机端 接收到 从机端 发送的数据为:%d \r\n",rxbuf[i]); txbuf[i] =rxbuf[i]; } break; case ERROR: printf("\r\n 主机端 接收出错。 \r\n"); break; } }// while(1) }