You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32 HAL_UART驱动Ebyte LoRa模块通信故障排查请求

问题排查:STM32(HAL库)作为Ebyte E32433T20D发送端无法与Arduino接收端通信

我有两个Ebyte E32433T20D LoRa模块,原本用两块Arduino Uno能正常收发,但换成STM32开发板做发送端、Arduino Uno做接收端后,接收端收不到预期的"1"。需要排查UART协议或代码问题。

接收端模块配置

{0x00, 0x01, 0x1A, 0x17, 0xC0}

正常工作的Arduino发送端代码

#define PIN_SERIAL1_TX (0u)
#define PIN_SERIAL1_RX (1u)

#define M0 14
#define M1 15

void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);
  Serial1.begin(9600); // 使用RP2040的Arduino代码初始化UART
}

void loop() {
    Serial1.write((byte)0x00); // 接收端地址
    Serial1.write(0x01);       // 接收端地址                                                
    Serial1.write(0x17);       // 接收端信道 = 0x17 = 23    (410M+23=433 MHz)
    Serial1.println("123");
    delay(500);
}

有问题的STM32发送端代码(HAL库)

#include "main.h"
UART_HandleTypeDef huart1;
UART_HandleTypeDef huart2;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);  //debug
static void MX_USART1_UART_Init(void);  //Lora

/* USER CODE BEGIN 0 */
uint16_t readValue;
uint8_t charToTransmit[1];

/* USER CODE END 0 */

int main(void) {
  HAL_Init();
  SystemClock_Config();
  /* 初始化所有配置的外设 */
  MX_GPIO_Init();
  MX_USART2_UART_Init();  //DEBUG
  MX_USART1_UART_Init();
  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,0); //M0
  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,0); //M1
  HAL_Delay(100);
  uint8_t config[]=  {0x00,0x01,0x1A,0X17,0XC0};

  /* USER CODE BEGIN WHILE */
  while (1) {
        charToTransmit[0] = 1 ;
        HAL_UART_Transmit(&huart1,config,sizeof(config),0);
        HAL_Delay(500);
        HAL_UART_Transmit(&huart1,charToTransmit,1,100);
        HAL_Delay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

// HAL库初始化代码在此处

Arduino接收端代码

#include <Arduino.h>
#define PIN_SERIAL1_TX (0u)
#define PIN_SERIAL1_RX (1u)
#define M0 14
#define M1 15
char rc;

void setup() {
  Serial.begin(115200);
  Serial1.begin(9600);
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);
}

void loop() {
    while (Serial1.available()) {
      rc=Serial1.read();
      Serial.print(rc);   
    }
  }

排查要点

  • UART参数匹配:确认STM32的USART1初始化参数(波特率9600、数据位8、停止位1、无校验)和Arduino的Serial1完全一致,HAL库初始化时易遗漏参数配置。
  • 发送逻辑错误:原Arduino代码发送的是地址+信道+数据,而STM32每次循环都发送模块配置指令config[]——当前M0/M1为低电平(透传模式),发送配置指令会导致模块工作异常,无法正常透传数据。
  • 数据内容错误:STM32发送的charToTransmit[0] = 1是ASCII码为1的控制字符,不是字符'1'(ASCII码0x31),Arduino接收后打印的是不可见字符,而非预期内容。
  • 超时参数问题:第一次调用HAL_UART_Transmit时超时设为0,会导致函数立即返回,可能数据未发送完成就退出,应设置合理超时(如100)。
  • 硬件模式确认:检查STM32的M0/M1引脚接线是否正确,是否确实输出低电平,确保LoRa模块处于正常透传模式。

内容的提问来源于stack exchange,提问作者Tryingtogetsome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:15:55