ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:21.50KB ,
资源ID:4099984      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4099984.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(NRF24L01无线收发的ARM程序.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

NRF24L01无线收发的ARM程序.docx

1、NRF24L01无线收发的ARM程序#include systemInit.h#include buzzer.h#include uartGetPut.h#include #include typedef unsigned char uchar;typedef unsigned char uint;/*-定义KEY-#define KEY_PERIPH SYSCTL_PERIPH_GPIOG#define KEY_PORT GPIO_PORTG_BASE#define KEY_PIN GPIO_PIN_5void buzzer00() unsigned int x; buzzerInit();

2、 / 蜂鸣器初始化 for(x=6666;x6333;x-) buzzerSound(x); SysCtlDelay(1 * (TheSysClock / 6000); for(x=6333;x888;x-) buzzerSound(x); SysCtlDelay(1 * (TheSysClock / 6000); for(x=888;x1333;x+) buzzerSound(x); SysCtlDelay(1 * (TheSysClock / 3000); /GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_2, 0x00); buzzerQuiet(); */

3、-临时-*/-NRF24L01 端口定义-输出型-#define CE_PERIPH SYSCTL_PERIPH_GPIOA#define CE_PORT GPIO_PORTA_BASE#define CE_PIN GPIO_PIN_3 /sbit CE =P11; /PA3#define MOSI_PERIPH SYSCTL_PERIPH_GPIOA#define MOSI_PORT GPIO_PORTA_BASE#define MOSI_PIN GPIO_PIN_1 /sbit MOSI =P14; /PA1#define SCK_PERIPH SYSCTL_PERIPH_GPIOA#de

4、fine SCK_PORT GPIO_PORTA_BASE#define SCK_PIN GPIO_PIN_2 /sbit SCK =P13; /PA2#define CSN_PERIPH SYSCTL_PERIPH_GPIOA#define CSN_PORT GPIO_PORTA_BASE#define CSN_PIN GPIO_PIN_4 /sbit CSN =P12; /PA4/-nrf905状态标志-读入型-#define MISO_PERIPH SYSCTL_PERIPH_GPIOA /sbit MISO =P15; /PA0#define MISO_PORT GPIO_PORTA_

5、BASE#define MISO_PIN GPIO_PIN_0#define IRQ_PERIPH SYSCTL_PERIPH_GPIOG#define IRQ_PORT GPIO_PORTG_BASE#define IRQ_PIN GPIO_PIN_4 /sbit IRQ =P16; /PG4/*按键*sbit KEY1=P36;sbit KEY2=P37;*数码管位选*sbit led3=P20;sbit led2=P21;sbit led1=P22;sbit led0=P23;*蜂明器*sbit BELL=P34;*数码管0-9编码*uchar seg10=0xC0,0xCF,0xA4,

6、0xB0,0x99,0x92,0x82,0xF8,0x80,0x90; /09段码*NRF24L01*/#define TX_ADR_WIDTH 5 / 5 uints TX address width#define RX_ADR_WIDTH 5 / 5 uints RX address width#define TX_PLOAD_WIDTH 20 / 20 uints TX payload /打包长度#define RX_PLOAD_WIDTH 20 / 20 uints TX payloaduchar TX_ADDRESSTX_ADR_WIDTH= 0x34,0x43,0x10,0x10,

7、0x01; /本地地址uchar RX_ADDRESSRX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01; /接收地址/*NRF24L01寄存器指令*/SPI指令#define READ_REG 0x00 / 读寄存器指令 000AAAAA AAAAA指出读操作的寄存器地址#define WRITE_REG 0x20 / 写寄存器指令 001AAAAA AAAAA指出写操作的寄存器地址,只能在掉电或待机模式下操作#define RD_RX_PLOAD 0x61 / 读取接收数据指令 01100001 读RX有效数据,132字节。读操作全部从字节0开始,用于接收模式下#

8、define WR_TX_PLOAD 0xA0 / 写待发数据指令 10100000 写TX有效数据,132字节。写操作全部从字节0开始,用于发射模式下#define FLUSH_TX 0xE1 / 冲洗发送 FIFO指令 即清除TX FIFO寄存器,应用于发射模式下#define FLUSH_RX 0xE2 / 冲洗接收 FIFO指令 RX 接收#define REUSE_TX_PL 0xE3 / 定义重复装载数据指令#define NOP 0xFF / 保留 空操作,可用来读寄存器/*SPI(nRF24L01)寄存器地址*#define CONFIG 0x00 / 配置收发状态,CRC校验

9、模式以及收发状态响应方式#define EN_AA 0x01 / 自动应答功能设置#define EN_RXADDR 0x02 / 可用信道设置#define SETUP_AW 0x03 / 收发地址宽度设置#define SETUP_RETR 0x04 / 自动重发功能设置#define RF_CH 0x05 / 工作频率设置#define RF_SETUP 0x06 / 发射速率、功耗功能设置#define STATUS 0x07 / 状态寄存器#define OBSERVE_TX 0x08 / 发送监测功能#define CD 0x09 / 地址检测 #define RX_ADDR_P0

10、 0x0A / 频道0接收数据地址#define RX_ADDR_P1 0x0B / 频道1接收数据地址#define RX_ADDR_P2 0x0C / 频道2接收数据地址#define RX_ADDR_P3 0x0D / 频道3接收数据地址#define RX_ADDR_P4 0x0E / 频道4接收数据地址#define RX_ADDR_P5 0x0F / 频道5接收数据地址#define TX_ADDR 0x10 / 发送地址寄存器#define RX_PW_P0 0x11 / 接收频道0接收数据长度#define RX_PW_P1 0x12 / 接收频道1接收数据长度#define

11、RX_PW_P2 0x13 / 接收频道2接收数据长度#define RX_PW_P3 0x14 / 接收频道3接收数据长度#define RX_PW_P4 0x15 / 接收频道4接收数据长度#define RX_PW_P5 0x16 / 接收频道5接收数据长度#define FIFO_STATUS 0x17 / FIFO栈入栈出状态寄存器设置/*void Delay(unsigned int s);void inerDelay_us(unsigned char n);void init_NRF24L01(void);uint SPI_RW(unsigned int uar);uchar S

12、PI_Read(unsigned char reg);void SetRX_Mode(void);uint SPI_RW_Reg(unsigned char reg, unsigned char value);uint SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char uchars);uint SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char uchars);unsigned char nRF24L01_RxPacket(un

13、signed char* rx_buf);void nRF24L01_TxPacket(unsigned char * tx_buf);/*长延时*void Delay(unsigned int s) unsigned int i; for(i=0; is; i+); for(i=0; i0;n-) n+; n-; /_nop_();/*NRF24L01初始化*/void init_NRF24L01(void) SysCtlPeriEnable(CE_PERIPH); / 使能CE所在的GPIO端口 GPIOPinTypeOut(CE_PORT, CE_PIN); / 设置CE所在的管脚为输出

14、 SysCtlPeriEnable(MOSI_PERIPH); / 使能MOSI所在的GPIO端口 GPIOPinTypeOut(MOSI_PORT, MOSI_PIN); / 设置MOSI所在的管脚为输出 SysCtlPeriEnable(SCK_PERIPH); / 使能SCK所在的GPIO端口 GPIOPinTypeOut(SCK_PORT, SCK_PIN); / 设置SCK所在的管脚为输出 SysCtlPeriEnable(CSN_PERIPH); / 使能CSN所在的GPIO端口 GPIOPinTypeOut(CSN_PORT, CSN_PIN); / 设置CSN所在的管脚为输出

15、SysCtlPeriEnable(MISO_PERIPH); / 使能MISO所在的GPIO端口 GPIOPinTypeIn(MISO_PORT, MISO_PIN); / 设置MISO所在管脚为输入 SysCtlPeriEnable(IRQ_PERIPH); / 使能IRQ所在的GPIO端口 GPIOPinTypeIn(IRQ_PORT, IRQ_PIN); / 设置IRQ所在管脚为输入 inerDelay_us(200); GPIOPinWrite(CE_PORT, CE_PIN, CE_PIN); /CE=0; / chip enable 使能芯片 GPIOPinWrite(CSN_PO

16、RT, CSN_PIN, CSN_PIN);/CSN=1; / Spi disable 禁止Spi CSN为低时,Spi等待接收 GPIOPinWrite(SCK_PORT, SCK_PIN, SCK_PIN);/SCK=0; / SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); / 写本地地址 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); / 写接收端地址 SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); / 频

