找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3361|回復(fù): 0
收起左側(cè)

SX1276_EasyLink_按鍵源碼 lora資料

[復(fù)制鏈接]
ID:413105 發(fā)表于 2018-10-21 15:05 | 顯示全部樓層 |閱讀模式
sx1276可以參考下
0.png

單片機源程序如下:
  1. ////////////////////////////////////////////////////////////////////////////////
  2. // 文件名:   main_tx/rx
  3. // 版本:    v1.0
  4. // 工作環(huán)境: IAR  v5.30
  5. // 作者:     于海波
  6. // 生成日期: 2013.12
  7. // 功能:      A發(fā)送包給B,黃燈閃爍,B模塊接到數(shù)據(jù)紅燈閃爍,B將數(shù)據(jù)回傳給A模塊,
  8. //            A接到數(shù)據(jù)后紅燈閃爍, 循環(huán)次操作,
  9. // 相關(guān)文件:
  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. //===================================函數(shù)聲明===================================================

  26. //===============================================================================================
  27. ////////////////////////////////////////////////////////////////////////////////
  28. // 功能描述 : 主函數(shù)
  29. // 輸入?yún)?shù) : 無
  30. // 返回參數(shù) : 無
  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;            // 關(guān)閉看門狗
  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.     //配置各個參數(shù)
  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;      //數(shù)據(jù)包長度
  102.    
  103.     if(SX127x_init()!=NORMAL) WDTCTL=0;       //無線模塊初始化失敗復(fù)位
  104.     KEYBOARD_IE |= (KEY_S1+KEY_S2);
  105.     _EINT();                              //開總中斷
  106.     LEDOFFBIT(LEDALL);                   //初始化完畢關(guān)閉所有LED燈
  107.     ON_Timerout();                        //開啟定時器,1s一發(fā)數(shù)據(jù)
  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();  //每次發(fā)送一包數(shù)據(jù)后,進入接收狀態(tài),等待B模塊應(yīng)答
  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. // 功能描述 : 無線接收數(shù)據(jù)中斷入口
  131. // 輸入?yún)?shù) : 無
  132. // 返回參數(shù) : 無
  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中斷標(biāo)志位
  179.         
  180.         LSD_RF_RxPacket(Rxbuffer);   //接收數(shù)據(jù)包
  181.         if((Rxbuffer[2]==2)&&(Rxbuffer[5]==5))
  182.         {
  183.             LEDONBIT(LED1);                                //狀態(tài)指示燈
  184.             DelayMs(60);
  185.             LEDOFFBIT(LED1);                               //狀態(tài)指示燈
  186.             R_Cnt++;
  187.         }
  188.                 LPM3_EXIT;  
  189.     }
  190.     P1IFG=0;
  191. }
  192. ////////////////////////////////////////////////////////////////////////////////
  193. // 功能描述 : 超時定時器
  194. // 輸入?yún)?shù) : 無
  195. // 返回參數(shù) : 無
  196. // 說明     : 用于誤喚醒,或喚醒失敗后超時時間到后重新進入WOR
  197. ////////////////////////////////////////////////////////////////////////////////
  198. #pragma vector = TIMER1_A0_VECTOR
  199. __interrupt void Timer1_A0_ISR()
  200. {
  201.     LEDONBIT(LED3);//發(fā)送狀態(tài)指示燈
  202.     G_LoRaConfig.PayloadLength = 20;
  203.     LSD_RF_SendPacket(TXbuffer);//發(fā)送30個字節(jié)數(shù)據(jù)測試
  204.     T_Cnt++;
  205.     LEDOFFBIT(LED3);//發(fā)送狀態(tài)指示燈
  206.     LPM3_EXIT;
  207. }
復(fù)制代碼

所有資料51hei提供下載:
SX1276_EasyLink_2F717NXX按鍵.zip (398.45 KB, 下載次數(shù): 18)


回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表