历史上的今天
返回首页

历史上的今天

今天是:2025年07月29日(星期二)

正在发生

2019年07月29日 | STM32L0CubeMX之lora编程笔记

2019-07-29 来源:eefocus

该笔记主要是记录使用STM32L0xx,MCU ,升特LORA无线扩频芯片,基于SPI的编程笔记,希望能帮助到这方面有所需要的人。


Sx1278LORA扩频模块基本参数:


工作频率 :137- 525 MHz


扩散因子 :6 – 12


带宽:7.8 - 500 kHz


有效比特率:018 - 37.5 kbps


灵敏度:-111 到 -148 dBm


工作电压:2.0-3.6V


发射功率:+20dBm(100mW)


通讯距离:10km-15km(500bps)(无遮挡)


数据接口:SPI


调制方式:LoRa/FSK/OOK


工作温度:-20- 85°C


以上部分技术参数名词解释:


扩散因子:


LoRaTM 扩频调制是通过展现有效信息的每个位来进行通信的,这种扩频信息的发送速率需要参考符率,这种公称符率与芯片速率之间的比率就是扩散因子,展现了发送出去的符号总数每一位的信息


信号带宽:


增大信号的带宽,可以使数据的有效率提高,即能使传输时间减少,不过会使灵敏度变小。


调制方式:


LoRaTM调质解调器使用的是扩频调制技术和向前纠错技术,它的无线通信链路比传统基于 FSK 或 OOK 调制器有更远传播范围和更加健壮。


频率跳跃扩频技术(FHSS):


FHSS方案的工作原理为:每个LoRaTM数据包的部分内容通过在微控制器MCU管理的频率查询表中选取的跳频信道进行发送。在预定的跳频周期结束之后,发射机和接收机切换到跳频预定义列表中的下一个信道,以便继续发送和接收数据包的下一部分内容。在任一信道内的驻留时间由FreqHoppingPeriod决定,他是符号长度的整数倍。


SX1276/77/78/79 基本区别:一张图说明:


主要工作模式功耗参考表:一张表说明:

LORA调制模式下的运行方式:

LORA 调制模式可以通过设置寄存器 RegOpMode 的 LongRangeMode位来进行选择:

LORA 调制解调器发送和接收工作流程:

 

数据发送流程:

在发送模式下,在需要发送数据时才开启RF,PLL,和 PA 模块,这样可以减小功耗;


注意事项:


1、 静态寄存器只有在休眠模式、待机模式和 FSTX 模式下才能被使用。


2、  LORA 调制的 FIFO 只有在待机模式下才能被写满。


3、  数据是在发送 TX 模式请求后才发送


4、  数据发送结束后,TxDone 中断发出,设备进入待机模式


5、  继之前的数据传输后,无线设备可以通过手动设置成休眠模式或是写入一些

数据到 FIFO 为下次发送做准备


6、  LoRaTM 发送数据在 FIFO 填充


数据接收流程:

注意事项:

LORA接收模式工作在两种不同的模式

1. 单个接收模式


在这种模式下,调制解调器会在一个给定的时间窗口检测数据包的序文,如果在最后一个时间窗口都没有找到一个序文,那么芯片本身就会产生一个RxTimenout 中断然后回到待机模式。


 

2.连续接收模式


在连续接收模式下,调制解调器会一直扫描信道而获取一个有效的序文数据包,调制解调器会一直检测和追踪信道上的序文,直到有效数据包被接收,然后继续等待下一个序文如果序文长度超过了寄存器RegPreambleMsb 和 RegPreambleLsb 中设置的预期值,那么这个序文数据包就会被抛弃,然后重新开始序文的搜索,然而,这种情况不会产生中断标志位。与单个接收模式不同,连续接收模式下,当产生超时中断时,设备不会进入待机模式。


CAD(channel activity detection):

扩频技术的使用不能解决信道是否被其他lora 信号占用的问题,RSSI 也无法解决这个问题,为此,CAD 就是用于解决检测信道是是否有其他 LORA 信号问题工作模式。


数字 IO 管脚映射:

在 LORA 模式下有 6 个通用 IO 管脚,下表给出了这六个 IO 管脚的详细信息(跟寄存器RegDioMapping1 和寄存器 RegDioMapping2 的配置有很大关系)

STM32Cube软件配置:

SPI接口配置:

原理图中使用到的SPI接口为SPI1 J


配置为全双工主模式。在参数配置中,注意一下几点:


数字IO管脚配置:

输入模式


生成工程代码:

SPI的主要接口函数为:

1278编程:

1278复位步骤:

NRST = Low 低电平大于100uS, 然后NRST= High 高电平大于5mS 即可完成手动复位。


SPI接口说明:

SPI第一个数据字节为地址域,bit7 为读写控制位, “1” 表示写, “0” 表示读;bit(6-0)对应当前操作的寄存器地址。 在连续读写操作模式时, 寄存器会自动加“1” ,直到NSS脚被拉高;特别注意: FIFO操作时, 寄存器地址不会自动增加, 而是FIFO内的缓存地址。 寄存器的详细说明请参考芯片数据手册的“寄存器说明章节” 。


SPI接口C程序:

在sx1276-Hal.c和spi.c中定义


 


 


通讯接口函数使用HAL库中的:HAL_SPI_TransmitReceive()


uint8_t SpiInOut( uint8_t outData )


{


         uint8_tretemp;


        


         HAL_SPI_TransmitReceive(&hspi1,&outData,&retemp,1,1000);


        


         returnretemp;


        


}


 


SPI通讯接口函数

 


void SX1276Write( uint8_t addr, uint8_tdata )


{


   SX1276WriteBuffer( addr, &data, 1 );


}


 


void SX1276Read( uint8_t addr, uint8_t*data )


{


   SX1276ReadBuffer( addr, data, 1 );


}


 


void SX1276WriteBuffer( uint8_t addr,uint8_t *buffer, uint8_t size )


{


   uint8_t i;


 


   //NSS = 0;


  HAL_GPIO_WritePin( RF_NSS_GPIO_Port, RF_NSS_Pin, GPIO_PIN_RESET );


 


  SpiInOut( addr | 0x80 );


   


          for( i = 0; i < size; i++ )


    {


       SpiInOut( buffer[i] );


    }


 


   //NSS = 1;


   HAL_GPIO_WritePin( RF_NSS_GPIO_Port, RF_NSS_Pin, GPIO_PIN_SET );


}


 


void SX1276ReadBuffer( uint8_t addr,uint8_t *buffer, uint8_t size )


{


   uint8_t i;


 


   //NSS = 0;


    HAL_GPIO_WritePin( RF_NSS_GPIO_Port, RF_NSS_Pin, GPIO_PIN_RESET );


 


   SpiInOut( addr & 0x7F );


 


   for( i = 0; i < size; i++ )


    {


       buffer[i] = SpiInOut( 0 );


    }


 


   //NSS = 1;


    HAL_GPIO_WritePin( RF_NSS_GPIO_Port, RF_NSS_Pin, GPIO_PIN_SET );


}


 


void SX1276WriteFifo( uint8_t *buffer,uint8_t size )


{


   SX1276WriteBuffer( 0, buffer, size );


}


 


void SX1276ReadFifo( uint8_t *buffer,uint8_t size )


{


   SX1276ReadBuffer( 0, buffer, size );


}


 


数字I/O接口函数:

 


中断函数


 


数字IO管脚功能配置

外部中断上升沿触发,下拉


 


 


1278扩频模块参数修改

在文件sx1276-LoRa.c中,由该结构体初始化模块参数


 


typedef struct sLoRaSettings


{


   uint32_t RFFrequency;


   int8_t Power;


   uint8_t SignalBw;                  // LORA [0: 7.8 kHz, 1: 10.4 kHz, 2: 15.6 kHz, 3: 20.8 kHz, 4: 31.2 kHz,


                                        // 5: 41.6 kHz, 6: 62.5 kHz, 7:125 kHz, 8: 250 kHz, 9: 500 kHz, other: Reserved] 


   uint8_t SpreadingFactor;           // LORA [6: 64, 7: 128, 8: 256, 9: 512, 10: 1024, 11: 2048, 12:4096  chips]


   uint8_t ErrorCoding;               // LORA [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8]


   bool CrcOn;                        // [0: OFF, 1: ON]


   bool ImplicitHeaderOn;             // [0: OFF, 1: ON]


   bool RxSingleOn;                   // [0: Continuous, 1 Single]


   bool FreqHopOn;                     // [0: OFF, 1: ON]


   uint8_t HopPeriod;                 // Hops every frequency hopping period symbols


   uint32_t TxPacketTimeout;


   uint32_t RxPacketTimeout;


   uint8_t PayloadLength;


}tLoRaSettings;


 


例:


tLoRaSettings LoRaSettings =


{


   433000000,        // RFFrequency


   20,               // Power


    9,                // SignalBw [0: 7.8kHz, 1: 10.4kHz, 2: 15.6 kHz, 3: 20.8 kHz, 4: 31.2 kHz,


                     // 5: 41.6 kHz, 6: 62.5 kHz, 7: 125 kHz, 8: 250 kHz, 9: 500 kHz, other:Reserved]


    7,                // SpreadingFactor [6: 64, 7:128, 8: 256, 9: 512, 10: 1024, 11: 2048, 12: 4096  chips]


   2,                // ErrorCoding[1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8]


   true,             // CrcOn [0:OFF, 1: ON]


   false,             // ImplicitHeaderOn [0: OFF, 1: ON]


   1,                // RxSingleOn[0: Continuous, 1 Single]


   0,                // FreqHopOn [0:OFF, 1: ON]


   4,                // HopPeriodHops every frequency hopping period symbols


   300,              // TxPacketTimeout


   300,              //RxPacketTimeout


   128,               //PayloadLength (used for implicit header mode)


};


推荐阅读

史海拾趣

American Power Management Inc公司的发展小趣事

随着技术的成熟,APMI开始着手市场拓展。公司积极与各大电子制造商合作,为其提供定制的电源管理解决方案。同时,APMI还加大了品牌宣传力度,通过参加行业展会、发布技术白皮书等方式,提高品牌知名度和影响力。凭借卓越的产品性能和完善的售后服务,APMI在市场上赢得了良好的口碑,客户群体不断扩大。

E-tec Interconnect Ltd公司的发展小趣事

在电子行业快速发展的背景下,E-tec始终保持对技术创新的关注。他们投入大量资金进行研发,不断推出新产品和新技术。例如,他们成功开发了一种新型的微型连接器,该连接器具有体积小、传输速度快、抗干扰能力强等优点,受到了市场的热烈欢迎。此外,E-tec还注重产品升级和换代,确保产品始终保持在行业前列。

GradConn Ltd公司的发展小趣事

GradConn Ltd的创立初期,公司便明确了其专注于电子连接器和同轴电缆组件的市场定位。这一战略选择使GradConn能够迅速在通讯、工业、医疗和汽车等领域建立起稳定的客户基础。通过不断研发创新,GradConn推出了一系列高质量的产品,如板对板连接器、电缆组件连接器以及SIM卡连接器等,满足了市场对精密、可靠连接解决方案的迫切需求。

Advantech公司的发展小趣事

在电子行业的快速发展中,GradConn也面临着诸多挑战,如市场竞争加剧、技术更新换代加速等。然而,公司凭借敏锐的市场洞察力和持续的创新精神,不断克服这些挑战,实现了持续发展。GradConn不仅关注当前的市场需求,还积极预测未来的技术趋势,提前布局新产品研发。这种前瞻性的战略眼光使GradConn能够在激烈的市场竞争中保持领先地位,并持续为客户提供优质的产品和服务。

台湾致强(FORT)公司的发展小趣事

致强科技深知员工是企业持续发展的关键。因此,公司自成立以来便注重企业文化的建设,积极营造和谐、关爱的工作氛围。公司管理层倡导“尊重人性”的理念,不仅为员工提供具有竞争力的薪酬福利,还通过EAP(员工协助计划)等方式关注员工的心理健康和生活需求。EAP项目的实施不仅帮助员工缓解了工作压力,还从多方面提升了员工的归属感和幸福感,为公司的长期发展奠定了坚实的人才基础。

锋鸣电子(Fengming)公司的发展小趣事

随着新能源和储能市场的快速发展,福斯特公司也积极拓展相关业务领域。公司不仅关注光伏材料的研发和生产,还将目光投向了动力电池及储能领域。例如,公司推出的铝塑复合膜产品已完成一期2000万平米扩产项目,并计划未来进一步拓展至动力电池及储能领域。这一举措不仅丰富了公司的产品线,还为公司带来了新的增长点和发展机遇。同时,福斯特还加强与新能源产业链上下游企业的合作,共同推动新能源和储能产业的发展。

问答坊 | AI 解惑

语音芯片

本帖最后由 paulhyde 于 2014-9-15 09:14 编辑 现在我在搞一个制作,要完成一个带有整点、半点语音报时的时钟,用什么语音芯片比较适合呢?有没有芯片不用自己预录而直接调用的啊?  …

查看全部问答>

电子设计大赛 电源类

本帖最后由 paulhyde 于 2014-9-15 09:02 编辑 请问哪位仁兄有PSPICE的最新软件啊?急需用来做电源类的仿真,谢谢!  …

查看全部问答>

代码阅读器第一个版本, 请大家试试

代码阅读器第一个版本,   请大家试试 http://code-search.kingofcoder.com/…

查看全部问答>

My Computer 下的my documents 文件夹

My Computer 下的my documents 文件夹可以修改这文件夹所在的路径吗?可以隐藏这个文件夹吗?希望知道的指教。谢谢…

查看全部问答>

关于BSP包的一些问题

前两天问了一下有关在BSP中添加流驱动的问题,经过几天的摸索,终于认识到以前的想法是错的,在这里说一下。 之前以为在BSP中添加流驱动程序,在注册表、dirs、smdk6410.pbcxml等文件修改好以后然后单独编译生成DLL文件才能够在定制系统时添加,现 ...…

查看全部问答>

新人问一个单片机汇编的东西~~

....                 MOV R1,#20 CONT_POP:                 INC R0               &n ...…

查看全部问答>

ubuntu 10.04以及10.10启动流程分析

ubuntu10.04以及10.10启动流程与以前的版本相比,启动流程有所不同。我也是初学,琢磨了一个下午,才理清他的工作流程。至于里面详细的脚本文件,简单的能看的懂,复杂的我也不太想去分析,我的目标是驱动程序的编写。 1.加电自检,BIOS找出存储设 ...…

查看全部问答>

我的超声波程序总是出错,不知道哪儿有问题,请高手帮忙解决!!!非常感谢

#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int sbit echo=P3^2;//接收端sbit clk=P2^0;//脉冲输入sbit lcdrs=P1^0;//液晶命令数据选择端sbit lcdrw=P1^1;//读写选择端sbit lcden=P1^2;// ...…

查看全部问答>