17、道0自动 ACK应答允许 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); / 允许接收地址只有频道0,如果需要多频道可以参考Page21 SPI_RW_Reg(WRITE_REG + RF_CH, 0); / 设置信道工作为2.4GHZ,收发必须一致 SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); /设置接收数据长度,本次设置为32字节 SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); /设置发射速率为1MHZ,发射功率为最大值0dB/*函数:uint SPI_RW(uint u

18、char)功能:NRF24L01的SPI写时序*/uint SPI_RW(unsigned int uar) unsigned int bit_ctr; for(bit_ctr=0;bit_ctr8;bit_ctr+) / output 8-bit 8位输出 if(uar & 0x80) /MOSI = (uchar & 0x80); / output uchar, MSB to MOSI GPIOPinWrite(MOSI_PORT, MOSI_PIN, MOSI_PIN); /MOSI=1; else GPIOPinWrite(MOSI_PORT, MOSI_PIN, MOSI_PIN);

19、 /MOSI=0; /下面先移位将MOSI左移到uar第二位,再将MISO放在uar第一位 uar = (uar 1); / shift next bit into MSB. GPIOPinWrite(SCK_PORT, SCK_PIN, SCK_PIN); /SCK = 1; / Set SCK high. if(GPIOPinRead(MISO_PORT, MISO_PIN) /uchar |= MISO; / capture current MISO bit 捕捉当前MISO uar |= 0x01; GPIOPinWrite(SCK_PORT, SCK_PIN, SCK_PIN); /

20、SCK = 0; / .then set SCK low again return(uar); / return read uchar/*函数:uchar SPI_Read(uchar reg)功能:NRF24L01的SPI读时序*/uchar SPI_Read(unsigned char reg) unsigned char reg_val; GPIOPinWrite(CSN_PORT, CSN_PIN, CSN_PIN);/CSN = 0; / CSN low, initialize SPI communication. SPI等待接收数据 SPI_RW(reg); / Select re

21、gister to read from. 选择寄存器 reg_val = SPI_RW(0); / .then read register value 读取寄存器数值 GPIOPinWrite(CSN_PORT, CSN_PIN, CSN_PIN);/CSN = 1; / CSN high, terminate SPI communication 终止SPI return(reg_val); / return register value 返回寄存器数值/*函数:uint SPI_RW_Reg(unsigned char reg, unsigned char value)功能:NRF24L01读写寄存器函数 reg: 命令 value: what?*/uint SPI_RW_Reg(unsigned char reg, unsigned char value) unsigned int status; GPIOPinWrite(CSN_PORT, CSN_PIN, CSN_PIN); /CSN = 0; / CSN low, init SPI transaction status = SPI_RW(reg); / select reg

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1