M051/NUC123与RF24L01 RF Mouse sample code 说明
该应用程序简介:使用M051 TinyBoard和NUC123分别于两个RF24L01模块相连。
M051板子为RF发送,以及按键检测程序,NUC123板子接收RF数据,并转化成鼠标的移动方向值,通过USB把数据上传PC。
M0516 Tiny Board与RF的连接管脚
对应与MCU这边的接线为: RF模块这边:
管脚47 P14 SPI_SS0 4 CSN
管脚1 P15 SPI_MOSI 6 MOSI
管脚2 P16 SPI_MISO 7 MISO
管脚3 P17 SPI_CLK 5 SCK
管脚 33 P06 CE 3 CE
管脚 32 P07 IRQ 8 IRQ
管脚 5 P30 RXD
管脚 7 P31 TXD
管脚 19 #define KEY_UP P20 鼠标向上
管脚 20 #define KEY_DOWN P21 鼠标向下
管脚 21 #define KEY_LEFT P22 鼠标向左
管脚 22 #define KEY_RIGHT P23 鼠标向右
管脚 23 #define KEY_MOUSE_LEFT P24 鼠标左键
管脚 25 #define KEY_MOUSE_RIGHT P25 鼠标右键
软件介绍:
开发BSP版本:BSP M051_Series_BSP_CMSIS_Rev3.00.001
NRF_24L01.c 与RF模块相关的寄存器定义,RF模块各种功能函数。
NRF_24L01.h RF模块相关函数头文件
delay.c 延时函数定义
delay.h 延时函数头文件
发送程序:
工作原理:RF模块初始化后,进入接收状态,然后去检测下载波信号,看是否有当前的信号,如果有则跳频;如果没有,则初始化要发送值(发送检测到的按键值,目前一次只发一个按键值,优先级为上面按键的高到低),然后进入发送状态。
IRQ(外部GPIO)中断:用来检测发送数据后的接收状态。
如果收到接收方的ACK信号,则改变数据发送状态为完成。如果没收到ACK信号,则改变状态为超时状态。
Main()函数的主循环,用来判断发送数据的状态,如果当前状态为完成,则再次进入发送模式。如果当前状态为超时状态,则去检测当前频道上是否有载波信号,如果有改变当前的频道值,如果没有,则再进入发送模式。
NUC123 Tiny Board与RF的连接管脚
对应与MCU这边的接线为: RF模块这边:
管脚27 PC.3 SPIMOSI00 6 MOSI
管脚28 PC.2 SPIMISO00 7 MISO
管脚29 PC.1 SPICLK0 5 SCK
管脚30 PC.0 SPISS00 4 CSN
管脚 64 PB.8 CE 3 CE
管脚 1 PB.14 IRQ 8 IRQ
管脚 21 PB.0 RXD
管脚 22 PB.1 TXD
开发BSP版本:BSP NUC123SeriesBSP_CMSIS_V3.00.001
NRF_24L01.c 与RF模块相关的寄存器定义,RF模块各种功能函数。
NRF_24L01.h RF模块相关函数头文件
delay.c 延时函数定义
delay.h 延时函数头文件
RF_Handle.c 处理RF接收数据和初始化相关模块函数
RF_Handle.h 头文件
接收程序:
工作原理:RF模块初始化后,进入接收状态。
使用一个定时器做记录,如果50MS未收到数据,则进行跳频一次。
使用IRQ(外部GPIO)中断,来检测是否有收到数据,如果收到数据,则会产生IRQ中断,在IRQ中断里,如果检测到接收数据标志,就去读取数据,如果第一个数据是0xAA,则取判断第二字节数据,并把它存到RF按键变量,如果是0x55(测试使用),则计数值uTestRevCount1加1。
Main()函数的主循环里,HID_UpdateMouseData函数,检测RF是否有收到数据,有收到数据,则更新USB的Buffer,再上传至到主机。
|