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)
|