RF24L01+,是工作在2.4~2.5GHz 频段的,具备自动重发功能,6 个数据传输通道,最大无线传输速率为2Mbits。MCU 可与该芯片通过SPI 接口访问芯片的寄存器进行配置,达到控制模块、通过该模块实现无线通讯的目的。
具体细节参考《《野火STM32--2.4G无线传输》》
优点:不需要建立连接就可以进行收发
PCB管脚
其中各个接口作用如下
在应用中我们需要一对收发,也就是一个主机和一个从机。主机和从机的驱动部分是一样的(配置文件SPI_NRF.c 文件相同),区别是main函数中调用的模式不同,主机一般是发送模式NRF_TX_Mode();,而从机采用的是接收模式 NRF_RX_Mode();
应用的基本流程
注意事项:
(1)首先要检查接线,一般配置的是SPI1,然后要对应程序里面的配置来接线
SPI1
SCK = PA5 MISO = PA6 MOSI = PA7
CE = PA4 CSN =PC4 IRQ = PC5
后两个是作为普通IO口,任意管脚均可
从机部分:
(1)SPI_NRF_Init(); //初始化SPI接口
(2)NRF_RX_Mode(); // 设置为接收模式
(3)while循环里等待接收,判断接收状态,并进行接收
#include “stm32f10x.h”#include “bsp_usart1.h”#include “bsp_spi_nrf.h”u8 status; //用于判断接收/发送状态u8 rxbuf[4]; //接收缓冲u8 i;
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”);
NRF_RX_Mode(); // 设置为接收模式
printf(“\r\n 从机端 进入接收模式\r\n”); while(1)
{
/*等待接收数据*/
status = NRF_Rx_Dat(rxbuf); /*判断接收状态*/
switch(status)
{ case RX_DR: for(i=0;i《4;i++)
{
printf(“\r\n 从机端 接收到 主机端 发送的数据为:%d \r\n”,rxbuf[i]);
}break;
case ERROR:
printf(“\r\n 从机端 接收出错。 \r\n”);break;
}
}
}
主机部分:
(1)SPI_NRF_Init(); //初始化SPI接口
(2)NRF_TX_Mode(); // 设置为发送模式
(3)发送数据,查看发送状态,否则重发。比如用按键中断来进行一次发送
注:一般都会显示超时,但是实际接收端有接收到。
初始化和配置与从机相同,除了TX模式
发送部分的代码:
void EXTI0_IRQHandler(void)
{ int i=0; if(EXTI_GetITStatus(EXTI_Line0) != RESET) // 确保是否产生了EXTI Line中断!! { for(i=0;i《4;i++)
txbuf[i]+=1;
printf(“\r\n exit \r\n”);
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;
}
全部0条评论
快来发表一下你的评论吧 !