STM32 NRF24l01通信

本文介绍了使用STM32开发板与NRF24L01无线模块进行一对二通信的实际案例。通过具体的接线方式、代码实现及故障排除过程,详细展示了数据发送与接收的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链接:https://pan.baidu.com/s/1R_p89zMbirEisudmYErTkg
提取码:k6i4

一对二通信

在这里插入图片描述

1.例子1

1.1实验材料
用的是正点原子的miniSTM32 和网上的stm32 开发板,都是f103rct6
在这里插入图片描述

1.2接线
在这里插入图片描述
在这里插入图片描述
1.3现象
现象1
1.按RESET后,会出现下图所示的:
请添加图片描述

2.黑色板子按KEY1进入发送模式,miniSTM32按KEY0进入接收模式
可以看到黑色板子发送消息-----蓝色板子接收消息并显示在屏幕上

请添加图片描述
现象2
当黑色板子nrf24l01出现故障,即发送端出现故障

屏幕画面不再更新
led灯还是继续闪烁

和下面程序描述一样
请添加图片描述
就是NRF24L01_RxPacket(tmp_buf)等于1了

while(1)
		{	  		    		    				 
			if(NRF24L01_RxPacket(tmp_buf)==0)//一旦接收到信息,则显示出来.
			{
				tmp_buf[32]=0;//加入字符串结束符
				LCD_ShowString(0,190,lcddev.width-1,32,16,tmp_buf);    
			}else delay_us(100);	   
			t++;
			if(t==10000)//大约1s钟改变一次状态
			{
				t=0;
				LED0=!LED0;
			} 				    
		};	

这个函数,意思是接收状态—成功返回0失败返回1
在这里插入图片描述

u8 NRF24L01_RxPacket(u8 *rxbuf)
{
	u8 sta;		    							   
	SPI1_SetSpeed(SPI_BAUDRATEPRESCALER_8); //spi速度为6.75Mhz(24L01的最大SPI时钟为10Mhz)   
	sta=NRF24L01_Read_Reg(STATUS);          //读取状态寄存器的值    	 
	NRF24L01_Write_Reg(NRF_WRITE_REG+STATUS,sta); //清除TX_DS或MAX_RT中断标志
	if(sta&RX_OK)//接收到数据
	{
		NRF24L01_Read_Buf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//读取数据
		NRF24L01_Write_Reg(FLUSH_RX,0xff);  //清除RX FIFO寄存器 
		return 0; 
	}	   
	return 1;//没收到任何数据
}		

现象3
当接收端出现故障:
出现如下提示

在这里插入图片描述
接收端正常后
则立刻正常发送
(图中按KEY0进入接收模式,发送端就正常发送了)

请添加图片描述
发送端函数
就是一直检测是不是等于TX_OK, 在这里插入图片描述

NRF24L01_TxPacket函数原型如下;其中读取状态寄存器的值,来判断是处于什么状态;
状态寄存寄存器地址是0x07,可以读出以下几种状态值
在这里插入图片描述

在这里插入图片描述

u8 NRF24L01_TxPacket(u8 *txbuf)
{
	u8 sta;
 	SPI1_SetSpeed(SPI_BAUDRATEPRESCALER_8); //spi速度为6.75Mhz(24L01的最大SPI时钟为10Mhz)   
	NRF24L01_CE=0;
  	NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//写数据到TX BUF  32个字节
 	NRF24L01_CE=1;                         //启动发送	   
	while(NRF24L01_IRQ!=0);                 //等待发送完成
	sta=NRF24L01_Read_Reg(STATUS);          //读取状态寄存器的值	   
	NRF24L01_Write_Reg(NRF_WRITE_REG+STATUS,sta); //清除TX_DS或MAX_RT中断标志
	if(sta&MAX_TX)                          //达到最大重发次数
	{
		NRF24L01_Write_Reg(FLUSH_TX,0xff);  //清除TX FIFO寄存器 
		return MAX_TX; 
	}
	if(sta&TX_OK)                           //发送完成
	{
		return TX_OK;
	}
	return 0xff;//其他原因发送失败
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值