nRF24L01无线通信模块使用手册12_第1页
nRF24L01无线通信模块使用手册12_第2页
nRF24L01无线通信模块使用手册12_第3页
nRF24L01无线通信模块使用手册12_第4页
nRF24L01无线通信模块使用手册12_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、深圳市德普施科技有限公司nRF24L01无线通信模块使用手册一、模块简介该射频模块集成了 NORDIC公司生产的无线射频芯片 nRF24L01 :1 .支持2.4GHz的全球开放ISM频段,最大发射功率为 0dBm2 . 2Mbps,传输速率高3 .功耗低,等待模式时电流消耗仅22uA4 .多频点(125个),满足多点通信及跳频通信需求5 .在空旷场地,有效通信距离:25m (外置天线)、10m (PCB天线)6 .工作原理简介:发射数据时,首先将nRF24L01配置为发射模式,接着把地址TX_ADDR和数据TX_PLD 按照时序由 SPI 口写入nRF24L01缓存区,TX_PLD 必须在

2、CSN为低时连续写入,而 TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少 10延迟130ds后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进入接收模式,接收应答信号。如果收到应答,则认为此次通信成功,TX_DS置高,同时TX_PLD从发送堆栈中清除; 若未收到应答,则自动重新发射该数据(自动重发已开启),若重发次数(ARC_CNT )达到上限,MAX_RT置高,TX_PLD不会被1#除;MAX_RT或TX_DS置高时,使IRQ变低, 以便通知MCU。最后发射成功时,若 CE为低,则nRF24L01进入待机模式1;若发送堆栈 中有数据且CE为高,则进入下一次发

3、射;若发送堆栈中无数据且CE为高,则进入待机模式2。接收数据时,首先将 nRF24L01配置为接收模式,接着延迟130ds进入接收状态等待数据的到来。当接收方检测到有效的地址和CRC时,就将数据包存储在接收堆栈中,同时中断标志位RX_DR置高,IRQ变低,以便通知 MCU去取数据。若此时自动应答开启,接 收方则同时进入发射状态回传应答信号。最后接收成功时,若 CE变低,则nRF24L01进入 空闲模式1。、模块电气特性参数数值单位供电电压5V最大发射功率0dBm最大数据传输率2Mbps电流消耗(发射模式,0dBm)11.3mA电流消耗(接收模式,2Mbps)12.3mA电流消耗(掉电模式)90

4、0nA温度范围-40+85C三、模块引脚说明管脚符号功能力向1GND电源地2IRQ中断输出O3MISOSPI输出O4MOSISPI输入I5SCKSPI时钟I6NC空1深圳市德普施科技有限公司7NC空8CSN芯片片选信号I9CE工作模式选择I10+5V电源四、模块与 AT89S52单片机接口电路注:上图为示意连接,可根据自己实际需求进行更改;使用 AT89S52MCU模块时,请将Nrf24L01通 讯模块每个端口( MOSI、 SCK、CSN和CE)接4.7K的排阻上拉到 VCC增强其驱动能力(如下图:)。若 使用其它单片机与 Nrf24L01通讯模块相连时请串联 2K电阻。深圳市德普施科技有限

5、公司五、工作模式控制工作模式由CE和PWR_UP、PRIM_RX两寄存器共同控制:模式PWR_UPPRIM_RXCEFIFO寄存器状态接收模式 1111-发射模式1011数据存储在FIFO寄存器中, 发射所有数据发射模式10g 12数据存储在FIFO寄存器中,发射一个数据待机模式II101TX FIFO为空待机*II式I1-0无正在传输的数据掉电模式0-注1:进入此模式后,只要 CSN置高,在FIFO中的数据就会立即发射出去,直到所有数据数据发射完毕,之后进入待机模式II。注2:正常的发射模式,CE端的高电平应至少保持 10us。24L01将发射一个数据包,之后进入待机模六、数据和控制接口通过

6、以下六个引脚,可实现模块的所有功能:IRQ (低电平有效,中断输出)CE (高电平有效,发射或接收模式控制)CSN (SPI信号)SCK (SPI信号)MOSI (SPI信号)MISO (SPI信号)通过SPI接口,可激活在数据寄存器 FIFO中的数据;或者通过 SPI命令(1个字节长 度)访问寄存器。在待机或掉电模式下, 单片机通过SPI接口配置模块;在发射或接收模式下,单片机通过SPI接口接收或发射数据。1. SPI指令所有的SPI指令均在当CSN由低到高开始跳变时执行;从MOSI写命令的同时,MISO实时返回24L01的状态值;SPI指令由命令字节和数据字节两部分组成。SPI命令字节表指

