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口,任意管脚均可
从机部分:
3.在家用电器中的应用??可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭煲、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。
(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; }
来源:http://www.cnblogs.com/Kevin127/p/5293869.html
因此本课程适合所有51单片机应用开发人员,电子爱好者、大中院校相关专业学生、工程技术人员的学习课程,也可作为短期培训课程,是单片机爱好者从入门到深入的经典课程。