STM32开发 --- 正点原子LORA模块调试记录

本文详细介绍了正点原子LORA模块的优缺点,包括USART通信、参数配置及速度问题。深入解析了引脚功能、工作参数、传输模式,并分享了编程要点与调试经验,附带实际代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、故事前提背景

之前项目中使用原子哥的LORA模块,曾花了近半个月才调通使用(别笑,人笨就得工夫多)。

近日在项目的显示板第9板中修改电路板后,  出现问题:LORA模块不能接收. 

重查LORA资料, 发觉之前刨得很熟, 调试了半个月的老朋友,变陌生人了!  需重新学习熟悉.  归结原因, 是之前没整理好资料, 以使后来方便迅速翻查熟悉。

目录

一、正点原子 LORA模块 优缺点

二、引脚解释

三、工作参数 

四、传输模式

五、编程要点:


一、正点原子 LORA模块 优缺点

原子哥家的LORA模块, 有插针版、邮票孔版,使用上:电气参数、代码一样。插针版用排线直连开发板,邮票孔版嘛, 我当时画了个转接板配合调试.

先陈述一下模块使用过程中发现优缺点,放文章后怕没耐性翻到最后。

优点: 

  • USART通信,  收发简单,  配合DMA接收特省事, 。 
  • 把参数的配置也封装得很方便,usart发几条命令就成,调过安信可LORA模块的兄弟就明白了,那才叫苦。

缺点: 

  • 示例代码啰嗦,技术支持马虎。 原子哥,你别查我水表,我给你们多写几篇产品后期教程!但你们的示例代码真的.....。
  • 速度慢. 速度慢. 速度慢!  使用逻辑分析仪观察,  通信时每1ms只有1字节数据,其中数据占用86us, 其余900us是空白的!!!!!! 这一点特意问过技术,回复没干货,问了也白问。 另外,发送时, 数据不满足一包(56个字节)时, 会等待80ms才开始发送. 接收时, 也会有20ms等待时间!!!!!  你算算,100字节要多长时间。
  • 实测数据太少,最起码的商家做个通信距离数据实测吖,难道我们一千个人买这模块, 那不得做一千次测试??

二、引脚解释

  • MD0   配合AUX引脚切换工作模式, 【配置模式:MD0=1,AUX=0】、【通信模式:MD0=0,AUX=0】
  • AUX   同上
  • RXD   接开发板的 USARTx - TX引脚,注意:是TX不是RX
  • TXD   接开发板的 USARTx - RX引脚
  • GND
  • VCC 3.3~5.0 V

三、工作参数 

下面是我自己的几个重要参数, 请漠视右边的地址参数,因为我三个板子收发数据,重点看:模块配置软件操作说明.pdf

波特率:      115200                                  C板 模块地址:  1

校验位:      无                                          D板 模块地址:  2

空中速率:  19.2K                                     V板 模块地址:  3

休眠时间:  1S

信道:          5

发射功率:   20dBm

!!!要通信的模块,这几个参数必须一致,否则无法通信。!!!


四、传输模式

配合使用, 可以完成各种发送和接收工作.

1: 透明传输相同地址 、 相同信道

参数: A\B 地址一样,  信道一样, 速率一样

A发送:  AA BB CC DD EE 

B收到:  AA BB CC DD EE。

用户数据可以是字符或 16进制数据形式)


2: 定向传输: 指定地址 、指定信道 

发送格式: 高位地址+ 低位地址+ 信道+ 用户数据。

A设备, 地址:0x1400,信道:0x17, 23 信道 、433Mhz

B设备, 地址:0x1234,信道: 0x10,16 信道、 426Mhz

A发送:12 34 10 AA BB CC,其中 1234 为模块 B 的地址,10 为信道,

B收到: AA BB CC。


3:广播与数据监听:

地址: 0xFFFF

发送: 可以被相同信道上任意地址的模块收到

接收: 可以接收相同信道上任意地址模块发送的数据


五、编程要点:

编程顺序是:  1:GPIO初始化 > 2:USART初始化 > 3:模块参数写入 > 3:进入接收/发送模式

GPIO和USART的初始化没什么特别要注意的,就主要是参数写入和收发通信。

参数配置写入、接收、发送都是通过usart进行的,我们只要注意当前的工作模式、代码顺序和数据格式就可以了。

下面将以一段参数设置代码说明。如需要整个c文件的,留言邮箱,我已整理好很方便移植。没发在这上面,下载要积分。

这段代码的得来不易。MLGB,  示例代码中功能各种啰嗦,各种绕,好几个点没说明白,问过技术、问过Q群,都没得到准确的答案.害得调试时浪费了很多时间,从8月份断断续续调通,到现在11月初,才发现如何用代码配置参数.期间参数配置一直失败,几经摸索才发现各种暗雷。这个真的是大坑,一想起这个就火大,浪费了多少日子。

  • 进入配置模式MD0=1,AUX=0
  • 命令间延时>80ms,每个命令间要延时,应该是用于确定'包'的完整,经验:试过60ms配置失败,90ms成功
  • 重要:命令字符串须以 "\r\n" 结尾。示例代码中确以这个结尾,但没标示其之重要作用。
// 代码已调试正常使用, 原创版权, 随便复制, 不谢~~~

