STM32L0CubeMX之lora编程笔记

发布者:影子猎人最新更新时间:2019-07-29 来源: eefocus关键字:STM32L0CubeMX  lora  编程笔记 手机看文章 扫描二维码
随时随地手机看文章

该笔记主要是记录使用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)


};


关键字:STM32L0CubeMX  lora  编程笔记 引用地址:STM32L0CubeMX之lora编程笔记

上一篇:关于STM32 64引脚和48引脚VDDA电压值
下一篇:STM32L0系列串口重定义的方法

推荐阅读最新更新时间:2024-11-06 10:22

51单片机C语言学习笔记2: 51单片机编程下载方式
编译完程序,要下载,当然离不开编程器。当时候上课的书上也没讲到下载的办法,做试验也只是在试验箱上下载完事。要自己弄的话,要怎么才能玩得转呢?在网上查了一下,要玩转单片机,要具备三样东西:51芯片+编程器+仿真器,当然仿真器是不必要的。记得我的第一台编程器是TOP851,可以花了300多大洋,当时还是自费的。记得我自己买的第一颗51单片机芯片是正宗的Intel 8051,可以TOP851不支持Intel的51芯片,可郁闷啦,连51单片机的鼻祖也不支持,可想而知后来的人都过了河拆了桥J 后来又再买了一块芯片:AT89C51,当时候还有点疑惑,我学的是8051啊,可是这是89C51啊?书上没讲这芯片,怎么办呢?现在想想可知多么可笑,但这
[单片机]
渝芯微明年一季度芯片量产,对标LoRa
▲李春宏 ? 研发 中心忙碌的工作人员。上游新闻记者张锦旗 摄   一个个老旧的办公桌上,放着的是一台台先进的电脑。电脑前的每一张面孔都显得非常年轻,可他们每一位都是被称为“智脑”的 芯片 设计人才。在此前的半年时间里,他们一直埋头专注于默默开发。   他们仔细权衡优化创业城市,没有放到北上广,而是放在了 重庆 ,放在了沙坪坝,放在了大学城。   半年之后,公司自主研发生产的第一款物联网“中国芯”,就将在重庆亮相。中国,将由此摆脱物联网芯片基本依靠国外进口的局面,真正拥有自己自主知识产权的“中国芯”。“我们的物联网芯片拥有自主知识产权。”重庆 渝芯 微智能技术研究院副总裁李春宏说。   扔下高薪厚禄 这群年
[半导体设计/制造]
推动基于LoRa®解决方案 Semtech加入行业组织CABA
高性能模拟和混合信号半导体产品及先进算法领先供应商Semtech Corporation日前宣布:加入大陆自动化建筑协会(CABA),该组织是一个促进智能家居和楼宇技术进步的国际性非营利行业协会。通过加入该协会,Semtech将其经验证的LoRa®器件和物联网(IoT)无线射频技术(LoRa技术)引入到CABA广泛的智能家居和楼宇技术组合中。 “我们的使命是让组织和个人都能够就家居和楼宇中的技术集成做出更明智的决策,”CABA总裁兼首席执行官Ronald J. Zimmer说。“Semtech的LoRa技术可以简化物联网设备的部署并加快上市时间。通过加入CABA,Semtech现在将有更多的机会接触到我们致力于智能家居和
[物联网]
推动基于<font color='red'>LoRa</font>®解决方案 Semtech加入行业组织CABA
Semtech和Ubicquia采用基于LoRa智能电网物联网方案照亮街道
2018年6月,加利福尼亚州卡马里奥市 –高性能模拟和混合信号半导体及先进算法领先供应商 Semtech Corporation (Nasdaq:SMTC)宣布:致力于在“智慧城市”部署应用中为移动运营商、公用事业和照明制造商提供高性价比、模块化解决方案的Ubicquia公司,已将Semtech的 LoRa®器件和无线射频技术 (LoRa Technology)集成到其Ubicell路灯网关模块中。 路灯代表了城市可支配能源预算很高的一部分,在一些情况下最高可至40%以上。关于电网的研究估计:通过采用带传感器、网关和LED灯泡的智能电网物联网(IoT)解决方案,将为城市提供巨大的财务回报以及宝贵的数据。Ubicquia新推出
[物联网]
Semtech和Ubicquia采用基于<font color='red'>LoRa</font>智能电网物联网方案照亮街道
西门子PLC维修不能与笔记本联机编程解决办法
1、将CPU打到STOP位置试试 2、关闭所有的软件,尤其是占用通讯口的软件,只保留200plc编程软件。 3、要与西门子最新推出的S7-200CNCPU正常通信,必须满足以下条件: 使用编程软件STEP7-Micro/WINV4.0SP3以上版 将编程软件的工作环境设置为中文状态。 如果不满足上述条件,会在下载通信时遇到82号错误。如果已经满足上述条件而仍然遇到错误,请检查是否其他原因。 4、使用原装USB/PPI电缆,需要将编程软件升级到当前发布的最新版本,并且在设置PG/PC接口的时候要选择USB,非原装USB电缆需要正确选择COM口(电脑-属性-硬件-设备管理器-端口) 5、在PG/PC通信属性时,COM口的符
[嵌入式]
Semtech的LoRa技术携手Chipsafer将牧场连接至云端
电子网消息,高性能模拟和混合信号半导体产品及先进算法领先供应商Semtech Corporation日前宣布:专注于为畜牧管理提供物联网(IoT)服务的初创公司Chipsafer,使用了Semtech的LoRa®器件和无线RF技术(LoRa技术)来开发其牧场解决方案平台。 Chipsafer的传感器通过使用基于LoRaWAN的网关和LoRaWANTM协议来转发牲畜身上的传感器数据,包括身体运动、当地湿度、温度和地理位置。 Chipsafer联合LORIOT、美国太阳能学会(SES)和欧洲太空总署(European Space Agency),在肯尼亚的纳米比亚和卢森堡为其畜牧管理解决方案完成了3个试点项目。在项目进行期间,
[网络通信]
为什么说现阶段的NB-IoT可能在为LoRa做嫁衣?
  如何看待未来三年 NB-IoT 芯片和模组的市场发展,唯一能够回答的是—— NB-IoT 一定是风口。下面就随手机便携小编一起来链接看一下相关内容吧。   1.2018年6月,是 NB-IoT 模组厂商规模进入市场最佳时间点;   2.有观点说:NB-IoT是 LoRa 的嫁衣。笔者认为, LoRa 顶多是与NB-IoT“互补”,不被NB-IoT消灭就算是万幸了。   至少,在NB-IoT产业链的主导者们看来,NB-IoT并不想与 LoRa 树敌,只是LoRa背后的小动作太多,但LoRa也有其价值和客户需求。   3.从长远看,NB-IoT是风口,这中间需要网络、芯片模组、平台(连接、使能)等多方共同合力。   comobs
[手机便携]
共享经济理念的推动下诞生运营商级LoRa网络CLAA
低功耗广域网络(LPWAN)的问世让海量广泛布局的低成本、低功耗传感设备数据传输成为可能。在主流运营商以极大热情规划部署NB-IoT的同时,基于LoRa的广域网也在不断商用化落地,由于其标准化、灵活部署、自主可控和大量商用经验,被认为是各类政企行业客户部署专用和私有LPWAN网络的最优选择。当然,技术并无优劣之分,关键看其适用场景和推动其商用的路径,在共享经济理念的推动下,适用于政企行业专用网络场景的LoRa一样可以构建一张全国运营商级的低功耗广域网络。 接连创造,但并未一帆风顺接连落地 LPWAN补齐了物联网的连接方案的一个短板,不过,仅仅技术上做好准备并不是充要条件,在实施过程中还会碰到大量的不确定性,高度碎片化就是其
[网络通信]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved