《nRF24L01无线通信模块使用手册12讲课教案.doc》由会员分享,可在线阅读,更多相关《nRF24L01无线通信模块使用手册12讲课教案.doc(61页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Good is good, but better carries it.精益求精,善益求善。nRF24L01无线通信模块使用手册12-nRF24L01无线通信模块使用手册一、模块简介该射频模块集成了NORDIC公司生产的无线射频芯片nRF24L01:1支持2.4GHz的全球开放ISM频段,最大发射功率为0dBm22Mbps,传输速率高3功耗低,等待模式时电流消耗仅22uA4多频点(125个),满足多点通信及跳频通信需求5在空旷场地,有效通信距离:25m(外置天线)、10m(PCB天线)6工作原理简介:发射数据时,首先将nRF24L01配置为发射模式,接着把地址TX_ADDR和数据TX_PLD按
2、照时序由SPI口写入nRF24L01缓存区,TX_PLD必须在CSN为低时连续写入,而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10s,延迟130s后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进入接收模式,接收应答信号。如果收到应答,则认为此次通信成功,TX_DS置高,同时TX_PLD从发送堆栈中清除;若未收到应答,则自动重新发射该数据(自动重发已开启),若重发次数(ARC_CNT)达到上限,MAX_RT置高,TX_PLD不会被清除;MAX_RT或TX_DS置高时,使IRQ变低,以便通知MCU。最后发射成功时,若CE为低,则nRF24L01进入待机模式
3、1;若发送堆栈中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高,则进入待机模式2。接收数据时,首先将nRF24L01配置为接收模式,接着延迟130s进入接收状态等待数据的到来。当接收方检测到有效的地址和CRC时,就将数据包存储在接收堆栈中,同时中断标志位RX_DR置高,IRQ变低,以便通知MCU去取数据。若此时自动应答开启,接收方则同时进入发射状态回传应答信号。最后接收成功时,若CE变低,则nRF24L01进入空闲模式1。二、模块电气特性参数数值单位供电电压5V最大发射功率0dBm最大数据传输率2Mbps电流消耗(发射模式,0dBm)11.3mA电流消耗(接收模式,2Mbps
4、)12.3mA电流消耗(掉电模式)900nA温度范围-40+85三、模块引脚说明管脚符号功能方向1GND电源地2IRQ中断输出O3MISOSPI输出O4MOSISPI输入I5SCKSPI时钟I6NC空7NC空8CSN芯片片选信号I9CE工作模式选择I10+5V电源四、模块与AT89S52单片机接口电路VCCP1.0P1.1CNCNP1.2P1.3P1.4P3.2GNDAT89S52MCU模块+5VCECSNCNCNSCKMOSIMISOIRQGNDNrf24L01通讯模块注:上图为示意连接,可根据自己实际需求进行更改;使用AT89S52MCU模块时,请将Nrf24L01通讯模块每个端口(MOS
5、I、SCK、CSN和CE)接4.7K的排阻上拉到VCC增强其驱动能力(如下图:)。若使用其它单片机与Nrf24L01通讯模块相连时请串联2K电阻。五、工作模式控制工作模式由CE和PWR_UP、PRIM_RX两寄存器共同控制:模式PWR_UPPRIM_RXCEFIFO寄存器状态接收模式111-发射模式1011数据存储在FIFO寄存器中,发射所有数据发射模式10012数据存储在FIFO寄存器中,发射一个数据待机模式II101TXFIFO为空待机模式I1-0无正在传输的数据掉电模式0-注1:进入此模式后,只要CSN置高,在FIFO中的数据就会立即发射出去,直到所有数据数据发射完毕,之后进入待机模式I
6、I。注2:正常的发射模式,CE端的高电平应至少保持10us。24L01将发射一个数据包,之后进入待机模式I。六、数据和控制接口通过以下六个引脚,可实现模块的所有功能:IRQ(低电平有效,中断输出)CE(高电平有效,发射或接收模式控制)CSN(SPI信号)SCK(SPI信号)MOSI(SPI信号)MISO(SPI信号)通过SPI接口,可激活在数据寄存器FIFO中的数据;或者通过SPI命令(1个字节长度)访问寄存器。在待机或掉电模式下,单片机通过SPI接口配置模块;在发射或接收模式下,单片机通过SPI接口接收或发射数据。1SPI指令所有的SPI指令均在当CSN由低到高开始跳变时执行;从MOSI写命
7、令的同时,MISO实时返回24L01的状态值;SPI指令由命令字节和数据字节两部分组成。SPI命令字节表指令名称指令格式(二进制)字节数操作说明R_REGISTER000AAAAA15读寄存器。AAAAA表示寄存器地址。W_REGISTER001AAAAA15写寄存器。AAAAA表示寄存器地址,只能在掉电或待机模式下操作。R_RX_PAYLOAD01100001132在接收模式下读132字节RX有效断气。从字节0开始,数据读完后,FIFO寄存器清空。W_TX_PAYLOAD10100000132在发射模式下写131字节TX有效数据。从字节0开始。FLUSH_TX111000010在发射模式下,
8、清空TXFIFO寄存器。FLUSH_RX111000100在接收模式下,清空RXFIFO寄存器。在传输应答信号时不应执行此操作,否则不能传输完整的应答信号。REUSE_TX_PL111000110应用于发射端。重新使用上一次发射的有效数据,当CE=1时,数据将不断重新发射。在发射数据包过程中,应禁止数据包重用功能。NOP111111110空操作。可用于读状态寄存器。2SPI时序SPI读写时序见下面两图。在写寄存器之前,一定要进入待机模式或掉电模式。其中,CnSPI指令位;Sn状态寄存器位;Dn数据位(低字节在前,高字节在后;每个字节中高位在前)SPI读时序SPI写时序七、寄存器内容及说明地址(
9、十六进制)寄存器位复位值类型说明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引脚为低EN_CRC31R/WCRC使能。如果EN_AA中任意一位为高,则EN_CRC为高。CRCO20R/WCRC校验值:0:1字节1:2字节PWR_UP
10、10R/W0:掉电1:上电PRIM_RX00R/W0:发射模式1:接收模式01EN_AAEnhancedShockBurst使能“自动应答”功能Reserved7:600R/W默认为00ENAA_P551R/W数据通道5自动应答使能位ENAA_P441R/W数据通道4自动应答使能位ENAA_P331R/W数据通道3自动应答使能位ENAA_P221R/W数据通道2自动应答使能位ENAA_P111R/W数据通道1自动应答使能位ENAA_P001R/W数据通道0自动应答使能位02EN_RXADDR接收地址允许Reserved7:600R/W默认为00ERX_P550R/W数据通道5接收数据使能位ER
11、X_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字节10:4字节11:5字节04SETUP_RETR自动重发ARD7:40000R/W自动重发延时时间:0000:250us0001:500us1111:4000usARC3:00011R/W自动重发计数:000
12、0:禁止自动重发0001:自动重发1次1111:自动重发15次05RF_CH射频通道Reserved70R/W默认为0RF_CH6:00000010R/W设置工作通道频率06RF_SETUP射频寄存器Reserved7:5000R/W默认为000PLL_LOCK40R/W锁相环使能,测试下使用RF_DR31R/W数据传输率:0:1Mbps1:2MbpsRF_PWR2:111R/W发射功率:00:-18dBm01:-12dBm10:-6dBm11:0dBmLNA_HCURR01R/W低噪声放大器增益07STATUS状态寄存器Reserved70R/W默认值为0RX_DR60R/W接收数据中断位。
13、当收到有效数据包后置1。写1清除中断TX_DS50R/W发送数据中断。如果工作在自动应答模式下,只有当接收到应答信号后置1。写1清除中断MAX_RT40R/W重发次数溢出中断。写1清除中断。如果MAX_RT中断产生,则必须清除后才能继续通讯RX_P_NO3:1111R接收数据通道号:000-101:数据通道号110:未使用111:RXFIFO寄存器为空TX_FULL00RTXFIFO寄存器满标志位08OBSERVE_TX发送检测寄存器PLOS_CNT7:40R数据包丢失计数器。当写RF_CH寄存器时,此寄存器复位。当丢失15个数据包后,此寄存器重启。ARC_CNT3:00R重发计数器。当发送新
14、数据包时,此寄存器复位。09CD载波检测Reserved7:1000000RCD00R0ARX_ADDR_P039:0E7E7E7E7E7R/W数据通道0接收地址。最大长度为5个字节。0BRX_ADDR_P139:0C2C2C2C2C2R/W数据通道1接收地址。最大长度为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接收地址。最低字节可设置,高
15、字节必须与RX_ADDR_P139:8相等0FRX_ADDR_P57:0C6R/W数据通道5接收地址。最低字节可设置,高字节必须与RX_ADDR_P139:8相等10TX_ADDR39:0E7E7E7E7E7R/W发送地址。在ShockBurstTM模式,设置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个字
16、节32:32个字节13RX_PW_P2Reserved7:600R/W默认为00RX_PW_P25:00R/W数据通道2接收数据有效宽度:0:无效1:1个字节32:32个字节14RX_PW_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接收数据有效
17、宽度:0:无效1:1个字节32:32个字节17FIFO_STATUSFIFO状态寄存器Reserved70R/W默认为0TX_REUSE60R若TX_REUSE=1,则当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_FULL10RRXFIFO寄存器满标志1:寄存器满0:寄存器未满,有可用空间RX_EM
18、PTY01RRXFIFO寄存器空标志1:寄存器空0:寄存器非空N/ATX_PLD255:0XWN/ARX_PLD255:0XR八、模块编程控制1ShockBurstTM发射模式设置PRIM_RX为低。通过SPI接口,将接收节点地址(TX_ADDR)和有效数据(TX_PLD)写入模块,写TX_PLD时,CSN必须一直置低。置CE为高,启动发射。CE高电平持续时间至少为10us。ShockBurstTM发射模式:系统上电启动内部16MHz时钟数据打包数据发射若启动了自动应答模式(ENAA_P0=1),则模块立即进入接收模式(NO_ACK已设置)。如果接收到应答信号,则表示发射成功,TX_DS置高且
19、TXFIFO中的有效数据被移出;如果没有接收到应答信号,则自动重发(自动重发已设置);如果自动重发次数超过最大值(ARC),MAX_RT置高,在TXFIFO中的数据不被移出。当MAX_RT和TX_DS置高时,IRQ激活。只有重新写状态寄存器(STATUS)才能关闭IRQ。如果重发次数达到最大后,仍没有接收到应答信号,在MAX_RT中断清除之前,不会再发射数据。PLOS_CNT计数器会增加,每当有一个MAX_RT中断产生。如果CE置低,则系统进行待机模式I,否则发送TXFIFO寄存器中的下一个数据包。当TXFIFO中的数据发射完,CE仍为高时,系统进入待机模式II。在待机模式II下,CE置低,则
20、进入待机模式I。2ShockBurstTM接收模式设置PRIM_RX为高,配置接收数据通道(EN_RXADDR)、自动应答寄存器(EN_AA)和有效数据宽度寄存器(RX_PW_PX)。置CE为高,启动接收模式。130us后,模块检测空中信号,接收到有效的数据包后(地址匹配、CRC检验正确),数据储存在RXFIFO中,RX_DR置高。如果启动了自动应答功能,则发送应答信号。MCU置CE为低,进入先机模式I。MCU可通过SPI接口将数据读出模块准备好进入发射模式或接收模式或待机模式。九、RF通道频率RF通道频率指的是nRF24L01所使用的中心频率,该频率范围从2.400GHz到2.525GHz,
21、以1MHz区分一个频点,故有125个频点可使用。由参数RF_CH确定,公式为:F0=2400+RF_CH(MHz)十、示例程序接收模块与发射模块大部分程序代码相同,如下:1SPI命令和寄存器配置头文件API.h(根据第六、七两点编写)#ifndef_BYTE_DEF_#define_BYTE_DEF_typedefunsignedcharBYTE;#endif/SPI命令#defineREAD_REG0x00/读第0个寄存器#defineWRITE_REG0x20/写第0个寄存器#defineRD_RX_PLOAD0x61/在接收模式下使用,读有效数据#defineWR_TX_PLOAD0xA
22、0/在发送模式下使用,写有效数据#defineFLUSH_TX0xE1/在发送模式下使用,清TXFIFO寄存器#defineFLUSH_RX0xE2/在接收模式下使用,清RXFIFO寄存器#defineREUSE_TX_PL0xE3/发送方使用,重复发送最后的数据#defineNOP0xFF/空操作,用于读状态寄存器STATUS的值/nRF24L01寄存器地址#defineCONFIG0x00/配置寄存器,8bit#defineEN_AA0x01/自动应答设置寄存器,8bit#defineEN_RXADDR0x02/接收地址设置寄存器,8bit#defineSETUP_AW0x03/地址宽度设
23、置寄存器,8bit#defineSETUP_RETR0x04/自动重复发送设置寄存器,8bit#defineRF_CH0x05/RF通道寄存器,8bit#defineRF_SETUP0x06/RF设置寄存器,8bit#defineSTATUS0x07/状态寄存器,8bit#defineOBSERVE_TX0x08/发送观测寄存器,8bit#defineCD0x09/载波检测寄存器,8bit,#defineRX_ADDR_P00x0A/接收地址数据通道0,40bit#defineRX_ADDR_P10x0B#defineRX_ADDR_P20x0C#defineRX_ADDR_P30x0D#de
24、fineRX_ADDR_P40x0E#defineRX_ADDR_P50x0F#defineTX_ADDR0x10/发送地址.发送方使用,40bit#defineRX_PW_P00x11/通道0接收的有效数据字节长度(1-32字节),8bit#defineRX_PW_P10x12#defineRX_PW_P20x13#defineRX_PW_P30x14#defineRX_PW_P40x15#defineRX_PW_P50x16#defineFIFO_STATUS0x17/FIFO状态寄存器,8bit2SPI操作头文件(与单片机的接口设置在此头文件中)#defineucharunsignedc
25、har#defineTX_ADR_WIDTH5/地址长度为5个字节#defineTX_PLOAD_WIDTH20/数据长度为20个字节ucharconstTX_ADDRESSTX_ADR_WIDTH=0xE7,0xE7,0xE7,0xE7,0xE7;charrx_bufTX_PLOAD_WIDTH;/接收缓冲区ucharflag;/标志位inttest12;#defineCEP0_0/芯片使能:ChipEnable#defineCSNP0_1/片选信号:ChipSelectNot#defineSCKP1_2/串行时钟信号:SerialClock#defineMOSIP0_3/主发从收:Mast
26、erInSlaveOut#defineMISOP0_4/主收从发:MasterOutSlaveIn#defineIRQP3_2/中断查询:InterruptRequestucharbdatasta;sbitRX_DR=sta6;sbitTX_DS=sta5;sbitMAX_RT=sta4;ucharSPI_RW(ucharbyte)/写一个字节到nRF24L01,并返回此时nRF24L01的状态及数据ucharbit_ctr;for(bit_ctr=0;bit_ctr8;bit_ctr+)/先写字节的高位,再写低位MOSI=(byte&0x80);/MOSI取byte最高位byte=(byte
27、1);/byte左移一位SCK=1;/SCK从高到低时开始写入byte|=MISO;/获取MISO位.从MOSI写命令的同时,MISO返回nRF24L01的状态及数据SCK=0;return(byte);ucharSPI_RW_Reg(BYTEreg,BYTEvalue)/将字节value写入寄存器regucharstatus;CSN=0;/CSN为0时,才能进行SPI读写status=SPI_RW(reg);/选择寄存器regSPI_RW(value);/写字节value到该寄存器CSN=1;/终止SPI读写return(status);BYTESPI_Read(BYTEreg)/读寄存器r
28、eg状态字BYTEreg_val;CSN=0;/CSN为0时,才能进行SPI读写SPI_RW(reg);/选择寄存器regreg_val=SPI_RW(0);/写0,什么操作也不进行,仅仅为了读寄存器状态CSN=1;/终止SPI读写return(reg_val);ucharSPI_Read_Buf(BYTEreg,BYTE*pBuf,BYTEbytes)/从寄存器reg读出数据,典型应用是读RX数据或RX/TXF地址ucharstatus,byte_ctr;CSN=0;/CSN为0时,才能进行SPI读写status=SPI_RW(reg);/选择寄存器reg并返回其状态字for(byte_ct
29、r=0;byte_ctrbytes;byte_ctr+)pBufbyte_ctr=SPI_RW(0);/从寄存器读数据CSN=1;/终止SPI读写return(status);/返回状态值ucharSPI_Write_Buf(BYTEreg,BYTE*pBuf,BYTEbytes)/将数据写入寄存器,如TX数据,RX/TX地址等.ucharstatus,byte_ctr;CSN=0;/CSN为0时,才能进行SPI读写status=SPI_RW(reg);/选择寄存器reg并返回其状态字for(byte_ctr=0;byte_ctrbytes;byte_ctr+)SPI_RW(*pBuf+);/
30、写数据到寄存器CSN=1;/终止SPI读写return(status);/返回状态值/接收模式初始化:设置RX地址,RX数据宽度,RF通道,速率,低噪声放大器增益/设置完之后,将CE置高,准备好接收数据voidRX_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到nRF24L01SPI_RW_Reg(WRITE_REG+SETUP_RETR,0x1a);/自动重发延时:500us+86us;重
31、发次数:10次SPI_Write_Buf(WRITE_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_PLO
32、AD_WIDTH,要与发送的一致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通道,速率等,与接收类似voidTX_Mode(void)SPI_RW_Reg(WRITE_REG+RX_PW_P0,TX_PLOAD_WIDTH);SPI_RW_Reg(WRITE_REG+CONFIG,0x0e);SPI_Wr
33、ite_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);SPI_RW_Reg(WRITE_REG+RF_CH,40);S
34、PI_RW_Reg(WRITE_REG+RF_SETUP,0x0f);voidshow_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);/0x0ftest6=SPI_Read(RX_ADDR_P2);test7=SPI_Read(RX_ADDR_P3
35、);test8=SPI_Read(RX_ADDR_P4);test9=SPI_Read(RX_ADDR_P5);test10=SPI_Read(RX_PW_P0);/0x14test11=SPI_Read(STATUS);voidinit_io(void)CE=0;/待机CSN=1;/SPI禁止读写SCK=0;voidInituart(void)/设置串口工作模式TMOD|=0x20;/定时器1工作在方式2,8位自动重装模式TL1=0xfd;/波特率为9600TH1=0xfd;SCON=0x50;/模式1,8位数据TR1=1;/启动定时器1TI=1;voidinit_int0(void)/外部
36、中断设置EA=1;/允许全局中断ES=1;/开串行口中断EX0=1;/允许外部中断0voiddelay_ms(unsignedintx)/毫秒级延时unsignedinti,j;i=0;for(i=0;ix;i+)j=108;while(j-);3发送模块主函数(向接收模块发射数据“abcdefg”,中断方式)voidmain(void)inti;init_io();/IO端口设置Inituart();/串口设置init_int0();/外部中断0设置for(i=0;i7;i+)/待发的数据tx_buf,发送的数据为”abcdefg”七个字母tx_bufi=a+i;while(1)CE=0;/
37、Standby-1模式TX_Mode();/发送设置CE=1;/启动发送模式delay_ms(20);CE=0;/Standby-1模式delay_ms(1000);/中断函数/如果RX_DR=1,则读取数据,之后清除标志位;/如果TX_DS或MAX_RT为1,则仅清除中断标志位voidISR_int0(void)interrupt0sta=SPI_Read(STATUS);/读状态寄存器STATUSif(RX_DR)/如接收到数据,则中断SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);/读取接收的数据flag=1;/标志位置高if(MAX_RT
38、)/重发中断达到最大数SPI_RW_Reg(FLUSH_TX,0);/清除TXFIFO寄存器SPI_RW_Reg(WRITE_REG+STATUS,sta);/清除RX_DR,TX_DS和MAX_RT中断标志位4接收模块主函数(接收并在串口输出,同时输出状态寄存器的值,使用查询方式)voidmain(void)inti;init_io();/IO端口设置Inituart();/串口设置init_int0();/外部中断0设置CE=0;/Standby-1模式RX_Mode();/设置接收模式CE=1;/准备接收数据while(1)sta=SPI_Read(STATUS);if(RX_DR)/接
39、收到数据SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);/读取接收的数据for(i=0;i7;i+)printf(%c,rx_bufi);/通过串口发送接收到的数据printf(n);show_status();/输出状态寄存器的值,可不用此操作for(i=0;i12;i+)printf(%x,testi);printf(n);delay_ms(10);if(MAX_RT)/重发中断达到最大数SPI_RW_Reg(FLUSH_TX,0);/清除TXFIFO寄存器SPI_RW_Reg(WRITE_REG+STATUS,sta);/清除RX_DR,TX_DS和MAX_RT中断标志位最近项目基本都做完了,闲着没事了,过来整理下博客,分享下自己的程序!这是几个月前调通的程序,24L01无线收发芯片,mcu用的是msp430f2274!该程序花费了我大量心血!算是我学起单片机来攻克的第一块芯片吧!注释相当详细!#include#defineuintunsignedint#defineucharunsignedchar/nRF24L01的数据宽度,地址宽度,以及数据定义#defineTX_ADR_WIDTH4#defineRX_PLOAD_W