NRF24L01模块STM32-接收端

前言

在调试接收端时,建议先看下下篇文章NRF24L01调试心得

环境:

芯片:STM32F103C8T6

Keil:V5.24.2.0


一、接收端初始化

复制代码
void NRF24l01_rx_mode(void)
{
    NRF24L01_CE(0);
	NRF24l01_write_buf(NRF_WRITE_REG + TX_ADDR, (uint8_t *)TX_ADDRESS, RX_ADR_WIDTH);    /* 写TX节点地址 */
    NRF24l01_write_buf(NRF_WRITE_REG + RX_ADDR_P0, (uint8_t *)RX_ADDRESS, RX_ADR_WIDTH);    /* 写RX节点地址 */

    nrf24l01_write_reg(NRF_WRITE_REG + EN_AA, 0x01);                                        /* 使能通道0的自动应答 */
    nrf24l01_write_reg(NRF_WRITE_REG + EN_RXADDR, 0x01);                                    /* 使能通道0的接收地址 */
    nrf24l01_write_reg(NRF_WRITE_REG + RF_CH, 00);                                          /* 设置RF通信频率 */
    nrf24l01_write_reg(NRF_WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH);                           /* 选择通道0的有效数据宽度 */
    nrf24l01_write_reg(NRF_WRITE_REG + RF_SETUP, 0x0f);                                     /* 设置TX发射参数,0db增益,2Mbps */
    nrf24l01_write_reg(NRF_WRITE_REG + CONFIG, 0x0f);                                       /* 配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式 */
    NRF24L01_CE(1);                                                                         /* CE为高,进入接收模式 */
}

二、接收端接收代码

1.接收代码

复制代码
uint8_t NRF24l01_rx_packet(uint8_t *prxbuf)
{
    uint8_t sta,sa;
    uint8_t rval = 1;
    
    sta = nrf24l01_read_reg(STATUS);                            /* 读取状态寄存器的值 */
    nrf24l01_write_reg(NRF_WRITE_REG + STATUS, sta);            /* 清除RX_OK中断标志 */

    if (sta & RX_OK)                                            /* 接收到数据 */
    {
        NRF24l01_read_buf(RD_RX_PLOAD, prxbuf, RX_PLOAD_WIDTH); /* 读取数据 */
        nrf24l01_write_reg(FLUSH_RX, 0xff);                     /* 清除RX FIFO寄存器 */
		Delay_us(150);
		rval = 0;                                               /* 标记接收完成 */
    }

    return rval;                                                /* 返回结果 */
}

2.验证代码

复制代码
				while(1)
				{
				    OLED_Clear();
					if(1)
					{
						if (NRF24l01_rx_packet(Buf) == 0)   /* 一旦接收到信息,则显示出来. */
						{
							GPIO_ResetBits(GPIOC, GPIO_Pin_13);		

							OLED_ShowHexNum(1,0,Buf[0],2,OLED_6X8);
							OLED_ShowHexNum(60,0,Buf[1],2,OLED_6X8);
							OLED_ShowHexNum(1,20,Buf[2],2,OLED_6X8);
							OLED_ShowHexNum(60,20,Buf[3],2,OLED_6X8);
							OLED_ShowHexNum(1,40,Buf[4],2,OLED_6X8);
							OLED_ShowHexNum(60,40,Buf[5],2,OLED_6X8);							
							
						}
						else
						{					
							OLED_ShowString(8, 18, "NGNG", OLED_6X8);
							GPIO_SetBits(GPIOC, GPIO_Pin_13);
						}
						

						OLED_ShowHexNum(60,40,Buf[5],2,OLED_6X8);			
						OLED_Update();
						Delay_ms(500);
					}
				}

通发送端一样,也可以进行LED亮灭显示接收成功或失败


总结

相关推荐
czhaii1 小时前
轴承排列自动运行 定时器 外中断 PWM部分程序
嵌入式硬件
湮雨塵飛13 小时前
ESP32开发之LED闪烁和呼吸的实现
vscode·嵌入式硬件·esp32·freertos·呼吸灯
iCxhust14 小时前
Deepseek给出的8255显示例程
c语言·开发语言·c++·单片机·嵌入式硬件
小智学长 | 嵌入式14 小时前
SOC-ESP32S3部分:28-BLE低功耗蓝牙
网络·单片机·esp32
RFID舜识物联网15 小时前
RFID测温芯片助力新能源产业安全与能效提升
大数据·人工智能·嵌入式硬件·物联网·安全
InJre15 小时前
STM32通过rt_hw_hard_fault_exception中的LR寄存器追溯程序问题
java·stm32·嵌入式硬件
逼子格16 小时前
硬件工程师笔记——555定时器应用Multisim电路仿真实验汇总
笔记·单片机·嵌入式硬件·multisim·电路仿真·信号发生器·555定时器
xiaobobo333017 小时前
解决vscode打开一个单片机工程文件(IAR/keil MDK)因无法找到头文件导致的结构体成员不自动补全问题。
vscode·stm32·无法找到头文件·结构体成员不补全
夜月yeyue17 小时前
高性能MCU的MPU与Cache优化详解
linux·开发语言·stm32·单片机·嵌入式硬件
Lester_110119 小时前
嵌入式学习笔记 - FreeRTOS关于vApplicationGetIdleTaskMemory
笔记·stm32·学习·freertos