LoRa终端节点开发之旅④ - - LoRa驱动_PingPong代码分析

LoRa终端节点开发之旅④ - - LoRa驱动_PingPong代码

  • 4.1 前言
  • 4.2 PingPong Project Structure
    • 4.2.1 Doc
    • 4.2.2 Drivers/BSP/Components
    • 4.2.3 Drivers/BSP/stm32l0xx_nucleo
    • 4.2.4 Drivers/BSP/sx1276mb1mas
    • 4.2.5 Drivers/CMSIS...Drivers/MDK-ARM
    • 4.2.6 Drivers/STM32L0xx_HAL_Driver
    • 4.2.7 Project/PingPong
  • 4.3 几个函数分析
    • 4.3.1 Radio.Init( &RadioEvents );
    • 4.3.2 Radio.SetChannel( RF_FREQUENCY );
    • 4.3.3Radio.SetTxConfig(......)/Radio.SetRxConfig(......);
    • 4.3.4Radio.Rx( RX_TIMEOUT_VALUE );

4.1 前言

你好! 欢迎来到【LoRa终端节点开发之旅④ - - LoRa驱动_PingPong代码分析】!回顾上一集,相信你已经有了一套可编译的LoRa工程PingPong代码!接下来,为了让工程看的更加方便,把工程里面带减号的文件删掉,这样显得更方便些

4.2 PingPong Project Structure

关于PingPong代码,分为以下几个部分


LoRa终端节点开发之旅④ - - LoRa驱动_PingPong代码分析_第1张图片

4.2.1 Doc

readme文件,里面包含了该工程的功能,使用方法,部分文件说明等等

4.2.2 Drivers/BSP/Components

SX127x/SX126x的驱动程序;如:里面主要是包含了LoRa芯片参数设置的一些内容,包括初始化,工作模式,频率,扩频因子等等…(LoRa参数具体含义说明,将于下一篇博客介绍)

4.2.3 Drivers/BSP/stm32l0xx_nucleo

关于stm32l0xx_nucleo非LoRa相关的一些功能,如ADC、LED等等 ;就算把这个文件及文件夹删掉,工程仍可用,编译没问题

4.2.4 Drivers/BSP/sx1276mb1mas

SX127x/SX126x的驱动程序;如:里面主要是关于LoRa IO功能及射频相关的函数定义;

4.2.5 Drivers/CMSIS…Drivers/MDK-ARM

system_stm32l0xx.c、startup_stm32l053xx.s:有经验的STM32大佬一看就知道这是STM32官方系统文件及汇编底层驱动文件;

4.2.6 Drivers/STM32L0xx_HAL_Driver

STM32 HAL库文件,STM32用起来方便,美滋滋!!!

4.2.7 Project/PingPong

包含了main函数之外,还包含了STM32一些功能的用法,如串口,SPI的初始化等等,都是用到4.2.6里面的HAL库…

4.3 几个函数分析

4.3.1 Radio.Init( &RadioEvents );

Radio.Init( &RadioEvents );

LoRa 芯片时间初始化,作用体现在while(1)循环里面,LoRa工作状态包含:发送完成、接收完成、发送超时、接收超时、接收错误。

4.3.2 Radio.SetChannel( RF_FREQUENCY );

Radio.SetChannel( RF_FREQUENCY );

设置LoRa芯片工作频率,EU869:欧洲国家868Mhz

4.3.3Radio.SetTxConfig(…)/Radio.SetRxConfig(…);

Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
                               LORA_SPREADING_FACTOR, LORA_CODINGRATE,
                               LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
                               true, 0, 0, LORA_IQ_INVERSION_ON, 3000 );
Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
                               LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
                               LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
                               0, true, 0, 0, LORA_IQ_INVERSION_ON, true );

发送/接收配置,走到底层你可以看到对应的函数原型及描述

void    ( *SetTxConfig )( RadioModems_t modem, int8_t power, uint32_t fdev,
                          uint32_t bandwidth, uint32_t datarate,
                          uint8_t coderate, uint16_t preambleLen,
                          bool fixLen, bool crcOn, bool freqHopOn,
                          uint8_t hopPeriod, bool iqInverted, uint32_t timeout );

mode:工作模式,LoRa芯片可工作在FSK模式/LoRa模式;
power:LoRa工作功率
fdev:FSK模式下设置,不考虑使用
bandwidth:带宽-125K、250K、500K
datarate:扩频因子
coderate: 编码率
preambleLen:前导码长度
fixLen:数据包长度是否固定
crcOn:是否启动CRC校验
freqHopOn:调频使能开关
hopPeriod:若启动调频,调频周期确定
iqInverted:反转IQ信号(笔者也没搞过呀)
timeout:设置超时时间(一般是接收超时时间)

4.3.4Radio.Rx( RX_TIMEOUT_VALUE );

Radio.Rx( RX_TIMEOUT_VALUE );

Rx接收超时时间,一旦经过了这个时间接收不到数据,就产生接收超时中断,无法接收;
将RX_TIMEOUT_VALUE 设置成0,就不会产生接收超时,一直等待接收!

你可能感兴趣的:(LoRa终端节点开发之旅)