你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32开发笔记27:STM32L0低功耗设计——RTC模块1秒时钟的产生方法

[复制链接]
STMCU小助手 发布时间:2021-11-16 23:00
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 基本区别:一张图说明:

20180112112241419.png




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

20180112112305364.png



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

20180112112332709.png


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


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

注意事项:

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

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

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

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

5、  继之前的数据传输后,无线设备可以通过手动设置成休眠模式或是写入一些
数据到 FIFO 为下次发送做准备

6、  LoRaTM 发送数据在 FIFO 填充

数据接收流程:
注意事项:

20180112112429768.png




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

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

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

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

20180112112455548.png


STM32Cube软件配置:
SPI接口配置:
原理图中使用到的SPI接口为SPI1 J

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

数字IO管脚配置:
输入模式

20180112112532976.png



生成工程代码:
SPI的主要接口函数为:

20180112112556922.png


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

  1. uint8_t SpiInOut( uint8_t outData )

  2. {

  3.          uint8_tretemp;



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



  5.          returnretemp;



  6. }
复制代码

SPI通讯接口函数


  1. void SX1276Write( uint8_t addr, uint8_tdata )

  2. {

  3.    SX1276WriteBuffer( addr, &data, 1 );

  4. }



  5. void SX1276Read( uint8_t addr, uint8_t*data )

  6. {

  7.    SX1276ReadBuffer( addr, data, 1 );

  8. }



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

  10. {

  11.    uint8_t i;



  12.    //NSS = 0;

  13.   HAL_GPIO_WritePin( RF_NSS_GPIO_Port, RF_NSS_Pin, GPIO_PIN_RESET );



  14.   SpiInOut( addr | 0x80 );



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

  16.     {

  17.        SpiInOut( buffer<i> </i>);

  18.     }



  19.    //NSS = 1;

  20.    HAL_GPIO_WritePin( RF_NSS_GPIO_Port, RF_NSS_Pin, GPIO_PIN_SET );

  21. }



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

  23. {

  24.    uint8_t i;



  25.    //NSS = 0;

  26.     HAL_GPIO_WritePin( RF_NSS_GPIO_Port, RF_NSS_Pin, GPIO_PIN_RESET );



  27.    SpiInOut( addr & 0x7F );



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

  29.     {

  30.        buffer = SpiInOut( 0 );

  31.     }



  32.    //NSS = 1;

  33.     HAL_GPIO_WritePin( RF_NSS_GPIO_Port, RF_NSS_Pin, GPIO_PIN_SET );

  34. }



  35. void SX1276WriteFifo( uint8_t *buffer,uint8_t size )

  36. {

  37.    SX1276WriteBuffer( 0, buffer, size );

  38. }



  39. void SX1276ReadFifo( uint8_t *buffer,uint8_t size )

  40. {

  41.    SX1276ReadBuffer( 0, buffer, size );

  42. }
复制代码

数字I/O接口函数:

中断函数

数字IO管脚功能配置
外部中断上升沿触发,下拉

1278扩频模块参数修改
在文件sx1276-LoRa.c中,由该结构体初始化模块参数
  1. typedef struct sLoRaSettings

  2. {

  3.    uint32_t RFFrequency;

  4.    int8_t Power;

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

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

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

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

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

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

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

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

  13.    uint8_t HopPeriod;                 // Hops every frequency hopping period symbols

  14.    uint32_t TxPacketTimeout;

  15.    uint32_t RxPacketTimeout;

  16.    uint8_t PayloadLength;

  17. }tLoRaSettings;


复制代码

例:

  1. tLoRaSettings LoRaSettings =

  2. {

  3.    433000000,        // RFFrequency

  4.    20,               // Power

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

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

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

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

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

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

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

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

  13.    4,                // HopPeriodHops every frequency hopping period symbols

  14.    300,              // TxPacketTimeout

  15.    300,              //RxPacketTimeout

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

  17. };
复制代码




收藏 评论0 发布时间:2021-11-16 23:00

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版