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
相关产品推荐
相关产品推荐

