CC1101 433无线模块,STM8串口透传

来源:互联网 发布:mysql导入数据库 编辑:程序博客网 时间:2024/05/16 05:30

前一段时间画了一个CC1101收发小板子,但是一直没有成功,最后发现把27nH的电感焊接成了27uH,最终导致失败.

现在更换之后可以覆盖我们公司所有的角落,已经够用了.


原理图:http://download.csdn.net/detail/cp1300/7496509


下面是STM8程序

CC1101.C

/************************************************************************************************************* * 文件名:CC1101.c * 功能:STM8 CC1101驱动函数 * 作者:cp1300@139.com* 创建时间:2013-12-06 14:35 * 最后修改时间:2013-12-06 * 详细:433MHZ收发芯片驱动*************************************************************************************************************/#include "system.h"#include "delay.h"#include "CC1101.h"//CC1101命令掩码#define WRITE_BURST     0x40//连续写入#define READ_SINGLE     0x80//读#define WRITE_SINGLE     0x00//写#define READ_BURST          0xC0//连续读#define BURST_READ_FIFO0xff//突发读取RX FIFO#define BYTE_READ_FIFO0xBF//单字节读取 RX FIFO#define BURST_WRITE_FIFO0x7f//突发写TX FIFO#define BYTE_WRITE_FIFO0x3f//单字节写 TX FIFO#define CC1101_DATA_LEN64//SPI接口//底层接口宏定义#define CC1101_CS_H()   (GPIOA->ODR|=BIT3)      //PA3=1#define CC1101_CS_L()   (GPIOA->ODR&=~BIT3)     //PA3=0#define CC1101_MOSI_H()(GPIOC->ODR|=BIT6)//PC6#define CC1101_MOSI_L()(GPIOC->ODR&=~BIT6)//PC6#define CC1101_SCLK_H()(GPIOC->ODR|=BIT5)//PC5#define CC1101_SCLK_L()(GPIOC->ODR&=~BIT5)//PC5#define CC1101_GetMISO()(GPIOC->IDR&BIT7)//PC7//CC1101 SPI读写一字节//不带片选u8 CC1101_ReadWriteByte(u8 data){u8 i;u8 temp = 0;for(i = 0;i < 8;i ++){if(data & 0x80){CC1101_MOSI_H();}else{CC1101_MOSI_L();}data <<= 1;nop;CC1101_SCLK_H();            //时钟上升沿写入数据temp <<= 1;nop;if(CC1101_GetMISO()) temp ++;CC1101_SCLK_L();            //时钟下降沿读取数据}return temp;}/************************************************************************************************************************** 函数:u8 CC1101_Command(CC1101_CMD_TYPE Cmd)* 功能:发送单字节命令* 参数:Cmd;命令,见CC1101_CMD_TYPE* 返回:寄存器的值* 依赖:底层宏定义* 作者:cp1300@139.com* 时间:2013-12-06* 最后修改时间 : 2013-12-06* 说明: 以写的方式单直接访问将触发响应的命令*************************************************************************************************************************/u8 CC1101_Command(CC1101_CMD_TYPE Cmd){u8 status;CC1101_CS_L();                            //片选有效    while(CC1101_GetMISO());status = CC1101_ReadWriteByte((u8)Cmd);    //发送命令    while(CC1101_GetMISO());CC1101_CS_H();                            //片选关闭return status;}/************************************************************************************************************************** 函数:u8 CC1101_ReadReg(CC1101_REG_TYPE RegAddr)* 功能:读取CC1101通用寄存器* 参数:RegAddr:寄存器地址,见:CC1101_REG_TYPE* 返回:寄存器的值* 依赖:底层宏定义* 作者:cp1300@139.com* 时间:2013-12-06* 最后修改时间 : 2013-12-06* 说明: 一次读取一个寄存器*************************************************************************************************************************/u8 CC1101_ReadReg(CC1101_REG_TYPE RegAddr){u8 data;CC1101_CS_L();                                //片选有效CC1101_ReadWriteByte((u8)READ_SINGLE|RegAddr);//发送读命令以及寄存器索引data = CC1101_ReadWriteByte(0xff);//读取CC1101_CS_H();                                //片选关闭return data;}/************************************************************************************************************************** 函数:u8 CC1101_WriteReg(CC1101_REG_TYPE RegAddr, u8 data)* 功能:写入CC1101通用寄存器* 参数:RegAddr:寄存器地址,见:CC1101_REG_TYPE,data:需要写入的数据* 返回:状态寄存器的值* 依赖:底层宏定义* 作者:cp1300@139.com* 时间:2013-12-06* 最后修改时间 : 2013-12-06* 说明: 一次写入一个寄存器,并返回状态不要对只读的寄存器进行写操作*************************************************************************************************************************/u8 CC1101_WriteReg(CC1101_REG_TYPE RegAddr, u8 data){u8 status;if(RegAddr > 0x80) return 0;                        //防止误操作,0x30以后的寄存器为只读状态寄存器CC1101_CS_L();                                            //片选有效    while(CC1101_GetMISO());status = CC1101_ReadWriteByte((u8)WRITE_SINGLE|RegAddr);//发送写命令以及寄存器索引CC1101_ReadWriteByte(data);                        //写入数据CC1101_CS_H();                                            //片选关闭return status;}#include "LED.h"void CC1101_Init(u8 Addr){//初始化片选    GPIOx_Init(GPIOA, BIT3, OUT_PP_10M);    CC1101_CS_H();//初始化SCLKGPIOx_Init(GPIOC, BIT5, OUT_PP_10M);    CC1101_SCLK_H();//初始化MOSIGPIOx_Init(GPIOC, BIT6, OUT_PP_10M);    CC1101_MOSI_H();//初始化MISOGPIOx_Init(GPIOC, BIT7, IN_UP);CC1101_SCLK_L();CC1101_MOSI_L();    //初始化GDO0,GDO2对应PC3,PC4    GPIOx_Init(GPIOC, BIT3, IN_UP);    GPIOx_Init(GPIOC, BIT4, IN_UP);//初始化寄存器CC1101_Command(CC1101_CMD_SRES);                //复位Delay_MS(10);while(CC1101_ReadReg(CC1101_REG_AGCTEST) != 0x3F)//检测通信{LED_ON();Delay_MS(10);LED_OFF();Delay_MS(100);}LED_OFF();    CC1101_WriteReg(CC1101_REG_IOCFG0,0x06);            //发送提示引脚    CC1101_WriteReg(CC1101_REG_IOCFG2,0x01);            //接收提示引脚    CC1101_WriteReg(CC1101_REG_FIFOTHR,0x0f);           //RX FIFO和TX FIFO门限    CC1101_WriteReg(CC1101_REG_SYNC1,0xD3);             //同步词汇,高字节    CC1101_WriteReg(CC1101_REG_SYNC0,0x91);             //同步词汇,低字节    CC1101_WriteReg(CC1101_REG_PKTLEN,CC1101_DATA_LEN); //数据包长度,255    CC1101_WriteReg(CC1101_REG_PKTCTRL1,0x04);          //数据包自动控制    CC1101_WriteReg(CC1101_REG_PKTCTRL0,0x04);          //数据包自动控制    CC1101_WriteReg(CC1101_REG_ADDR,0x00);              //设备地址    CC1101_WriteReg(CC1101_REG_CHANNR,0x00);            //信道    CC1101_WriteReg(CC1101_REG_FSCTRL1,0x06);           //频率合成器控制,高字节    CC1101_WriteReg(CC1101_REG_FSCTRL0,0x00);           //频率合成器控制,低字节    CC1101_WriteReg(CC1101_REG_FREQ2,0x10);             //频率控制词汇,高字节    CC1101_WriteReg(CC1101_REG_FREQ1,0xb1);             //频率控制词汇,中间字节    CC1101_WriteReg(CC1101_REG_FREQ0,0x3b);             //频率控制词汇,低字节//2.4KBPS    CC1101_WriteReg(CC1101_REG_MDMCFG4,0xF6);           //调制器配置    CC1101_WriteReg(CC1101_REG_MDMCFG3,0x83);           //调制器配置    CC1101_WriteReg(CC1101_REG_MDMCFG2,0x13);           //调制器配置    CC1101_WriteReg(CC1101_REG_MDMCFG1,0x22);           //调制器配置    CC1101_WriteReg(CC1101_REG_MDMCFG0,0xf8);           //调制器配置    CC1101_WriteReg(CC1101_REG_DEVIATN,0x15);           //调制器背离设置    CC1101_WriteReg(CC1101_REG_MCSM2,0x07);             //主通信控制状态机配置    CC1101_WriteReg(CC1101_REG_MCSM1,0x30);             //主通信控制状态机配置    CC1101_WriteReg(CC1101_REG_MCSM0,0x18);             //主通信控制状态机配置    CC1101_WriteReg(CC1101_REG_FOCCFG,0x16);            //频率偏移补偿配置    CC1101_WriteReg(CC1101_REG_BSCFG,0x6c);             //位同步配置    CC1101_WriteReg(CC1101_REG_AGCTRL2,0x03);           //AGC控制    CC1101_WriteReg(CC1101_REG_AGCTRL1,0x40);           //AGC控制    CC1101_WriteReg(CC1101_REG_AGCTRL0,0x91);           //AGC控制    CC1101_WriteReg(CC1101_REG_WOREVT1,0x87);           //高字节时间0暂停    CC1101_WriteReg(CC1101_REG_WOREVT0,0x6b);           //低字节时间0暂停    CC1101_WriteReg(CC1101_REG_WORCTRL,0xfb);           //电磁波激活控制    CC1101_WriteReg(CC1101_REG_FREND1,0x56);            //前末端RX配置    CC1101_WriteReg(CC1101_REG_FREND0,0x10);            //前末端TX配置    CC1101_WriteReg(CC1101_REG_FSCAL3,0xe9);            //频率合成器校准    CC1101_WriteReg(CC1101_REG_FSCAL2,0x2a);            //频率合成器校准    CC1101_WriteReg(CC1101_REG_FSCAL1,0x00);            //频率合成器校准    CC1101_WriteReg(CC1101_REG_FSCAL0,0x1f);            //频率合成器校准    CC1101_WriteReg(CC1101_REG_RCCTRL1,0x41);           //RC振荡器配置    CC1101_WriteReg(CC1101_REG_RCCTRL0,0x00);           //RC振荡器配置    CC1101_WriteReg(CC1101_REG_FSTEST,0x59);            //频率合成器校准控制//10DB//CC1101_WriteReg(CC1101_REG_PATABLE0,0xc0); //CC1101_WriteReg(CC1101_REG_PATABLE1,0xc0); /*CC1101_WriteReg(CC1101_REG_PATABLE2,0xc0); CC1101_WriteReg(CC1101_REG_PATABLE3,0xc0); CC1101_WriteReg(CC1101_REG_PATABLE4,0xc0); CC1101_WriteReg(CC1101_REG_PATABLE5,0xc0); CC1101_WriteReg(CC1101_REG_PATABLE6,0xc0); CC1101_WriteReg(CC1101_REG_PATABLE7,0xc0); */Delay_MS(10);}/************************************************************************************************************************** 函数:void CC1101_WriteTxFIFO(u8 *pBuff,u8 len)* 功能:写入数据到发送缓冲区* 参数:pBuff:需要写入的数据缓冲区指针,len:需要写入的数据长度* 返回:无* 依赖:底层宏定义* 作者:cp1300@139.com* 时间:2014-01-01* 最后修改时间 : 2014-01-01* 说明: 写入数据到发送FIFO*************************************************************************************************************************/void CC1101_WriteTxFIFO(u8 *pBuff,u8 len){    u16 i;    CC1101_CS_L();    CC1101_ReadWriteByte(BURST_WRITE_FIFO);    for(i = 0;i < len;i ++)    {        CC1101_ReadWriteByte(pBuff[i]);    }    CC1101_CS_H();}/************************************************************************************************************************** 函数:void CC1101_ReadRxFIFO(u8 *pBuff,u8 len)* 功能:读取接收缓冲区* 参数:pBuff:需要读取的数据缓冲区指针,len:需要读取的数据长度* 返回:无* 依赖:底层宏定义* 作者:cp1300@139.com* 时间:2014-01-01* 最后修改时间 : 2014-01-01* 说明: 从接收FIFO读取数据*************************************************************************************************************************/void CC1101_ReadRxFIFO(u8 *pBuff,u8 len){    u16 i;    CC1101_CS_L();    CC1101_ReadWriteByte(BURST_READ_FIFO);    for(i = 0;i < len;i ++)    {        pBuff[i] = CC1101_ReadWriteByte(0xff);    }    CC1101_CS_H();}//发送数据,将缓冲区数据全部发送出去//一次最多64B,因为受到FIFO限制void CC1101_RfDataSend(u8 *pBuff,u8 len){    CC1101_Command(CC1101_CMD_SIDLE);   //退出当前模式    CC1101_Command(CC1101_CMD_SFTX);   //清空发送缓冲区    CC1101_WriteTxFIFO(pBuff, len);    //写入数据到发送缓冲区    CC1101_Command(CC1101_CMD_STX);   //开始发送数据    while(!CC1101_GDO0);    while(CC1101_GDO0);    CC1101_Command(CC1101_CMD_SIDLE);   //退出当前模式}//发送数据包//每次发送最多65B,第一字节为长度,数据多将会重复发送//可以发送任意大小//CC1101PackSize有效数据包大小,0-64,也就是CC1101单次发送数据大小-1void CC1101_RfDataSendPack(u8 *pBuff, u16 len){u16 i,m,n,j;m = len / (CC1101_DATA_LEN-1);//整数数据帧数量n = len % (CC1101_DATA_LEN-1);//余数//发送整数包for(i = 0;i < m;i ++){Delay_MS(1);CC1101_Command(CC1101_CMD_SIDLE);   //退出当前模式    CC1101_Command(CC1101_CMD_SFTX);   //清空发送缓冲区CC1101_CS_L();CC1101_ReadWriteByte(BURST_WRITE_FIFO);CC1101_ReadWriteByte(CC1101_DATA_LEN-1);//先写入包大小for(j = 0;j < (CC1101_DATA_LEN-1);j ++){CC1101_ReadWriteByte(*pBuff++);//写入数据到发送缓冲区}CC1101_CS_H();CC1101_Command(CC1101_CMD_STX);   //开始发送数据while(!CC1101_GDO0);while(CC1101_GDO0);//等待发送完成}//发送余数包if(n!=0){Delay_MS(1);CC1101_Command(CC1101_CMD_SIDLE);   //退出当前模式    CC1101_Command(CC1101_CMD_SFTX);   //清空发送缓冲区CC1101_CS_L();CC1101_ReadWriteByte(BURST_WRITE_FIFO);CC1101_ReadWriteByte(n);//先写入包大小for(j = 0;j < n;j ++){CC1101_ReadWriteByte(*pBuff++);//写入数据到发送缓冲区}CC1101_CS_H();CC1101_Command(CC1101_CMD_STX);   //开始发送数据while(!CC1101_GDO0);while(CC1101_GDO0);//等待发送完成}    CC1101_Command(CC1101_CMD_SIDLE);   //退出当前模式}//读取芯片状态u8 CC1101_GetStatus(void){    return CC1101_WriteReg(CC1101_REG_TEST2, 0x98);}


