找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3428|回复: 0
打印 上一主题 下一主题
收起左侧

SX1276_EasyLink_按键源码 lora资料

[复制链接]
跳转到指定楼层
楼主
sx1276可以参考下


单片机源程序如下:
  1. ////////////////////////////////////////////////////////////////////////////////
  2. // 文件名:   main_tx/rx
  3. // 版本:    v1.0
  4. // 工作环境: IAR  v5.30
  5. // 作者:     于海波
  6. // 生成日期: 2013.12
  7. // 功能:      A发送包给B,黄灯闪烁,B模块接到数据红灯闪烁,B将数据回传给A模块,
  8. //            A接到数据后红灯闪烁, 循环次操作,
  9. // 相关文件:
  10. // 修改日志:
  11. ////////////////////////////////////////////////////////////////////////////////

  12. #include <string.h>
  13. #include <stdint.h>
  14. #include <stdbool.h>
  15. #include "driver.h"
  16. #include "sx1276-f4152-Hal.h"
  17. #include "LSD_RF_SX1276.h"
  18. #include "LSD_RF_APPrf.h"
  19. #include "clock.h"
  20. //===================================定义变量===================================================
  21. long SysTick = 0;
  22. uint8_t TXbuffer[30]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29};
  23. uint8_t WakeAddr[8]={5,6,7,8,9,10,11,7};
  24. uint8_t Rxbuffer[64];
  25. //===================================函数声明===================================================

  26. //===============================================================================================
  27. ////////////////////////////////////////////////////////////////////////////////
  28. // 功能描述 : 主函数
  29. // 输入参数 : 无
  30. // 返回参数 : 无
  31. // 说明     :
  32. ////////////////////////////////////////////////////////////////////////////////
  33. typedef enum{
  34.     Nope,
  35.     B1080bps,//BW = 125KHz    SF = 9  CR = 4_6
  36.     B4000bps,//BW = 125KHz  SF = 7  CR = 4_5
  37.     B14000bps,//BW = 500KHz  SF = 7  CR = 4_6
  38. }t_Baudrate;
  39. t_Baudrate Baudrate = Nope;

  40. unsigned char *point;

  41. unsigned char LCD_p[9] = {0,0,0,0,0,8,0,1,0xff};
  42. int T_Cnt = 0;
  43. int R_Cnt = 0;
  44. bool RESET_Flag = false;
  45. void main( void )
  46. {
  47.     WDTCTL = WDTPW + WDTHOLD;            // 关闭看门狗
  48.     platform_init();                     //测试底板初始化
  49.     LEDONBAND(LEDALL);                   //初始化过程点亮所有LED灯
  50.     KEYBOARD_DIR &=~ (KEY_S1+KEY_S2);
  51.     KEYBOARD_IFG &=~ (KEY_S1+KEY_S2);
  52.     KEYBOARD_IES |= (KEY_S1+KEY_S2);
  53.     KEYBOARD_IE |= (KEY_S1+KEY_S2);
  54.    
  55.     point = (unsigned char *)(&(G_LoRaConfig.BandWidth));
  56.     flash_read(FLASH_ADDRESS_D,point,3*2);
  57.     if(G_LoRaConfig.BandWidth>BW500KHZ){
  58.         G_LoRaConfig.BandWidth=BW125KHZ;
  59.         G_LoRaConfig.SpreadingFactor = SF09;
  60.         G_LoRaConfig.CodingRate = CR_4_6;
  61.         flash_seg_clear(FLASH_ADDRESS_D);//写之前必清除
  62.         flash_write(FLASH_ADDRESS_D,point,3*2);
  63.     }
  64.     if(G_LoRaConfig.BandWidth==BW500KHZ){
  65.         Baudrate = B14000bps;
  66.         LCD_p[8] = 1;
  67.         LCD_p[7] = 4;
  68.         LCD_p[6] = 0;
  69.         LCD_p[5] = 0;
  70.         LCD_p[4] = 0;
  71.     }
  72.     else{
  73.         if(G_LoRaConfig.SpreadingFactor==SF07){
  74.             Baudrate = B4000bps;
  75.             LCD_p[8] =0xff;
  76.             LCD_p[7] = 4;
  77.             LCD_p[6] = 0;
  78.             LCD_p[5] = 0;
  79.             LCD_p[4] = 0;
  80.         }
  81.         else{
  82.             Baudrate = B1080bps;
  83.             LCD_p[8] =0xff;
  84.             LCD_p[7] = 1;
  85.             LCD_p[6] = 0;
  86.             LCD_p[5] = 8;
  87.             LCD_p[4] = 0;
  88.         }
  89.     }
  90.     lcd_init();
  91.     LCD_Disp_ALL_Num(LCD_p);
  92.     //配置各个参数
  93.     G_LoRaConfig.LoRa_Freq = 470000000;   //中心频点470MHz
  94.     //G_LoRaConfig.BandWidth = BW125KHZ;    //BW = 125KHz
  95.     //G_LoRaConfig.SpreadingFactor = SF09;  //SF = 9
  96.     //G_LoRaConfig.CodingRate = CR_4_6;     //CR = 4/6
  97.     G_LoRaConfig.PowerCfig = 15;          //19±dBm
  98.     G_LoRaConfig.MaxPowerOn = true;      
  99.     G_LoRaConfig.CRCON = true;            //CRC开启
  100.     G_LoRaConfig.ExplicitHeaderOn = true; //Header开启
  101.     G_LoRaConfig.PayloadLength = 20;      //数据包长度
  102.    
  103.     if(SX127x_init()!=NORMAL) WDTCTL=0;       //无线模块初始化失败复位
  104.     KEYBOARD_IE |= (KEY_S1+KEY_S2);
  105.     _EINT();                              //开总中断
  106.     LEDOFFBIT(LEDALL);                   //初始化完毕关闭所有LED灯
  107.     ON_Timerout();                        //开启定时器,1s一发数据
  108.     while(1)
  109.     {
  110.         LPM3;
  111.         if(RESET_Flag==true){
  112.             flash_seg_clear(FLASH_ADDRESS_D);//写之前必清除
  113.             flash_write(FLASH_ADDRESS_D,point,3*2);
  114.             WDTCTL = 0;//RESET
  115.         }
  116.         
  117.         LSD_RF_RXmode();  //每次发送一包数据后,进入接收状态,等待B模块应答
  118.         LCD_p[0] = T_Cnt%10;
  119.         LCD_p[1] = T_Cnt/10%10;
  120.         LCD_p[2] = R_Cnt%10;
  121.         LCD_p[3] = R_Cnt/10%10;
  122.         LCD_Disp_ALL_Num(LCD_p);
  123.         if(T_Cnt>=100)
  124.             T_Cnt = 0;
  125.         if(R_Cnt>=100)
  126.             R_Cnt = 0;
  127.     }   
  128. }
  129. ////////////////////////////////////////////////////////////////////////////////
  130. // 功能描述 : 无线接收数据中断入口
  131. // 输入参数 : 无
  132. // 返回参数 : 无
  133. // 说明     :
  134. ////////////////////////////////////////////////////////////////////////////////
  135. #pragma vector = PORT1_VECTOR
  136. __interrupt void port1_isr(void)
  137. {  
  138.     if(KEYBOARD_IFG&(KEY_ALL)){
  139.         char Keys_Flag = KEYBOARD_IFG&(KEY_ALL);
  140.         switch(Keys_Flag&(KEY_S1|KEY_S2)){
  141.         case KEY_S1:
  142.             switch(Baudrate){
  143.             case B1080bps:
  144.                 G_LoRaConfig.BandWidth = BW125KHZ;    //BW = 125KHz
  145.                 G_LoRaConfig.SpreadingFactor = SF07;  //SF = 9
  146.                 G_LoRaConfig.CodingRate = CR_4_5;     //CR = 4/6
  147.                 Baudrate = B4000bps;
  148.                 break;
  149.             case B4000bps:
  150.                 G_LoRaConfig.BandWidth = BW500KHZ;    //BW = 125KHz
  151.                 G_LoRaConfig.SpreadingFactor = SF07;  //SF = 9
  152.                 G_LoRaConfig.CodingRate = CR_4_6;     //CR = 4/6
  153.                 Baudrate = B14000bps;
  154.                 break;
  155.             case B14000bps:
  156.             default:
  157.                 G_LoRaConfig.BandWidth = BW125KHZ;    //BW = 125KHz
  158.                 G_LoRaConfig.SpreadingFactor = SF09;  //SF = 9
  159.                 G_LoRaConfig.CodingRate = CR_4_6;     //CR = 4/6
  160.                 Baudrate = B1080bps;
  161.                 break;
  162.             }
  163.             RESET_Flag = true;
  164.             LPM3_EXIT;
  165.             break;
  166.         case KEY_S2:
  167.             T_Cnt = 0;
  168.             R_Cnt = 0;
  169.             break;
  170.         default:
  171.             break;
  172.         }
  173.         KEYBOARD_IFG &= ~KEY_ALL;
  174.         return;
  175.     }
  176.     if(DIO0_IFG)                                      //判断是否是DIO0引起的中断
  177.     {
  178.         DIO0_IFG = 0;                                  //清除DIO0中断标志位
  179.         
  180.         LSD_RF_RxPacket(Rxbuffer);   //接收数据包
  181.         if((Rxbuffer[2]==2)&&(Rxbuffer[5]==5))
  182.         {
  183.             LEDONBIT(LED1);                                //状态指示灯
  184.             DelayMs(60);
  185.             LEDOFFBIT(LED1);                               //状态指示灯
  186.             R_Cnt++;
  187.         }
  188.                 LPM3_EXIT;  
  189.     }
  190.     P1IFG=0;
  191. }
  192. ////////////////////////////////////////////////////////////////////////////////
  193. // 功能描述 : 超时定时器
  194. // 输入参数 : 无
  195. // 返回参数 : 无
  196. // 说明     : 用于误唤醒,或唤醒失败后超时时间到后重新进入WOR
  197. ////////////////////////////////////////////////////////////////////////////////
  198. #pragma vector = TIMER1_A0_VECTOR
  199. __interrupt void Timer1_A0_ISR()
  200. {
  201.     LEDONBIT(LED3);//发送状态指示灯
  202.     G_LoRaConfig.PayloadLength = 20;
  203.     LSD_RF_SendPacket(TXbuffer);//发送30个字节数据测试
  204.     T_Cnt++;
  205.     LEDOFFBIT(LED3);//发送状态指示灯
  206.     LPM3_EXIT;
  207. }
复制代码

所有资料51hei提供下载:
SX1276_EasyLink_2F717NXX按键.zip (398.45 KB, 下载次数: 18)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表