7、令名称指令格式 (二进制)字节数操作说明R_REGISTER000A AAAA15读奇存命。AAAAA 表小奇存命地址。W_REGISTER001A AAAA15与口存命。 AAAAA 表小口存命地址)只 能在掉电或待机模式下操作。R_RX_PAYLOAD0110 0001132在接收模式下读132字节RX有效断气。从字节0开始,数据读完后,FIFO寄存器 清空。W_TX_PAYLOA D1010 0000132在发射模式下写131字节IX有效数据。从字节0开始。FLUSH_TX1110 00010在发射模式下,清空 TX FIFO寄存器。3深圳市德普施科技有限公司FLUSH_RX1110 0

8、0100在接收模式下,清空 RX FIFO寄存器。在 传输应答信号时不应执行此操作,否则不 能传输完整的应答信号。REUSE_TX_PL1110 00110应用于发射端。重新使用上一次发射的有效数据,当CE=1时,数据将不断重新发 射。在发射数据包过程中,应禁止数据包 重用功能。NOP1111 11110空操作。可用于读状态寄存器。2. SPI时序SPI读写时序见下面两图。在写寄存器之前,一定要进入待机模式或掉电模式。其中,CnSPI指令位;Sn状态寄存器位;Dn 数据位(低字节在前,高字节在后;每个字节中高位在前)CSN鼠k jmjuuuuLrL_TLruimuuuLnrLrmjLruLn_

9、SPI读时序CSNSTS 1中sck_TLTLrLrLruiRrLjmmwwLrLrLrLrLrwLL飞isoSPI写时序七、寄存器内容及说明(H地址K进制)寄存器位复位值说明00CONFIG配置寄存器Reserved70R/W默认为0MASK_RX_DR60R/W可屏蔽中断RX_RD1:中断产生时对IRQ没影响0: RX_RD中断产生时,IRQ引脚为低MASK_TX_DS50R/W可屏蔽中断TX_RD1:中断产生时对IRQ没影响0: TX_RD中断产生时,IRQ引脚为低MASK_MAX_RT40R/W可屏蔽中断MAX_RT1:中断产生时对IRQ没影响0: MAX_RT中断产生时,IRQ引脚为

