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

2020-01-21来源: eefocus关键字:无线通信驱动  STM32  FIFO  扩展模式  超大数据包

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模式,多包收发状态提示

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ..[15]
关键字:无线通信驱动  STM32  FIFO  扩展模式  超大数据包 编辑:什么鱼 引用地址:http://news.0830abc.com/mcu/ic486321.html 彩吧助手_[开户赠金]本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32中 warning: #61-D: integer operation result is out of range
下一篇:stm32zet6 PWM 记录

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

A7139 无线通信驱动(STM32) 增加FIFO扩展模式
;  u16 MODE;       //模式控制  } A7139_CONFIG_YPTE;        const u16 A7139Config[]=          {          
发表于 2017-02-26
A7139 无线通信驱动(STM32) 增加FIFO扩展模式
STM8S库文件判断指定IO输入引脚电平GPIO_ReadInputPin有问题
/**  * @brief  Reads the specified GPIO input data pin.  * @param  GPIOx : Select the GPIO peripheral number (x = A to I).  * @param  GPIO_Pin : Specifies the pin number.  * @retval BitStatus : GPIO input pin status.  */BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_Ty
发表于 2020-02-08
STM8 GPIO输入输出模式
悬浮输入悬浮输入,也叫浮空输入,顾名思义,即引脚悬空。这种方式的输入阻抗很高。当悬浮输入的引脚上加上信号时,单片机所得到的信号并不确定是高电平或是低电平,是一个不确定的信号。悬浮输入的典型应用就是模数转换,外部的任何一个小信号都要经过A/D采样转换为数字信号。彩吧助手_[开户赠金]上拉输入上拉就是把电位拉高,比如拉到Vcc。上拉就是将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!强弱只是上拉电阻的阻值不同。上拉输入最典型的应用就是外部按键,当按键未按下时,我们要保证它是高电平,当按键按下时才被拉低。推挽输出推挽输出(Push-pull output),也称为互补输出,推拉式输出。推挽输出模式导通损耗小,效率高。在此模式下,N-MOS、P-MO
发表于 2020-02-08
STM8 GPIO输入输出模式
STM8L的USART1串口通信详解 含例程
彩吧助手_[开户赠金]STM8L除了可以进行串口通信,还可支持红外通信,智能卡协议,这些功能后续会开发,发布程序源码。STM8L还可以使用DMA缓存数据,减少CPU负担,为了简单起见,本文没有用到DMA功能。彩吧助手_[开户赠金]只需要简单的配置发送的字长度,停止位数,波特率,打开发送接收,就可以进行串口数据收发。下图为串口发送数据流程。对于串口发送数据,需要注意的是,打开发送后,数据发送完成,如果不关闭中断,程序会一直进入中断。所以在确保数据发送完成后,需关闭中断,退出发送数据。本文通过周期性(500ms)的向上位机发送一组数据,来演示STM8L的串口通信。串口接收部分程序也已经调试好,只需把while循环中的程序注释掉,设置断点,查看上位机发送来的数据即可
发表于 2020-02-08
使用STM8S105K4T6C 模数转换器的12通道
分享今天遇到的一个stm8s模数转换的小问题~~~这款单片机一共提供了7个模数转换通道,他们分别是AIN0-AIN5和AIN12。stm8s105k4t6c的管脚图其中AIN0-AIN5的配置和使用方法如下,配置为连续转换、扫描模式(代码写的不好,大神请见谅~):[mw_shl_code=c,true]/*---------------------------------包含头文件---------------------------------*/#include "adc.h" #define        ADC     
发表于 2020-02-08
stm8——LED流水灯实现
最近接触并学习了一款STM8系列的芯片。以前学习了的ARM9+Linux后,再来学习单片机就感到上手很快了。 芯片基本信息:Type:STM8L151G68-bit ultralow power MCU, up to 32 KB Flash, 1 KB Data EEPROM RTC, LCD, timers, USART, I2C, SPI, ADC, DAC, comparators具体可以查看datasheet:http://pdf-file.ic37.com/pdf4/STMICROELECTRONICS
发表于 2020-02-08
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 0830abc.com, Inc. All rights reserved

页面底部区域 foot.htm