1 #define nRF24L01_CE_PIN nRF24L01_CE 2 #define nRF24L01_CE_PIN_SET nRF24L01_CE=1 3 #define nRF24L01_CE_PIN_CLEAR nRF24L01_CE=0 4 //#define nRF24L01_CE_PIN_IN nRF24L01_CE_PIN_WRITE nRF24L01_CE 7 #define nRF24L01_CE_PIN_READ nRF24L01_CE
因为这几个引脚没有既是输出又要做输入的引脚,所以注释掉了第4、5两行,但是对于CC2541这样的单片机,虽然省了引脚属性切换,但是还是要在初始化的地方进行属性设置的!由于51的引脚操作简单,所以set、clear、read、write都比较简单。
接着是nRF24L01的一些寄存器指令和寄存器地址,这里只贴部分:
READ_REG 0x00 WRITE_REG 0x20 RD_RX_PLOAD 0x61 WR_TX_PLOAD 0xA0 FLUSH_TX 0xE1 FLUSH_RX 0xE2 REUSE_TX_PL 0xE3 NOP 0xFF CONFIG 0x00 EN_AA 0x01 EN_RXADDR 0x02 SETUP_AW 0x03 SETUP_RETR 0x04 // 自动重发功能设置
最后是.C内封装的函数,上面几个是基本通信函数(其中第一个是最基本的通信函数,负责传送8bit数据)。下面几个就是nRF24L01的功能函数,分别负责初始化、检测是否正常、设置为接收模式、设置为发送模式、接收数据和发送数据。一会在main函数中你会看到一些关于它们的基本组合用法。
t_uc nRF24L01_SPI_ReadReg(t_uc reg);t_uc nRF24L01_SPI_WriteReg(t_uc reg, t_uc value);t_uc nRF24L01_SPI_ReadBuf(t_uc reg, t_uc *pBuf, t_uc Len); 5 t_uc nRF24L01_SPI_WriteBuf(t_uc reg, t_uc *pBuf, t_uc Len); nRF24L01_Init(void); 9 t_uc nRF24L01_Check(void); nRF24L01_Set_TX_Mode(t_uc nRF24L01_RxPacket(unsigned nRF24L01_TxPacket(unsigned char *tx_buf);//发送tx_buf中数据
3、主函数描述
主函数便是调用封装的几个函数实现简单的无线通信功能。虽然main函数代码看起来烂了点,但是我发现自己修改一下反而不利于理解,索性就拿这个原汁原味的厂家给的demo中的main函数介绍了:
1 void main() 2 { uart_flag = nRF24L01_Init(); UART_Init(); (nRF24L01_Check()) { 10 LED = 0; 11 delay_ms(200); 12 LED = 1; 13 delay_ms(200); 14 } 15 while(1) 16 { (!nRF24L01_RxPacket(Rx_Buf)) { { nRF24L01_Set_TX_Mode(); Tx_Buf1[; nRF24L01_TxPacket(Tx_Buf1); UART_Send_Byte(); UART_Send_Byte(); ); 30 UART_Send_Byte(a); ); 32 LED = 0; 33 delay_ms(300); 34 LED = 1; ES = uart_flag = ; } 41 } { LED = 0; 46 delay_ms(300); 47 LED = 1; } 50 } 51 }
小结&计划
至此,算是马马虎虎封装了一传感器、一个显示器、一个通信模块。是不是我们可以着手做一个组合型的更有意思的东西了?还太早!因为我们无论是串口还是2.4还是蓝牙,都仅仅实现通信,并没有采取必要措施保证通信的可靠与稳定,所以接下来一段时间我们将会在底层通信物理层上继续封装高层稳定的通信协议~敬请期待!
链接
希望这些资料对大家有帮助
大家顺手点个赞支持一下(⊙o⊙)哦
大晚上的,不容易丫!
@beautifulzzzz
2015-10-9 持续更新中~