CC1101.H

/************************************************************************************************************* * 文件名:CC1101.c * 功能:STM8 CC1101驱动函数 * 作者:cp1300@139.com* 创建时间:2013-12-06 14:35 * 最后修改时间:2013-12-06 * 详细:433MHZ收发芯片驱动*************************************************************************************************************/#ifndef _CC1101_H_#define _CC1101_H_#include "system.h"//CC1101 命令//以写的方式单直接访问将触发响应的命令typedef enum{CC1101_CMD_SRES=0x30,//重启CC1101_CMD_SFSTXON=0x31,//开启和校准频率合成器(若MCSM0.FSAUTOCAL=1)CC1101_CMD_SXOFF=0x32,//关闭晶体振荡器CC1101_CMD_SCAL=0x33,//校准频率合成器并关断(开启快速启动)。在不设置手动校准模式(MCSM0.FS_AUTOCAL=0)的情况下,SCAL能从空闲模式滤波。CC1101_CMD_SRX=0x34,//启用RX。若上一状态为空闲且MCSM0.FS_AUTOCAL=1则首先运行校准。CC1101_CMD_STX=0x35,//空闲状态:启用TX。若MCSM0.FS_AUTOCAL=1首先运行校准。若在RX状态且CCA启用:若信道为空则进入TXCC1101_CMD_SIDLE=0x36,//离开RX/TX,关断频率合成器并离开电磁波激活模式若可用CC1101_CMD_SAFC=0x37,//运行22.1节列出的频率合成器的AFC调节CC1101_CMD_SWOR=0x38,//运行27.5节描述的自动RX选举序列(电磁波激活)CC1101_CMD_SPWD=0x39,//当CSn为高时进入功率降低模式。CC1101_CMD_SFRX=0x3a,//冲洗RX FIFO缓冲CC1101_CMD_SFTX=0x3b,//冲洗TX FIFO缓冲CC1101_CMD_SWORRST=0x3c,//重新设置真实时间时钟CC1101_CMD_SNOP=0x3d,//无操作。可能用来为更简单的软件将滤波命令变为2字节。}CC1101_CMD_TYPE;//CC1101寄存器定义typedef enum{//可读写的寄存器CC1101_REG_IOCFG2=0x00,//GDO2输出脚配置CC1101_REG_IOCFG1=0x01,//GDO1输出脚配置CC1101_REG_IOCFG0=0x02,//GDO0输出脚配置CC1101_REG_FIFOTHR=0x03,//RX FIFO和TX FIFO门限CC1101_REG_SYNC1=0x04,//同步词汇,高字节CC1101_REG_SYNC0=0x05,//同步词汇,低字节CC1101_REG_PKTLEN=0x06,//数据包长度CC1101_REG_PKTCTRL1=0x07,//数据包自动控制CC1101_REG_PKTCTRL0=0x08,//数据包自动控制CC1101_REG_ADDR=0x09,//设备地址CC1101_REG_CHANNR=0x0a,//信道数CC1101_REG_FSCTRL1=0x0b,//频率合成器控制,高字节CC1101_REG_FSCTRL0=0x0c,//频率合成器控制,低字节CC1101_REG_FREQ2=0x0d,//频率控制词汇,高字节CC1101_REG_FREQ1=0x0e,//频率控制词汇,中间字节CC1101_REG_FREQ0=0x0f,//频率控制词汇,低字节CC1101_REG_MDMCFG4=0x10,//调制器配置CC1101_REG_MDMCFG3=0x11,//调制器配置CC1101_REG_MDMCFG2=0x12,//调制器配置CC1101_REG_MDMCFG1=0x13,//调制器配置CC1101_REG_MDMCFG0=0x14,//调制器配置CC1101_REG_DEVIATN=0x15,//调制器背离设置CC1101_REG_MCSM2=0x16,//主通信控制状态机配置CC1101_REG_MCSM1=0x17,//主通信控制状态机配置CC1101_REG_MCSM0=0x18,//主通信控制状态机配置CC1101_REG_FOCCFG=0x19,//频率偏移补偿配置CC1101_REG_BSCFG=0x1a,//位同步配置CC1101_REG_AGCTRL2=0x1b,//AGC控制CC1101_REG_AGCTRL1=0x1c,//AGC控制CC1101_REG_AGCTRL0=0x1d,//AGC控制CC1101_REG_WOREVT1=0x1e,//高字节时间0暂停CC1101_REG_WOREVT0=0x1f,//低字节时间0暂停CC1101_REG_WORCTRL=0x20,//电磁波激活控制CC1101_REG_FREND1=0x21,//前末端RX配置CC1101_REG_FREND0=0x22,//前末端TX配置CC1101_REG_FSCAL3=0x23,//频率合成器校准CC1101_REG_FSCAL2=0x24,//频率合成器校准CC1101_REG_FSCAL1=0x25,//频率合成器校准CC1101_REG_FSCAL0=0x26,//频率合成器校准CC1101_REG_RCCTRL1=0x27,//RC振荡器配置CC1101_REG_RCCTRL0=0x28,//RC振荡器配置CC1101_REG_FSTEST=0x29,//频率合成器校准控制CC1101_REG_PTEST=0x2a,//产品测试CC1101_REG_AGCTEST=0x2b,//AGC测试CC1101_REG_TEST2=0x2c,//不同的测试设置CC1101_REG_TEST1=0x2d,//不同的测试设置CC1101_REG_TEST0=0x2e,//不同的测试设置//只读的状态寄存器,如果写入将导致命令滤波CC1101_REG_PARTNUM=0xf0,//CC2550的组成部分数目CC1101_REG_VERSION=0xf1,//当前版本数CC1101_REG_FREQEST=0xf2,//频率偏移估计CC1101_REG_LQI=0xf3,//连接质量的解调器估计CC1101_REG_RSSI=0xf4,//接收信号强度指示CC1101_REG_MARCSTATE=0xf5,//控制状态机状态CC1101_REG_WORTIME1=0xf6,//WOR计时器高字节CC1101_REG_WORTIME0=0xf7,//WOR计时器低字节CC1101_REG_PKTSTATUS=0xf8,//当前GDOx状态和数据包状态CC1101_REG_VCOVCDAC=0xf9,//PLL校准模块的当前设定CC1101_REG_TXBYTES=0xfA,//TX FIFO中的下溢和比特数CC1101_REG_RXBYTES=0xfB,//RX FIFO中的下溢和比特数//手册上面没有的CC1101_REG_STATUS1=0xfc,//CC1101_REG_STATUS0=0xfd,////功率控制CC1101_REG_PATABLE0=0x40,CC1101_REG_PATABLE1=0x41,CC1101_REG_PATABLE2=0x42,CC1101_REG_PATABLE3=0x43,CC1101_REG_PATABLE4=0x44,CC1101_REG_PATABLE5=0x45,CC1101_REG_PATABLE6=0x46,CC1101_REG_PATABLE7=0x47,}CC1101_REG_TYPE;//IO#define CC1101_GDO0                 (GPIOC->IDR&BIT3)           //PC3#define CC1101_GDO2                 (GPIOC->IDR&BIT4)           //PC4void CC1101_Init(u8 Addr);//初始化CC1101u8 CC1101_ReadReg(CC1101_REG_TYPE RegAddr);//读取CC1101通用寄存器u8 CC1101_WriteReg(CC1101_REG_TYPE RegAddr, u8 data);//写入CC1101通用寄存器u8 CC1101_Command(CC1101_CMD_TYPE Cmd);//发送单字节命令u8 CC1101_GetStatus(void);//读取芯片状态void CC1101_RfDataSend(u8 *pBuff,u8 len);void CC1101_ReadRxFIFO(u8 *pBuff,u8 len);//CC1101PackSize有效数据包大小,0-64,也就是CC1101单次发送数据大小-1void CC1101_RfDataSendPack(u8 *pBuff, u16 len);#endif //CC1101



MAIN.C收发透传

#include "system.h"#include "uart1.h"#include "delay.h"#include "main.h"#include "LED.h"#include "cc1101.h"//串口缓冲区#define UART_BUFF_SIZE256//串口接收缓冲区大小u8 UartBuff[2][UART_BUFF_SIZE];//串口接收缓冲区u16 UartLen1 = 0;//串口接收数据长度u16 UartLen2 = 0;//串口接收数据长度//CC1101缓冲区#define RF_BUFF_SIZE64//CC1101缓冲区大小u8 RfBuff[RF_BUFF_SIZE];//CC1101缓冲区u8 RfLen = 0;//CC1101接收缓冲区大小//缓冲区选择u8 UART_RxNum = 0;//串口缓冲区选择 //主函数void main(void){u8 LastNum = 0;u32 delay = 0;    SYS_ClockInit();//初始化系统时钟为内部晶振, 16MHZ//初始化LEDLED_Init();//初始化串口UART1_Init(115200, ENABLE);//初始化UART1,开启接收中断UART1_SetRxBuff(UartBuff[UART_RxNum],UART_BUFF_SIZE);//设置串口1接收缓冲区CC1101_Init(0Xaa);//CC1101_WriteReg(CC1101_REG_PATABLE1,0xc0);CC1101_WriteReg(CC1101_REG_PATABLE0,0x00);CC1101_Command(CC1101_CMD_SIDLE);   //退出当前模式CC1101_Command(CC1101_CMD_SRX);     //进入接收模式SYS_EnableInterrupt();//开启系统中断while(1)    {if(++delay == 120000){delay = 0;UartLen1 = UART1_GetRxCnt();//获取接收数据数量if(UartLen1>0){SYS_DisableInterrupt();//关闭中断LED_ON();LastNum = UART_RxNum;//记录上一次的缓冲区编号UART_RxNum = (~UART_RxNum)&0x01;UART1_SetRxBuff(UartBuff[UART_RxNum],UART_BUFF_SIZE);//切换串口接收缓冲区//UART1_ClearRxCnt();//清除接收计数器SYS_EnableInterrupt();//开启系统中断CC1101_WriteReg(CC1101_REG_PATABLE0,0xc0);//开启天线增益CC1101_RfDataSendPack(UartBuff[LastNum], UartLen1);//CC1101发送数据包CC1101_WriteReg(CC1101_REG_PATABLE0,0);//关闭天线增益CC1101_Command(CC1101_CMD_SIDLE);   //退出当前模式CC1101_Command(CC1101_CMD_SRX);     //进入接收模式LED_OFF();}}//CC1101接收到数据if(CC1101_GDO2)        {            LED_ON();            RfLen = CC1101_ReadReg(CC1101_REG_RXBYTES);CC1101_ReadRxFIFO(RfBuff,RfLen);UART1_SendData(&RfBuff[1], RfBuff[0]);//第0B为数据长度,后面的为有效数据CC1101_Command(CC1101_CMD_SIDLE);   //退出当前模式    CC1101_Command(CC1101_CMD_SFRX);   //清除接收缓冲区CC1101_Command(CC1101_CMD_SRX);     //进入接收模式LED_OFF();        }    }}

实现透传,调试中发现问题就是接收的时候必须关闭发射增益,否则无法接收,应该是内部发送接收天线进行了切换.


实物图

   


1 0
原创粉丝点击