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亮灭显示接收成功或失败


总结

相关推荐
Wallace Zhang4 小时前
STM32F103_Bootloader程序开发11 - 实现 App 安全跳转至 Bootloader
stm32·嵌入式硬件·安全
GodKK老神灭4 小时前
STM32 CCR寄存器
stm32·单片机·嵌入式硬件
杰克逊的日记9 天前
MCU编程
单片机·嵌入式硬件
Python小老六9 天前
单片机测ntc热敏电阻的几种方法(软件)
数据库·单片机·嵌入式硬件
懒惰的bit9 天前
STM32F103C8T6 学习笔记摘要(四)
笔记·stm32·学习
HX科技10 天前
STM32给FPGA的外挂FLASH进行升级
stm32·嵌入式硬件·fpga开发·flash·fpga升级
Suagrhaha10 天前
驱动入门的进一步深入
linux·嵌入式硬件·驱动
国科安芯10 天前
基于ASP4644多通道降压技术在电力监测系统中集成应用与发展前景
嵌入式硬件·硬件架构·硬件工程
Li Zi10 天前
STM32 ADC(DMA)双缓冲采集+串口USART(DMA)直接传输12位原始数据到上位机显示并保存WAV格式音频文件 收藏住绝对实用!!!
经验分享·stm32·单片机·嵌入式硬件
进击的程序汪10 天前
触摸屏(典型 I2C + Input 子系统设备)从设备树解析到触摸事件上报
linux·网络·嵌入式硬件