10、低4深圳市德普施科技有限公司EN_CRC31R/WCRC使能。如果EN_AA中任 位为高,则 EN_CRC为 (Wj oCRCO20R/WCRC校验值:0: 1字节1: 2字节PWR_UP10R/W0:掉电1:上电PRIM_RX00R/W0:发射模式1:接收模式01EN_AA Enhanced ShockBurst?使能“自动应答”功能Reserved7:600R/W默认为00ENAA_P551R/W数据通道5自动应答使能位ENAA_P441R/W数据通道4自动应答使能位ENAA_P331R/W数据通道3自动应答使能位ENAA_P221R/W数据通道2自动应答使能位ENAA_P111R/W数据

11、通道1自动应答使能位ENAA_P001R/W数据通道0自动应答使能位02EN_RXADDR接收地址允许Reserved7:600R/W默认为00ERX _P550R/W数据通道5接收数据使能位ERX _P440R/W数据通道4接收数据使能位ERX _P330R/W数据通道3接收数据使能位ERX _P220R/W数据通道2接收数据使能位ERX _P111R/W数据通道1接收数据使能位ERX _P001R/W数据通道0接收数据使能位03SETUP_AW设置地址宽度(所有数据通 道)Reserved7:2000000R/W默认为00000AW1:011R/W接收/发射地址宽度:00:无效01: 3字

12、节10: 4字节11: 5字节04SETUP_RETR自动重发ARD7:40000R/W自动重发延时时间:0000: 250us0001: 500us1111: 4000usARC3:00011R/W自动重发“数:0000:禁止自动重发0001 :自动重发1次5深圳市德普施科技有限公司1111:自动重发15次05RF_CH射频通道Reserved70R/W默认为0RF_CH6:00000010R/W设置工作通道频率06RF_SETUP射频寄存器Reserved7:5000R/W默认为000PLL_LOCK40R/W锁相环使能,测试下使用RF_DR31R/W数据传输率:0: 1Mbps1: 2M

13、bpsRF_PWR2:111R/W发射功率:00: -18dBm01 : -12dBm10: -6dBm11 : 0dBmLNA_HCURR01R/W低噪声放大器增益07STATUS状态寄存器Reserved70R/W默认值为0RX_DR60R/W接收数据中断位。当收到有效 数据包后置1。写1'清除中断TX_DS50R/W发送数据中断。如果工作在自 动应答模式下,只后当接收到 应答信号后置1。写1'清除中断MAX_RT40R/W重发次数溢出中断。写1'清除中断。如果MAX_RT中断产生,则必须清除后才能继续通讯RX_P_NO3:1111R接收数据通道号:000-101

14、:数据通道号110:未使用111: RX FIFO寄存器为空TX_FULL00RTX FIFO寄存器满标志位08OBSERVE_TX发送检测寄存器PLOS_CNT7:40R数据包丢失计数器。当写RF_CH寄存器时,此寄存器 复位。当丢失15个数据包后, 此寄存器重启。ARC_CNT3:00R重发计数器。当发送新数据包 时,此寄存器复位。09CD载波检测Reserved7:1000000R6深圳市德普施科技有限公司CD00R0ARX_ADDR_P039:0E7E7E7E7E7R/W数据通道0接收地址。最大长 度为5个字节。0BRX_ADDR_P139:0C2C2C2C2C2R/W数据通道1接收地

15、址。最大长 度为5个字节。0CRX_ADDR_P27:0C3R/W数据通道2接收地址。最低字 节可设置,高字节必须与 RX_ADDR_P139:8相等0DRX_ADDR_P37:0C4R/W数据通道3接收地址。最低字 节可设置,高字节必须与 RX_ADDR_P139:8相等0ERX_ADDR_P47:0C5R/W数据通道4接收地址。最低字 节可设置,高字节必须与 RX_ADDR_P139:8相等0FRX_ADDR_P57:0C6R/W数据通道5接收地址。最低字 节可设置,高字节必须与 RX_ADDR_P139:8相等10TX_ADDR39:0E7E7E7E7E7R/W发送地址。在 ShockB

16、urstTM 模式,设置 RX_ADDR_P0 与 此地址相等来接收应答信号11RX_PW_P0Reserved7:600R/W默认为00RX_PW_P05:00R/W数据通道0接收数据有效宽 度:0:无效1: 1个字节32: 32个字节12RX_PW_P1Reserved7:600R/W默认为00RX_PW_P15:00R/W数据通道1接收数据有效宽 度:0:无效1: 1个字节32: 32个字节13RX PW P2Reserved7:600R/W默认为00RX_PW_P25:00R/W数据通道2接收数据有效宽度:0:无效1: 1个字节32: 32个字节7深圳市德普施科技有限公司14RX_PW

17、_P3Reserved7:600R/W默认为00RX_PW_P35:00R/W数据通道3接收数据有效宽度:0:无效1: 1个字节32: 32个字节15RX_PW_P4Reserved7:600R/W默认为00RX_PW_P45:00R/W数据通道4接收数据有效宽 度:0:无效1: 1个字节32: 32个字节16RX_PW_P5Reserved7:600R/W默认为00RX_PW_P55:00R/W数据通道5接收数据有效宽 度:0:无效1: 1个字节32: 32个字节17FIFO_STATUSFIFO状态寄存器Reserved70R/W默认为0TX_REUSE60R若 TX_REUSE=1,则当

18、 CE 置 高时,不断发送上一数据包。TX_REUSE 通过SPI指令 REUSE_TX_PL 设置;通过 W_TX_PALOAD或FLUSH_TX 复位TX_FULL50RTX_FIFO 寄存器满标志1:寄存器满0:寄存器未满,有口用空间TX_EMPTY41RTX_FIFO寄存器空标志1:寄存器空0:寄存器非空Reserved3:200R/W默认为00RX_FULL10RRX FIFO寄存器满标志1:寄存器满0:寄存器未满,有口用空间深圳市德普施科技有限公司RX_EMPTY01RRX FIFO寄存器空标志1:寄存器空0:寄存器非空N/ATX_PLD255:0XWN/ARX_PLD255:0X

19、R八、模块编程控制1. ShockBurst 发射模式深圳市德普施科技有限公司设置通过写 TX PLDPRIM_RX 为低。SPI接口,将接收节点地址(TX_ADDR )和有效数据(TX_PLD )写入模块, 时,CSN必须一直置低。10us。置CE为高,启动发射。CE高电平持续时间至少为ShockBurstTM发射模式:10深圳市德普施科技有限公司系统上电启动内部16MHz时钟 数据打包数据发射若启动了自动应答模式(ENAA_P0=1 ),则模块立即进入接收模式( NO_ACK已设 置)。如果接收到应答信号,则表示发射成功,TX_DS置高且TX FIFO中的有效数据被移出;如果没有接收到应答

20、信号,则自动重发(自动重发已设置);如果自动重发次数超过最大值(ARC), MAX_RT 置高,在 TX FIFO中的数据不被移出。当 MAX_RT和TX_DS置 高时,IRQ激活。只有重新写状态寄存器( STATUS)才能关闭IRQ。如果重发次数达到最 大后,仍没有接收到应答信号,在 MAX_RT中断清除之前,不会再发射数据。PLOS_CNT计数器会增加,每当有一个MAX_RT中断产生。如果CE置低,则系统进行待机模式I,否则发送TX FIFO寄存器中的下一个数据包。 当TX FIFO中的数据发射完,CE仍为高时,系统进入待机模式II。在待机模式II下,CE置低,则进入待机模式 I。2. S

21、hockBurst 接收模式设置PRIM_RX为高,配置接收数据通道(EN_RXADDR )、自动应答寄存器(EN_AA ) 和有效数据宽度寄存器(RX_PW_PX )。置CE为高,启动接收模式。130us后,模块检测空中信号,接收到有效的数据包后 (地址匹配、CRC检验正确),数据储存在RX FIFO中,RX_DR置高。如果启动了自动应答功能,则发送应答信号。MCU置CE为低,进入先机模式I。MCU可通过SPI接口将数据读出模块准备好进入发射模式或接收模式或待机模式。11深圳市德普施科技有限公司its-t因厂3号 无乂12深圳市德普施科技有限公司九、RF通道频率2.400GHz 到RF通道频

22、率指的是nRF24L01所使用的中心频率,该频率范围从2.525GHz,以1MHz区分一个频点,故有 125个频点可使用。由参数 RF_CH 确定,公式为: Fo = 2400 + RF_CH (MHz)十、示例程序接收模块与发射模块大部分程序代码相同,如下:1. SPI命令和寄存器配置头文件 API.h (根据第六、七两点编写)#ifndef _BYTE_DEF_#define _BYTE_DEF_typedef unsigned char BYTE;#endif/ SPI命令#define READ_REG0x00/读第0个寄存器#define WRITE_REG0x20/写第0个寄存器#

23、define RD_RX_PLOAD0x61/在接收模式下使用,读有效数据#define WR_TX_PLOAD0xA0/在发送模式下使用,写有效数据#define FLUSH_TX0xE1在发送模式下使用,清TX FIFO寄存器#define FLUSH_RX0xE2在接收模式下使用,清RX FIFO寄存器#define REUSE_TX_PL0xE3发送方使用,重复发送最后的数据#define NOP0xFF空操作用于读状态寄存器 STATUS的值/ nRF24L01寄存器地址#define CONFIG0x00/配置寄存器,8bit#define EN_AA0x01自动应答设置寄存器,8

24、bit#define EN_RXADDR0x02接收地址设置寄存器,8bit#define SETUP_AW0x03地址宽度设置寄存器,8bit#define SETUP_RETR0x04/自动重复发送设置寄存器,8bit#define RF_CH0x05/RF通道寄存器,8bit#define RF_SETUP0x06/RF设置寄存器,8bit#define STATUS0x07/状态寄存器,8bit#define OBSERVE_TX0x08发送观测寄存器,8bit#define CD0x09载波检测寄存器,8bit,#define RX_ADDR_P00x0A接收地址数据通道0,40bi

25、t#define RX_ADDR_P10x0B#define RX_ADDR_P20x0C#define RX_ADDR_P30x0D#define RX_ADDR_P40x0E#define RX_ADDR_P50x0F#define TX_ADDR0x10发送地址.发送方使用,40bit#define RX_PW_P00x11/通道0接收的有效数据字节长度(1-32字节),8bit#define RX_PW_P10x12#define RX_PW_P20x1313深圳市德普施科技有限公司#define RX_PW_P30x14#define RX_PW_P40x15#define RX_P

26、W_P50x16#define FIFO_STATUS0x17/FIFO状态寄存器,8bit2. SPI操作头文件(与单片机的接口设置在此头文件中)#define uchar unsigned char#define TX_ADR_WIDTH#define TX PLOAD WIDTH5地址长度为5个字节20 /数据长度为20个字节uchar const TX_ADDRESSTX_ADR_WIDTH = 0xE7,0xE7,0xE7,0xE7,0xE7;char rx_bufTX_PLOAD_WIDTH; 接收缓冲区ucharflag;int test12;#defineCEP0_0#defi

27、neCSNP0_1#defineSCKP1_2#defineMOSIP0_3标志位芯片使能:Chip Enable片选信号:Chip Select Not/串行时钟信号:Serial Clock主发从收:Maste门n Slave Out#defineMISOP0_4#defineIRQP3_2主收从发:Master Out Slave In中断查询:Interrupt Requestucharbdata sta;sbitRX_DR= staA6;sbitTX_DS= staA5;sbitMAX_RT= staA4;uchar SPI_RW(uchar byte)/写一个字节到 nRF24L0

28、1,并返回止匕时nRF24L01的状态及数据 uchar bit_ctr;for(bit_ctr=0;bit_ctr<8;bit_ctr+)t先写字节的高位,再写低位MOSI = (byte & 0x80);byte = (byte << 1);SCK = 1;byte |= MISO;/MOSI取byte最高位/byte左移一位/SCK从高到低时开始写入/获取MISO位从MOSI写命令的同时,MISO返回nRF24L01的状态及数据SCK = 0;return(byte);uchar SPI_RW_Reg(BYTE reg, BYTE value)/ 将字节 val

29、ue 写入寄存器 reguchar status;CSN = 0;status = SPI_RW(reg);/CSN为0时,才能进行SPI读写/选择寄存器regSPI_RW(value);写字节value到该寄存器14深圳市德普施科技有限公司CSN = 1;return(status);)/终止SPI读写BYTE SPI_Read(BYTE reg)/ 读寄存器 reg 状态字(BYTE reg_val;CSN = 0;SPI_RW(reg);reg_val = SPI_RW(0);CSN = 1;return(reg_val);/CSN为0时,才能进行SPI读写/选择寄存器reg写0,什么操

30、作也不进行,仅仅为了读寄存器状态/终止SPI读写) uchar SPI_Read_Buf(BYTE reg, BYTE *pBuf, BYTE bytes)从寄存器reg读出数据,典型应用是读RX数据或RX/TXF地址(uchar status,byte_ctr;CSN = 0;/CSN为0时,才能进行SPI读写status = SPI_RW(reg);/选择寄存器reg并返回其状态字for(byte_ctr=0;byte_ctr<bytes;byte_ctr+)pBufbyte_ctr = SPI_RW(0);/从寄存器读数据CSN = 1;/终止SPI读写return(status)

31、;/ 返回状态值)uchar SPI_Write_Buf(BYTE reg, BYTE *pBuf, BYTE bytes)/将数据写入寄存器,如 TX 数据,RX/TX 地址等.(uchar status,byte_ctr;CSN = 0;/CSN为0时,才能进行SPI读写status = SPI_RW(reg);/选择寄存器reg并返回其状态字for(byte_ctr=0; byte_ctr<bytes; byte_ctr+)SPI_RW(*pBuf+);写数据到寄存器CSN = 1;/终止SPI读写return(status);/ 返回状态值) 接收模式初始化:设置RX地址,RX数

