单片机 > 单片机程序设计 > 详情

无线通信驱动(STM32) 增加FIFO扩展模式,可以发送超大数据包

发布时间:2020-12-28 发布时间:
|

A7139 拥有电磁波唤醒以及10mW的发射功率,非常容易实现长距离通信,目前测试有障碍物可以轻松达到300m以上.

通过几天的调试,目前可以发送任意大小的数据包,大小为1-16KB,全部使用中断收发,效率极高。

增加波特率设置2Kbps-100Kbps任意设置

增加通信信道设置0-255

增加发送功率设置0-7


底层代码

  1. /************************************************************************************************************* 

  2.  * 文件名:     A7139.c 

  3.  * 功能:      STM32 A7139驱动 

  4.  * 作者:      cp1300@139.com 

  5.  * 创建时间:    2015-07-19 

  6.  * 最后修改时间:2015-12-30 

  7.  * 详细:      A7139驱动 

  8. *************************************************************************************************************/        

  9. #include "SYSTEM.H"  

  10. #include "GPIO_INIT.H"  

  11. #include "a7139.H"  

  12. #include "LED.H"  

  13.   

  14.   

  15.   

  16. //晶振寄存器,用于设置晶振以及PAGE地址  

  17. //用于缓存寄存器7的值  

  18. static u16 A7139_CRYSTAL_REG = 0x18;  

  19.   

  20. //单包数据发送超时时间  

  21. #define A7139_SEND_TIME_OUT     5   //单位10ms  

  22.   

  23. //基础频率,设置频率范围为420.500MHZ~452.375MHZ ,频道差为125KHZ  

  24. #define A7139_BASE_FRE          420.5f  

  25.   

  26. //调试开关  

  27. #define A7193_DBUG  1  

  28. #if A7193_DBUG  

  29.     #include "system.h"  

  30.     #define A7193_debug(format,...) uart_printf(format,##__VA_ARGS__)  

  31. #else  

  32.     #define A7193_debug(format,...) /  

  33. /  

  34. #endif  //A7193_DBUG  

  35.   

  36. vu8 IntCnt = 0;  

  37.   

  38. //寄存器配置  

  39. typedef struct  

  40. {  

  41.     u16 SCLOCK;     //系统时钟寄存器  

  42.     u16 PLL1;       //PLL1  

  43.     u16 PLL2;       //PLL2  

  44.     u16 PLL3;       //PLL3  

  45.     u16 PLL4;       //PLL4  

  46.     u16 PLL5;       //PLL5  

  47.     u16 PLL6;       //PLL6  

  48.     u16 CRYSTAL;    //晶振设置  

  49.     u16 PREG8S;     //寄存器组,由CRYSTAL控制切换  

  50.     u16 PREG9S;     //寄存器组,由CRYSTAL控制切换  

  51.     u16 RX1;        //接收设置1  

  52.     u16 RX2;        //接收设置2  

  53.     u16 ADC;        //ADC  

  54.     u16 PIN;        //PIN  

  55.     u16 CALIB;      //Calibration  

  56.     u16 MODE;       //模式控制  

  57. } A7139_CONFIG_YPTE;  

  58.   

  59.   

  60.   

  61. const u16 A7139Config[]=          

  62. {  

  63.         0x0021,     //SYSTEM CLOCK register,  

  64.         0x0A21,     //PLL1 register,  

  65.         0xDA05,     //PLL2 register,    433.301MHz  

  66.         0x0000,     //PLL3 register,  

  67.         0x0A20,     //PLL4 register,  

  68.         0x0024,     //PLL5 register,  

  69.         0x0000,     //PLL6 register,  

  70.         0x0001,     //CRYSTAL register,  

  71.         0x0000,     //PAGEA,  

  72.         0x0000,     //PAGEB,  

  73.         0x18D4,     //RX1 register,     IFBW=100KHz, ETH=1    

  74.         0x7009,     //RX2 register,     by preamble  

  75.         0x4400,     //ADC register,  

  76.         0x0800,     //PIN CONTROL register,     Use Strobe CMD  

  77.         0x4845,     //CALIBRATION register,  

  78.         0x20C0      //MODE CONTROL register,    Use FIFO mode  

  79. };  

  80.   

  81. const u16 A7139Config_PageA[]=     

  82. {  

  83.         0xF706,     //TX1 register,     Fdev = 37.5kHz  

  84.         0x0000,     //WOR1 register,  

  85.         0xF800,     //WOR2 register,  

  86.         0x1107,     //RFI register,     Enable Tx Ramp up/down  

  87.         0x0170,     //PM register,  

  88.         0x0201,     //RTH register,  

  89.         0x400F,     //AGC1 register,  

  90.         0x2AC0,     //AGC2 register,  

  91.         0x0041,     //GIO register      GIO1->WTR GIO2->WTR   

  92.         0xD281,     //CKO register  

  93.         0x0004,     //VCB register,  

  94.         0x0A21,     //CHG1 register,    430MHz  

  95.         0x0022,     //CHG2 register,    435MHz  

  96.         0x003F,     //FIFO register,    FEP=63+1=64bytes  

  97.         0x1507,     //CODE register,    Preamble=4bytes, ID=4bytes  

  98.         0x0000      //WCAL register,  

  99. };  

  100.   

  101. const u16 A7139Config_PageB[]=     

  102. {  

  103.         0x0337,     //TX2 register,       

  104.         0x8400,     //IF1 register,     Enable Auto-IF, IF=200KHz  

  105.         0x0000,     //IF2 register,     频率偏移为0  

  106.         0x0000,     //ACK register,  

  107.         0x0000      //ART register,  

  108. };  

  109.   

  110.   

  111. //GPIO1功能设置  

  112. #define A7139_SetGIO_WTR()      A7139_WritePageA(A7139_REG8_GPIO, 0x0041)   //WTR模式,单包收发提示  

  113. #define A7139_SetGIO_FPF() A7139_WritePageA(A7139_REG8_GPIO, 0x0035) //FPF模式,多包收发状态提示



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
PIC单片机基础知识之二