sx1276可以參考下
單片機源程序如下:
- ////////////////////////////////////////////////////////////////////////////////
- // 文件名: main_tx/rx
- // 版本: v1.0
- // 工作環境: IAR v5.30
- // 作者: 于海波
- // 生成日期: 2013.12
- // 功能: A發送包給B,黃燈閃爍,B模塊接到數據紅燈閃爍,B將數據回傳給A模塊,
- // A接到數據后紅燈閃爍, 循環次操作,
- // 相關文件:
- // 修改日志:
- ////////////////////////////////////////////////////////////////////////////////
- #include <string.h>
- #include <stdint.h>
- #include <stdbool.h>
- #include "driver.h"
- #include "sx1276-f4152-Hal.h"
- #include "LSD_RF_SX1276.h"
- #include "LSD_RF_APPrf.h"
- #include "clock.h"
- //===================================定義變量===================================================
- long SysTick = 0;
- 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};
- uint8_t WakeAddr[8]={5,6,7,8,9,10,11,7};
- uint8_t Rxbuffer[64];
- //===================================函數聲明===================================================
- //===============================================================================================
- ////////////////////////////////////////////////////////////////////////////////
- // 功能描述 : 主函數
- // 輸入參數 : 無
- // 返回參數 : 無
- // 說明 :
- ////////////////////////////////////////////////////////////////////////////////
- typedef enum{
- Nope,
- B1080bps,//BW = 125KHz SF = 9 CR = 4_6
- B4000bps,//BW = 125KHz SF = 7 CR = 4_5
- B14000bps,//BW = 500KHz SF = 7 CR = 4_6
- }t_Baudrate;
- t_Baudrate Baudrate = Nope;
- unsigned char *point;
- unsigned char LCD_p[9] = {0,0,0,0,0,8,0,1,0xff};
- int T_Cnt = 0;
- int R_Cnt = 0;
- bool RESET_Flag = false;
- void main( void )
- {
- WDTCTL = WDTPW + WDTHOLD; // 關閉看門狗
- platform_init(); //測試底板初始化
- LEDONBAND(LEDALL); //初始化過程點亮所有LED燈
- KEYBOARD_DIR &=~ (KEY_S1+KEY_S2);
- KEYBOARD_IFG &=~ (KEY_S1+KEY_S2);
- KEYBOARD_IES |= (KEY_S1+KEY_S2);
- KEYBOARD_IE |= (KEY_S1+KEY_S2);
-
- point = (unsigned char *)(&(G_LoRaConfig.BandWidth));
- flash_read(FLASH_ADDRESS_D,point,3*2);
- if(G_LoRaConfig.BandWidth>BW500KHZ){
- G_LoRaConfig.BandWidth=BW125KHZ;
- G_LoRaConfig.SpreadingFactor = SF09;
- G_LoRaConfig.CodingRate = CR_4_6;
- flash_seg_clear(FLASH_ADDRESS_D);//寫之前必清除
- flash_write(FLASH_ADDRESS_D,point,3*2);
- }
- if(G_LoRaConfig.BandWidth==BW500KHZ){
- Baudrate = B14000bps;
- LCD_p[8] = 1;
- LCD_p[7] = 4;
- LCD_p[6] = 0;
- LCD_p[5] = 0;
- LCD_p[4] = 0;
- }
- else{
- if(G_LoRaConfig.SpreadingFactor==SF07){
- Baudrate = B4000bps;
- LCD_p[8] =0xff;
- LCD_p[7] = 4;
- LCD_p[6] = 0;
- LCD_p[5] = 0;
- LCD_p[4] = 0;
- }
- else{
- Baudrate = B1080bps;
- LCD_p[8] =0xff;
- LCD_p[7] = 1;
- LCD_p[6] = 0;
- LCD_p[5] = 8;
- LCD_p[4] = 0;
- }
- }
- lcd_init();
- LCD_Disp_ALL_Num(LCD_p);
- //配置各個參數
- G_LoRaConfig.LoRa_Freq = 470000000; //中心頻點470MHz
- //G_LoRaConfig.BandWidth = BW125KHZ; //BW = 125KHz
- //G_LoRaConfig.SpreadingFactor = SF09; //SF = 9
- //G_LoRaConfig.CodingRate = CR_4_6; //CR = 4/6
- G_LoRaConfig.PowerCfig = 15; //19±dBm
- G_LoRaConfig.MaxPowerOn = true;
- G_LoRaConfig.CRCON = true; //CRC開啟
- G_LoRaConfig.ExplicitHeaderOn = true; //Header開啟
- G_LoRaConfig.PayloadLength = 20; //數據包長度
-
- if(SX127x_init()!=NORMAL) WDTCTL=0; //無線模塊初始化失敗復位
- KEYBOARD_IE |= (KEY_S1+KEY_S2);
- _EINT(); //開總中斷
- LEDOFFBIT(LEDALL); //初始化完畢關閉所有LED燈
- ON_Timerout(); //開啟定時器,1s一發數據
- while(1)
- {
- LPM3;
- if(RESET_Flag==true){
- flash_seg_clear(FLASH_ADDRESS_D);//寫之前必清除
- flash_write(FLASH_ADDRESS_D,point,3*2);
- WDTCTL = 0;//RESET
- }
-
- LSD_RF_RXmode(); //每次發送一包數據后,進入接收狀態,等待B模塊應答
- LCD_p[0] = T_Cnt%10;
- LCD_p[1] = T_Cnt/10%10;
- LCD_p[2] = R_Cnt%10;
- LCD_p[3] = R_Cnt/10%10;
- LCD_Disp_ALL_Num(LCD_p);
- if(T_Cnt>=100)
- T_Cnt = 0;
- if(R_Cnt>=100)
- R_Cnt = 0;
- }
- }
- ////////////////////////////////////////////////////////////////////////////////
- // 功能描述 : 無線接收數據中斷入口
- // 輸入參數 : 無
- // 返回參數 : 無
- // 說明 :
- ////////////////////////////////////////////////////////////////////////////////
- #pragma vector = PORT1_VECTOR
- __interrupt void port1_isr(void)
- {
- if(KEYBOARD_IFG&(KEY_ALL)){
- char Keys_Flag = KEYBOARD_IFG&(KEY_ALL);
- switch(Keys_Flag&(KEY_S1|KEY_S2)){
- case KEY_S1:
- switch(Baudrate){
- case B1080bps:
- G_LoRaConfig.BandWidth = BW125KHZ; //BW = 125KHz
- G_LoRaConfig.SpreadingFactor = SF07; //SF = 9
- G_LoRaConfig.CodingRate = CR_4_5; //CR = 4/6
- Baudrate = B4000bps;
- break;
- case B4000bps:
- G_LoRaConfig.BandWidth = BW500KHZ; //BW = 125KHz
- G_LoRaConfig.SpreadingFactor = SF07; //SF = 9
- G_LoRaConfig.CodingRate = CR_4_6; //CR = 4/6
- Baudrate = B14000bps;
- break;
- case B14000bps:
- default:
- G_LoRaConfig.BandWidth = BW125KHZ; //BW = 125KHz
- G_LoRaConfig.SpreadingFactor = SF09; //SF = 9
- G_LoRaConfig.CodingRate = CR_4_6; //CR = 4/6
- Baudrate = B1080bps;
- break;
- }
- RESET_Flag = true;
- LPM3_EXIT;
- break;
- case KEY_S2:
- T_Cnt = 0;
- R_Cnt = 0;
- break;
- default:
- break;
- }
- KEYBOARD_IFG &= ~KEY_ALL;
- return;
- }
- if(DIO0_IFG) //判斷是否是DIO0引起的中斷
- {
- DIO0_IFG = 0; //清除DIO0中斷標志位
-
- LSD_RF_RxPacket(Rxbuffer); //接收數據包
- if((Rxbuffer[2]==2)&&(Rxbuffer[5]==5))
- {
- LEDONBIT(LED1); //狀態指示燈
- DelayMs(60);
- LEDOFFBIT(LED1); //狀態指示燈
- R_Cnt++;
- }
- LPM3_EXIT;
- }
- P1IFG=0;
- }
- ////////////////////////////////////////////////////////////////////////////////
- // 功能描述 : 超時定時器
- // 輸入參數 : 無
- // 返回參數 : 無
- // 說明 : 用于誤喚醒,或喚醒失敗后超時時間到后重新進入WOR
- ////////////////////////////////////////////////////////////////////////////////
- #pragma vector = TIMER1_A0_VECTOR
- __interrupt void Timer1_A0_ISR()
- {
- LEDONBIT(LED3);//發送狀態指示燈
- G_LoRaConfig.PayloadLength = 20;
- LSD_RF_SendPacket(TXbuffer);//發送30個字節數據測試
- T_Cnt++;
- LEDOFFBIT(LED3);//發送狀態指示燈
- LPM3_EXIT;
- }
復制代碼
所有資料51hei提供下載:
SX1276_EasyLink_2F717NXX按鍵.zip
(398.45 KB, 下載次數: 18)
2018-10-21 15:04 上傳
點擊文件名下載附件
|