32、据宽度,RF通道,速率,低噪声放大器增益 /设置完之后,将CE置高,准备好接收数据 void RX_Mode(void) (SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);/ 写 TX_Address 至U nRF24L01SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); / 自动重发延时:500us + 86us;重发次数:10 次15深圳市德普施科技有限公司SPI_Write_Buf(W

33、RITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);将地址TX_ADDRESS写入寄存器0的数据通道0SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);/ENAA_P0=1,数据通道 0 自动应答SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);/ERX_P0=1,使能SPI_RW_Reg(WRITE_REG + RF_CH, 40);/40 个通信频段SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);/数据通道0的RX数据长度为TX_PLOAD_W

34、IDTH,要与发送的一致SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0F);速率为2Mbps,发送功率为0dBm,低噪声放大器增益为1SPI_RW_Reg(WRITE_REG + CONFIG , 0x0f);/PRIM_RX=1,接收方;PWR_UP=1;CRC检验字为2字节; 发送模式初始化:设置发送地址,设置发送的数据,设置接收方地址,RF通道,速率等,与接收类似void TX_Mode(void) SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);SPI_RW_Reg(WRITE_REG + CONFIG , 0

35、x0e);SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a);SP

36、I_RW_Reg(WRITE_REG + RF_CH, 40);SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0f);void show_status(void)显示状态寄存器的值test0 = SPI_Read(EN_AA);/0x01test1 = SPI_Read(EN_RXADDR);/0x01test2 = SPI_Read(SETUP_AW);/0x03,5个字节test3 = SPI_Read(SETUP_RETR);/0x1atest4 = SPI_Read(RF_CH);/0x28test5 = SPI_Read(RF_SETUP);/0x0ftest

