历史上的今天
今天是:2024年10月30日(星期三)
2020年10月30日 | 调试好的nRF24L01库文件 单片机源程序
2020-10-30 来源:51hei
单片机源程序如下:
#include "nRF24L01Drv.h"
#include "USART.h"
#include "stdio.h"
#include "config.h"
#include #include "spi.h" /** * 1.改多路方法: * NUM_USED_PIPE 改为使用的路数, RX_ADDRESS 分别指定 RX的地址, * RX_PLOAD_WIDTH 改为每一路的PAYLOAD * NRF24L01_RxPacket 里面知道是哪一路在接收 * * * 2. 发送时自动将CONFIG 备份,然后切换TX后再切换回去 * 并且备份RX_ADDR_P0 * * 3. 通道0,1 支持40位地址写入, 但是通道2,3,4,5只支持1位写入,其他地址与1通道相同 * * 4. NRF24L01_TxPacket 支持写入TX_PLOAD_WIDTH 个字节 * * 5. NRF24L01_RxPacket 第一个参数是PIPE_NUMBER, 第二个参数是 读入的 buffer * * * **/ #define NUM_USED_PIPE 3 const u8 TX_ADDRESS[TX_ADR_WIDTH] = {0x35, 0x30, 0x30, 0x30, 0x35}; const u8 RX_ADDRESS[6][RX_ADR_WIDTH] = {{0x33, 0x30, 0x30, 0x30, 0x33}, {0x34, 0x30, 0x30, 0x30, 0x33}, {0x35, 0x00, 0x00, 0x00, 0x00}}; u8 RX_PLOAD_WIDTH[6] = {0x02, 0x02, 0x02, 0x00, 0x00, 0x00}; u8 SPI_RW(u8 tr_data) { u16 bit_ctr; for (bit_ctr = 0; bit_ctr < 8; bit_ctr++) // output 8-bit { NRF_MOSI = (tr_data & 0x80); // output 'uchar', MSB to MOSI tr_data = (tr_data << 1); // shift next bit into MSB.. NRF_SCK = 1; // Set SCK high.. tr_data |= NRF_MISO; // capture current MISO bit NRF_SCK = 0; // ..then set SCK low again } return (tr_data); // return read uchar } /*********************************************/ /* 函数功能:给24L01的寄存器写值(一个字节) */ /* 入口参数:reg 要写的寄存器地址 */ /* value 给寄存器写的值 */ /* 出口参数:status 状态值 */ /*********************************************/ u8 NRF24L01_RW_Reg(u8 reg, u8 value) { u16 status; NRF_CSN = 0; // CSN low, init SPI transaction status = SPI_RW(reg); // select register SPI_RW(value); // ..and write value to it.. NRF_CSN = 1; // CSN high again return (status); // return nRF24L01 status uchar } /*************************************************/ /* 函数功能:读24L01的寄存器值 (一个字节) */ /* 入口参数:reg 要读的寄存器地址 */ /* 出口参数:value 读出寄存器的值 */ /*************************************************/ u8 NRF24L01_Read_Reg(u8 reg) { u8 reg_val; NRF_CSN = 0; // CSN low, initialize SPI communication... SPI_RW(reg); // Select register to read from.. reg_val = SPI_RW(0xFF); // ..then read registervalue NRF_CSN = 1; // CSN high, terminate SPI communication return (reg_val); // return register value } /*********************************************/ /* 函数功能:读24L01的寄存器值(多个字节) */ /* 入口参数:reg 寄存器地址 */ /* *pBuf 读出寄存器值的存放数组 */ /* len 数组字节长度 */ /* 出口参数:status 状态值 */ /*********************************************/ u8 NRF24L01_Read_Buf(u8 reg, u8 *pBuf, u8 len) { u16 status, uchar_ctr; NRF_CSN = 0; // Set CSN low, init SPI tranaction status = SPI_RW(reg); // Select register to write to and read status uchar for (uchar_ctr = 0; uchar_ctr < len; uchar_ctr++) pBuf[uchar_ctr] = SPI_RW(0xFF); // NRF_CSN = 1; return (status); // return nRF24L01 status uchar } /**********************************************/ /* 函数功能:给24L01的寄存器写值(多个字节) */ /* 入口参数:reg 要写的寄存器地址 */ /* *pBuf 值的存放数组 */ /* len 数组字节长度 */ /**********************************************/ u8 NRF24L01_Write_Buf(u8 reg, u8 *pBuf, u8 len) { u8 status, u8_ctr; NRF_CSN = 0; status = SPI_RW(reg); //发送寄存器值(位置),并读取状态值 for (u8_ctr = 0; u8_ctr < len; u8_ctr++) SPI_RW(*pBuf++); //写入数据 NRF_CSN = 1; return status; //返回读到的状态值 } /*********************************************/ /* 函数功能:24L01接收数据 */ /* 入口参数:rxbuf 接收数据数组 */ /* 返回值: 1 成功收到数据 */ /* 0 没有收到数据 */ /*********************************************/ u8 NRF24L01_RxPacket(u8 *pipe_num, u8 *rxbuf) { u8 fifo_state; u8 state; u8 i; unsigned char revale = 0; fifo_state = NRF24L01_Read_Reg(FIFO_STATUS); //读取状态寄存器的值 state = NRF24L01_Read_Reg(STATUS); //清除TX_DS或MAX_RT中断标志 //TX1_write2buff(state); if (!(fifo_state & _BV(RX_EMPTY))) //接收到数据 { NRF_CSN = 0; i = SPI_RW(RF24_NOP); // IRQ收发完成中断响应,16位CRC,主发送 *pipe_num = (i >> RX_P_NO) & 0x07; NRF_CSN = 1; NRF_CE = 0; //SPI使能 NRF24L01_Read_Buf(RD_RX_PLOAD, rxbuf, RX_PLOAD_WIDTH[*pipe_num]); // read receive payload from RX_FIFO buffer // NRF24L01_RW_Reg(FLUSH_RX,0xff);//清除RX FIFO寄存器 NRF24L01_RW_Reg(WRITE_REG + STATUS, state); //清除TX_DS或MAX_RT中断标志 NRF24L01_RW_Reg(FLUSH_RX, 0xFF); //清除TX_DS或MAX_RT中断标志 revale = RX_PLOAD_WIDTH[*pipe_num]; } NRF_CE = 1; return revale; //没收到任何数据 } /**********************************************/ /* 函数功能:设置24L01为发送模式 */ /* 入口参数:txbuf 发送数据数组 */ /* 返回值; 0x10 达到最大重发次数,发送失败*/ /* 0x20 成功发送完成 */ /* 0xff 发送失败 */ /**********************************************/ u8 NRF24L01_TxPacket(u8 *txbuf) { u8 state;
史海拾趣
|
求一篇关于这个题目的毕业论文 谢谢! 邮箱yixianfeng-1987@163.com [ 本帖最后由 yixianfeng 于 2009-5-17 17:59 编辑 ]… 查看全部问答> |
|
智能家居开始流行于上世纪七十年代的美国,并且在欧洲有很大的应用。近几年来智能家居产品像普通商品一样被摆在超市里销售。进入二十一世纪,在新加坡、韩国、日本及我国香港、澳门等地也开始应用。什么是智能家居? 一、概念解析 ...… 查看全部问答> |
|
大家好! 现在正在做一个通过无线网络进行文件传输方面的项目,想让内核空间的接收函数在后台一直运行,然后数据到来时用netlink通过用户态接收,然后写入文件。 主要问题:如何实现内核空间一个函数在后台一直运行,而又不影响用户态的操作。 ...… 查看全部问答> |
|
M AT L A B是一个可视化的计算程序,被广泛地使用于从个人计算机到超级计算机范围内的各种计算机上。 M AT L A B包括命令控制、可编程,有上百个预先定义好的命令和函数。这些函数能通过用户自定义函数进一步扩展。M AT L A B有许多强有力的命令。 ...… 查看全部问答> |
|
有哪位大虾帮我这个新手编一下面的程序,小弟感觉不尽。 要求:1用msp430g2553.h实现。 2实现如下功能,每十秒钟灯光闪烁一次,每2秒灯光亮度变化一次,按键按一次延时时间增加5秒灯光亮度变 ...… 查看全部问答> |




