基于一段痛苦的调试经历浅做个记录
cubeide代码
今天想用串口和printf观察数据,就用cubeide配置了一个基础串口通信程序。
主要代码就下面两行:
uint8_t TxBuffer[] = "Hello";
HAL_UART_Transmit(&huart6, TxBuffer, sizeof(TxBuffer), 100);
一、具体bug
当发送数组末尾加上\n后(TxBuffer[] = “Hello”),串口调试助手就无法接收到单片机发送的数据,且将其改回去后仍然有一段时间接收不到数据。遇到一个很神奇的现象。
二、分析原因
1.硬件
检测tx和rx线序,发现没有问题。猜测是由于面包板接触不良导致的。
2024/4/14补充:
串口通信时断开电脑充电器,防止电脑充电使得usb口信号不稳定。
外接typec给单片机核心板供电,只用下载器可能功率不够导致串口信号不稳定。
os:串口通信稳定性确实有些差,怪不得后续发展了RS232等通信协议…
2.软件
为了寻找问题所在,我对函数进行调试。
单步执行HAL_UART_Transmit(&huart6, TxBuffer, sizeof(TxBuffer), 100)函数内的代码,但程序表面看起来一切正常(也可能是博主学艺不精见识过少,要是有大佬知道原因还请留言)
事情愈发吊诡起来…
在几次尝试后,我猜测是因为TxBuffer内加的\n出现错误,导致stm32串口被卡死无法发送数据,且该现象无法通过下载新的程序解决,只能等待一会儿后将单片机和ch340模块直接接线才能重新接收到数据。
总结
基于今天折磨了我六个小时+的串口调试经历浅做个记录,如果有遇到相同问题的uu或者知道原因的大神,欢迎留言讨论。
笔者能力有限,哪里讲的不对还请大家批评指正。