37、6 = SPI_Read(RX_ADDR_P2);test7 = SPI_Read(RX_ADDR_P3);test8 = SPI_Read(RX_ADDR_P4);test9 = SPI_Read(RX_ADDR_P5);test10 = SPI_Read(RX_PW_P0);/0x14test11 = SPI_Read(STATUS);16深圳市德普施科技有限公司void init_io(void)(CE = 0;CSN = 1;SCK = 0;)void Inituart(void)/设置串口工作模式 (TMOD |= 0x20;TL1 = 0xfd;TH1 = 0xfd;SCON =

38、0x50;TR1 = 1;TI=1;)void init_int0(void)/ 外部中断设置(EA=1;ES=1;EX0=1;)void delay_ms(unsigned int x)(unsigned int i,j;/待机/SPI禁止读写/定时器1工作在方式2,8位自动重装模式波特率为9600/模式1 , 8位数据启动定时器1允许全局中断开串行口中断允许外部中断0毫秒级延时i=0;for(i=0;i<x;i+) (j=108;while(j-);)3. 发送模块主函数(向接收模块发射数据“ abcdefg",中断方式)void main(void)(int i;init

39、_io();/IO 端口设置Inituart();串 口设置init_int0();/外部中断0设置for(i=0;i<7;i+)待发的数据tx_buf,发送的数据为"abcdefg"七个字母tx_bufi = 'a'+i;17深圳市德普施科技有限公司while(1) (CE =0;/Standby-1模式TX_Mode();发送设置CE =1;启动发送模式delay_ms(20); CE =0;/Standby-1模式delay_ms(1000); 中断函数 /如果RX_DR=1,则读取数据,之后清除标志位; /如果TX_DS或MAX_RT为1,则仅

40、清除中断标志位 void ISR_int0(void) interrupt 0 ( sta=SPI_Read(STATUS);读状态寄存器 STATUSif(RX_DR)如接收到数据,则中断(SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);读取接收的数据flag=1;标志位置高 if(MAX_RT)/重发中断达到最大数SPI_RW_Reg(FLUSH_TX,0);清除 TX FIFO 寄存器SPI_RW_Reg(WRITE_REG+STATUS,sta); 清除 RX_DR,TX_DS 和 MAX_RT 中断标志位 4.接收模块主函数(接收并在串

41、口输出,同时输出状态寄存器的值,使用查询方式)void main(void) ( int i; init_io();/IO 端口设置Inituart();串 口设置init_int0();/外部中断0设置CE=0;/Standby-1 模式RX_Mode();设置接收模式CE = 1;准备接收数据while(1) ( sta=SPI_Read(STATUS); if(RX_DR) 接收到数据 ( SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);读取接收的数据18深圳市德普施科技有限公司for(i=0;i<7;i+)printf("

42、%c ",rx_bufi);/通过串口发送接收到的数据printf("n");show_status();/B出状态寄存器的值,可不用此操作for(i=0;i<12;i+)printf("%x ",testi);printf("n");delay_ms(10);重发中断达到最大数清除TX FIFO寄存器清除RX_DR,TX_DS 和MAX_RT 中断标志位if(MAX_RT)SPI_RW_Reg(FLUSH_TX,0);SPI_RW_Reg(WRITE_REG+STATUS,sta);19深圳市德普施科技有限公司最近项

43、目基本都做完了,闲着没事了,过来整理下博客,分享下自己的程序!这是几个月前调通的程序,4L01无线收发芯片,mcu用的是msp430f2274 !该程序花费了我大量心血!算是我学起单片机来攻克的第 一块芯片吧!注释相当详细!#include<msp430x22x4.h>#define uint unsigned int#define uchar unsigned char/nRF24L01的数据宽度,地址宽度,以及数据定义 #define TX_ADR_WIDTH 4#define RX_PLOAD_WIDTH4#define TX_PLOAD_WIDTH4uchar TX_ADD

44、RESS=0xe7,0xe7,0xe7,0xe7;uchar data4="zhou"uchar rx_buf4;引脚定义2274#define CSN_HIGH P3OUT|=BIT1P3.1 控制 SPI 使能#define CSN_LOW P3OUT&=BIT1#define CE_HIGH P3OUT|=BIT2/P3.2 控制芯片发射使能#define CE_LOW P3OUT&=BIT2 #define IRQ P3IN&BIT3/ 读取 P3.3 的值 */* 模才S SPI 方式 */ #define MOSI_HIGH P3OUT|

45、=BIT4#define MOSI_LOW P3OUT&=BIT4#define MISO P3IN&BIT5#define SCK_HIGH P3OUT|=BIT0#define SCK_LOW P3OUT&=BIT0/24L01寄存器地址#defineCONFIG 0X00配置寄存器地址#defineEN_AA 0X01/自动应答寄存器地址#defineEN_RXADDR 0X02/接收地址使能#defineSETUP_AW 0X03/设置地址宽度#defineSETUP_RETR 0X04/建立自动重发#defineRF_CH 0X05射频通道#defineRF_

46、SETUP 0X06/射频寄存器#defineSTATUS 0X07/状态寄存器#defineOBSERVE_TX 0X08/发送检测寄存器#defineCD 0X09载波检测#defineRX_ADDR_P0 0X0A/数据通道0接收地址#defineRX_ADDR_P1 0X0B#defineRX_ADDR_P2 0X0C#defineRX_ADDR_P3 0X0D#defineRX_ADDR_P4 0X0E#defineRX_ADDR_P5 0X0F#defineTX_ADDR 0X10/发送地址寄存器地址20深圳市德普施科技有限公司#defineRX_PW_P00X11/接收地址通道0

47、有效数据宽度#defineRX_PW_P10X12#defineRX_PW_P20X13#defineRX_PW_P30X14#defineRX_PW_P40X15#defineRXPWP50X16# define FIFO_STATUS 0X17/FIFO 状态寄存器 /SPI命令字# define READ_REG 0X00/ 读寄存器命令# define WRITE_REG 0X20/ 写寄存器命令# define RD_RX_PLOAD 0X61/ 读有效数据命令# define WR_TX_PLOAD 0XA0/ 写有效数据命令# define FLUSH_TX 0XE1/ 清除 T

48、X_FIFO 应用于发射模式# define FLUSH_RX 0XE2/ 清除 RX_FIFO 应用于接收模式# define REUSE_TX_PL 0XE3/重新使用上一包有效数据# define NOP 0XFF/ 空操作指令延时子函数us void delay_us(uint i) while(i-)_NOP();/*/SPI初始化程序2274void SPI_INIT() UCA0CTL0 |=UCMSB + UCMST + UCSYNC;/ 3-pin, 8-bit SPI masterUCA0CTL1 |= UCSSEL_1; / ACLKUCA0BR0 |= 0x03;/ 波

49、特率 9600UCA0BR1 = 0;UCA0MCTL = 0X91;UCA0CTL1 &=UCSWRST;P3SEL|=BIT0+BIT4+BIT5; 正宗SPI写一字节数据到24L01,同时返回一个自己的数据 2274uchar SPI_RW(uchar byte) while (!(IFG2 & UCA0TXIFG);UCA0TXBUF=byte;delay_us(200);return UCA0RXBUF; */模才S SPI方式 uchar SPI_RW(uchar byte) 21深圳市德普施科技有限公司uchar bit_ctr;uchar a,b;for(bit

50、_ctr=0;bit_ctr<8;bit_ctr+)( a=(byte&0x80); if(a!=0)MOSI_HIGH; elseMOSI_LOW;byte=(byte<<1);SCK_HIGH;b="P3IN"&BIT5;if(b!=0) byte+=1;else; SCK_LOW; return byte;向寄存器写一字节的数据,同时返回状态字uchar SPI_RW_Reg(uchar reg,uchar value)(uchar status;CSN_LOW;status="SPI"_RW(reg);SPI_RW(value);CSN_HIGH;return(status);向寄存器读出一字节的数据uchar SPI_Read(uchar reg)(uchar byte;CSN_LOW;SPI_RW(reg);byte="SPI"_RW(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论