void vLora_Set(void)
{   
    char t = 110;                 // 延时时间,试过60ms失败
                                              
    vDelay_ms(t);        
    while(  (LORA_AUX_GPIOx ->IDR & LORA_AUX_PINx)!=0);     // 等待AUX为0,即非工作状态
    
    vMD0(1);                                   // 配置模式,MD0=1,AUX=0
    vSys_SetGPIO(LORA_AUX_GPIOx ,LORA_AUX_PINx ,G_MODE_OUT  ,G_OTYPE_PP ,G_OSPEED_50M ,G_PUPD_DOWN ,0);
    vAUX(0);     
                 
    vDelay_ms(t);   
    vLora_SendString("AT+WLRATE=5,5\r\n");     // 信道\速率  (0-31,410Mhz-441Mhz)     4:9.6Kbps  5:19.2Kbps(默认) 
    
    vDelay_ms(t);  
    vLora_SendString("AT+UART=7,0\r\n"  );     // 115200 无校检位
    
    vDelay_ms(t);  
    vLora_SendString("AT+WLTIME=0\r\n" );      // 体眠时间     0:1秒(默)  1:2秒
   
    vDelay_ms(t);  
    vLora_SendString("AT+TPOWER=3\r\n" );      // 发射功率   0:11dbm   1:14dbm  2:17dbm  3:20dbm(默认)
    
    vDelay_ms(t);  
    vLora_SendString("AT+CWMODE=0\r\n" );      // 工作模式   0:一般(默) 1:唤醒    2:省电    3:信号强度
    
    vDelay_ms(t);  
    vLora_SendString("AT+TMODE=0\r\n");        // 发送状态     0:透明(默) 1:定向
    
    vDelay_ms(t);  
    vLora_SendString("AT+ADDR=00,01\r\n" );   // 模块地址  16进制,高低位
    
    vDelay_ms(t);       
    vMD0(0);                                   // 退出配置模式, MDO=0,AUX=0
    vSys_SetGPIO(LORA_AUX_GPIOx ,LORA_AUX_PINx ,G_MODE_IN ,G_OTYPE_PP ,G_OSPEED_50M ,G_PUPD_DOWN ,0);   
    vDelay_ms(t);         
}

完整代码下载:

正点原子LORA代码重写: https://download.csdn.net/download/zhouml_msn/17264736


本篇完结,如有错漏,欢迎纠正~~

### STM32F103C8T6与正点原子LoRa模块的兼容性及使用方法 #### 一、硬件兼容性 STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,具有丰富的外设接口,能够很好地支持多种通信协议和外围设备。正点原子LoRa模块(如ATK-LORA-01)通常采用Semtech公司的SX127x系列芯片作为核心器件,该芯片广泛应用于低功耗广域网络(LPWAN),具备远距离传输能力[^3]。 为了实现两者的连接,需注意以下几点: - **电源管理**:确保STM32F103C8T6的工作电压范围与LoRa模块匹配。一般情况下,两者均工作于3.3V供电环境下。 - **信号电平转换**:如果存在逻辑电平不一致的情况,则可能需要额外增加电平转换电路来保护MCU输入端口免受过高电压损害。 - **实际连线配置**:根据具体应用需求完成UART/SPI/I²C等总线形式的数据交互设计[^4]。 #### 二、软件环境搭建 在开始编写应用程序之前,先要准备好相应的开发工具链以及必要的库文件: ##### 开发平台选择 可以选用官方推荐的STM32CubeIDE或者传统方式下的Keil MDK-Arm进行项目构建。对于本案例而言,在创建新工程时应特别关注头文件路径指向`stm32f103xb.h`而非默认选项`stm32f103xe.h`,这是因为目标处理器型号属于B类子集而不是E类扩展版[^1]。 ##### 驱动程序获取途径 针对LoRa射频收发器的操作主要依赖其内部寄存器映射表定义及相关算法实现。可以从以下几个方面着手寻找合适的驱动源码: - 正点原子提供的配套资料包里包含了经过验证的标准库版本解决方案,可以直接下载解压后导入至现有框架之中; - 参考开源社区贡献者分享的经验贴和技术文档,比如GitHub上众多关于SX127X驱动项目的讨论区; - 利用厂商发布的API手册自行封装基础功能调用接口。 #### 三、典型应用场景举例说明 下面通过一段简单的演示代码展示如何利用SPI模式读写LoRa模块参数并发送测试消息给另一节点接收解析的过程。 ```c #include "stm32f1xx_hal.h" #include "sx127x_driver.h" void LoRa_Init(void){ /* 初始化GPIO, SPI资源 */ MX_GPIO_Init(); MX_SPI1_Init(); /* 设置LoRa基本运行状态 */ SX127X_SetMode(STDBY); } int main(void){ uint8_t buffer[] = "Hello LoRa!"; HAL_Init(); // 系统初始化 LoRa_Init(); // 调用函数完成初始化过程 while (1){ /* 发送数据帧 */ SX127X_SendPacket(buffer, sizeof(buffer)); /* 延迟一段时间再重复执行 */ HAL_Delay(5000); } } ``` 上述片段仅作为一个简化模型供理解原理之用,实际部署过程中还需要考虑更多细节因素诸如错误处理机制、节能策略等方面的内容[^2]。 ---
评论 62
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值