A7139 无线通信驱动(STM32) 增加FIFO扩展模式
扫描二维码
随时随地手机看文章
A7139 拥有电磁波唤醒以及10mW的发射功率,非常容易实现长距离通信,目前测试有障碍物可以轻松达到300m以上.
通过几天的调试,目前可以发送任意大小的数据包,大小为1-16KB,全部使用中断收发,效率极高。
增加波特率设置2Kbps-100Kbps任意设置
增加通信信道设置0-255
增加发送功率设置0-7
底层代码
/*************************************************************************************************************
*文件名:A7139.c
*功能:STM32A7139驱动
*作者:cp1300@139.com
*创建时间:2015-07-19
*最后修改时间:2015-12-30
*详细:A7139驱动
*************************************************************************************************************/
#include"SYSTEM.H"
#include"GPIO_INIT.H"
#include"a7139.H"
#include"LED.H"
//晶振寄存器,用于设置晶振以及PAGE地址
//用于缓存寄存器7的值
staticu16A7139_CRYSTAL_REG=0x18;
//单包数据发送超时时间
#defineA7139_SEND_TIME_OUT5//单位10ms
//基础频率,设置频率范围为420.500MHZ~452.375MHZ,频道差为125KHZ
#defineA7139_BASE_FRE420.5f
//调试开关
#defineA7193_DBUG1
#ifA7193_DBUG
#include"system.h"
#defineA7193_debug(format,...)uart_printf(format,##__VA_ARGS__)
#else
#defineA7193_debug(format,...)/
/
#endif//A7193_DBUG
vu8IntCnt=0;
//寄存器配置
typedefstruct
{
u16SCLOCK;//系统时钟寄存器
u16PLL1;//PLL1
u16PLL2;//PLL2
u16PLL3;//PLL3
u16PLL4;//PLL4
u16PLL5;//PLL5
u16PLL6;//PLL6
u16CRYSTAL;//晶振设置
u16PREG8S;//寄存器组,由CRYSTAL控制切换
u16PREG9S;//寄存器组,由CRYSTAL控制切换
u16RX1;//接收设置1
u16RX2;//接收设置2
u16ADC;//ADC
u16PIN;//PIN
u16CALIB;//Calibration
u16MODE;//模式控制
}A7139_CONFIG_YPTE;
constu16A7139Config[]=
{
0x0021,//SYSTEMCLOCKregister,
0x0A21,//PLL1register,
0xDA05,//PLL2register,433.301MHz
0x0000,//PLL3register,
0x0A20,//PLL4register,
0x0024,//PLL5register,
0x0000,//PLL6register,
0x0001,//CRYSTALregister,
0x0000,//PAGEA,
0x0000,//PAGEB,
0x18D4,//RX1register,IFBW=100KHz,ETH=1
0x7009,//RX2register,bypreamble
0x4400,//ADCregister,
0x0800,//PINCONTROLregister,UseStrobeCMD
0x4845,//CALIBRATIONregister,
0x20C0//MODECONTROLregister,UseFIFOmode
};
constu16A7139Config_PageA[]=
{
0xF706,//TX1register,Fdev=37.5kHz
0x0000,//WOR1register,
0xF800,//WOR2register,
0x1107,//RFIregister,EnableTxRampup/down
0x0170,//PMregister,
0x0201,//RTHregister,
0x400F,//AGC1register,
0x2AC0,//AGC2register,
0x0041,//GIOregisterGIO1->WTRGIO2->WTR
0xD281,//CKOregister
0x0004,//VCBregister,
0x0A21,//CHG1register,430MHz
0x0022,//CHG2register,435MHz
0x003F,//FIFOregister,FEP=63+1=64bytes
0x1507,//CODEregister,Preamble=4bytes,ID=4bytes
0x0000//WCALregister,
};
constu16A7139Config_PageB[]=
{
0x0337,//TX2register,
0x8400,//IF1register,EnableAuto-IF,IF=200KHz
0x0000,//IF2register,频率偏移为0
0x0000,//ACKregister,
0x0000//ARTregister,
};
//GPIO1功能设置
#defineA7139_SetGIO_WTR()A7139_WritePageA(A7139_REG8_GPIO,0x0041)//WTR模式,单包收发提示
#define A7139_SetGIO_FPF() A7139_WritePageA(A7139_REG8_GPIO, 0x0035) //FPF模式,多包收发状态提示