打印
[STM32F1]

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

[复制链接]
224|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 | 只看该作者
可能是因为接收缓冲区未正确处理。

使用特权

评论回复
5
flycamelaaa| | 2025-4-27 14:00 | 只看该作者
你在循环中逐字符发送,但每次调用HAL_UART_Transmit时都发送整个字符串(sizeof(msg)),而不是单个字符。
sizeof(msg)返回的是指针大小(通常是4或8字节),而非字符串长度,导致发送垃圾数据。

使用特权

评论回复
6
stormwind123| | 2025-4-27 15:00 | 只看该作者
换行符格式有问题。

使用特权

评论回复
7
powerantone| | 2025-4-27 15:00 | 只看该作者
字符串长度计算错误。

使用特权

评论回复
8
probedog| | 2025-4-27 16:00 | 只看该作者
可能是UART接收配置有误。

使用特权

评论回复
9
两只袜子| | 2025-4-27 16:36 | 只看该作者
可能是波特率、数据位、停止位不匹配。

使用特权

评论回复
10
classroom| | 2025-4-27 17:00 | 只看该作者
波特率不匹配?

使用特权

评论回复
11
duo点| | 2025-4-27 18:00 | 只看该作者
检查硬件连接,Nucleo板的USART2 TX和RX引脚连接是否正确,是否无短路或虚焊。

使用特权

评论回复
12
cr315| | 2025-4-27 19:00 | 只看该作者
建议检查UART初始化配置。

使用特权

评论回复
13
onlycook| | 2025-4-27 19:00 | 只看该作者
可以试试启用UART中断。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

13

帖子

0

粉丝