[STM32F1] HAL_UART_Transmit 函数中 timeout 参数写 -1 的作用是什么?

[复制链接]
564|79
我从网上复制了下面这段代码,运行正常。我想请教为什么超时参数(timeout)那里要写 -1?
4073169e9b4fdf0331.png


幸福小强 发表于 2026-4-30 16:41 | 显示全部楼层
函数会一直阻塞等待,直到所有数据发送完成,或者发送过程中出现错误,才会退出函数,***不会因为时间到了而主动终止发送。
pl202 发表于 2026-5-5 11:05 | 显示全部楼层
可能导致程序卡死              
jimmhu 发表于 2026-5-5 11:51 | 显示全部楼层
若在timeout时间内未完成发送,函数将返回HAL_TIMEOUT错误。
belindagraham 发表于 2026-5-5 12:18 | 显示全部楼层
这种模式适合什么应用场景?              
cashrwood 发表于 2026-5-5 12:31 | 显示全部楼层
当你的程序主循环唯一任务就是等待并完成这次发送时。
geraldbetty 发表于 2026-5-5 13:34 | 显示全部楼层
当 Timeout 参数为 -1 时,函数会一直阻塞,直到数据全部发送完成才会返回。它不会因超时而提前退出。
pmp 发表于 2026-5-5 14:34 | 显示全部楼层
使函数进入无限等待模式,直到数据传输完成才返回,不会因超时而失败。
sanfuzi 发表于 2026-5-5 15:06 | 显示全部楼层
如何设置合理的超时时间?              
wengh2016 发表于 2026-5-5 15:39 | 显示全部楼层
timeout = -1表示无限等待,即阻塞式发送,直到所有数据发送完成才会退出函数。
phoenixwhite 发表于 2026-5-5 18:10 | 显示全部楼层
并非代码中的“标准配置”              
maqianqu 发表于 2026-5-6 20:02 | 显示全部楼层
内部使用HAL_GetTick()计数器跟踪已耗时。当timeout = -1时,超时检测逻辑被跳过,形成无限循环。
chenci2013 发表于 2026-5-6 20:51 | 显示全部楼层
不断检查串口的发送数据寄存器为空标志位(TXE)或发送完成标志位(TC),直到指定长度的数据全部被硬件移出发送移位寄存器为止。
updownq 发表于 2026-5-6 22:58 | 显示全部楼层
无限等待              
abotomson 发表于 2026-5-7 07:29 | 显示全部楼层
使用无限等待模式需要格外小心,因为它会带来程序“卡死”的风险。
gejigeji521 发表于 2026-5-8 16:40 | 显示全部楼层
无限等待(阻塞式发送,永不超时)

函数会一直阻塞,直到所有数据发送完成,才会退出函数;
只要串口发送没结束,程序就会停在这里,不会因为超时而提前返回。
albertaabbot 发表于 2026-5-9 11:59 | 显示全部楼层
timeout以毫秒为单位,定义函数在阻塞状态下等待发送完成的最大时间。
louliana 发表于 2026-5-9 12:20 | 显示全部楼层
每次循环检查会短暂释放单片机,避免完全占用单片机资源,但整体仍为阻塞模式。
yorkbarney 发表于 2026-5-9 12:40 | 显示全部楼层
timeout = -1是导致系统“死机”或“卡住”的常见原因之一,必须谨慎使用!
lzmm 发表于 2026-5-9 13:04 | 显示全部楼层
推荐:使用宏定义,意图清晰
HAL_UART_Transmit(&huart1, data, len, HAL_MAX_DELAY);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

207

主题

210

帖子

0

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