[STM32F1] 使用 HAL 库发送/接收 UART 消息接收正确个数打印错误

[复制链接]
458|12
 楼主| 唐纳德d 发表于 2025-4-27 10:00 | 显示全部楼层 |阅读模式
使用 nucleo 板中的串行端口usart 2,引脚 2/3来收发数据。接受到数据数量是正确的,打印出字符是错误的,全是“------------------”。消息长度是正确的。
使用 串行监视器,监视的结果,也全是--。
void printMsg(char *msg){        for(uint32_t i = 0; i<strlen(msg); i++)        {                while((__HAL_UART_GET_FLAG(&huart2, UART_FLAG_TXE) != true)) {}                 HAL_UART_Transmit(&huart2, (uint8_t)msg, sizeof(msg), HAL_MAX_DELAY);        } }         sprintf(usr_msg, "This is hello world /n");        printMsg(usr_msg);
laocuo1142 发表于 2025-4-27 12:45 | 显示全部楼层
strlen(msg)是正确的,但循环内未正确处理字符索引。
elephant00 发表于 2025-4-27 12:52 | 显示全部楼层
逻辑分析仪检查USART2的TX引脚实际输出的波形是否符合预期。
jcky001 发表于 2025-4-27 13:36 | 显示全部楼层
可能是因为接收缓冲区未正确处理。
flycamelaaa 发表于 2025-4-27 14:00 | 显示全部楼层
你在循环中逐字符发送,但每次调用HAL_UART_Transmit时都发送整个字符串(sizeof(msg)),而不是单个字符。
sizeof(msg)返回的是指针大小(通常是4或8字节),而非字符串长度,导致发送垃圾数据。
powerantone 发表于 2025-4-27 15:00 | 显示全部楼层
字符串长度计算错误。
stormwind123 发表于 2025-4-27 15:00 | 显示全部楼层
换行符格式有问题。
probedog 发表于 2025-4-27 16:00 | 显示全部楼层
可能是UART接收配置有误。
两只袜子 发表于 2025-4-27 16:36 | 显示全部楼层
可能是波特率、数据位、停止位不匹配。
classroom 发表于 2025-4-27 17:00 | 显示全部楼层
波特率不匹配?
duo点 发表于 2025-4-27 18:00 | 显示全部楼层
检查硬件连接,Nucleo板的USART2 TX和RX引脚连接是否正确,是否无短路或虚焊。
cr315 发表于 2025-4-27 19:00 | 显示全部楼层
建议检查UART初始化配置。
onlycook 发表于 2025-4-27 19:00 | 显示全部楼层
可以试试启用UART中断。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

44

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部