Keil5中printf语句打印空白如何化解 keil5的条件编译宏设置是什么意思

很多玩stm32等mcu开发的兄弟,在keil5里调试时最闹心的场景莫过于代码逻辑全对、硬件接线没差,偏偏串口调试助手接收到的printf输出全是空白——明明加了打印调试的代码,愣是没半点有效信息,卡半小时都找差点难题根源。其实这类难题90%都不是硬件故障,而是keil配置、底层重定给、串口初始化的细节没踩对,照着下面的排查流程走,基本几分钟就能化解。
第一步:检查microlib库的勾选配置
很多人不了解keil默认情形下,是不支持标准c库printf函数重定给的,必须开始microlib(微库)才能让自定义的串口输出逻辑对接上printf。具体操作是点击工具栏的魔术棒图标(options for target),切换到target标签页,把右上方的“use microlib”选项打勾,确定后从头全量编译工程。不少人踩的坑是之前开了微库但中途换工程模板没同步勾选,或是勾完没从头build直接下载程序,导致重定给的printf根本没被链接到工程里,天然输出的都是空字节流。
第二步:核对printf重定给的代码适配性
如果微库配置没难题,就要检查重定给代码的适配性:很多人直接抄网上的fputc重定给代码,要么忘了加条件编译包裹导致代码被编译器优化掉,要么重定给的usart外设号和实际硬件接的串口对不上——比如代码里重定给的是usart1,实际硬件接的是usart2,天然发出去的字符全跑错串口,调试助手收差点有效内容。还要注意不要漏加include
第三步:排查串口初始化和波特率匹配难题
不少人写完重定给代码就觉得万事大吉,其实底层串口初始化的细节出错照样会出现输出空白:比如串口gpio的复用功能配置没开,usart的波特率没和调试助手配置的数值对齐——比如mcu端配的115200,助手选了9600,接收到的全是乱码甚至直接显示空白;还有人忘了打开usart的发送使能位,或是对应串口的外设时钟没开,导致数据根本没法从硬件端口发出来。这里可以同享壹个快速定位小诀窍:串口初始化完成后,手动往usart数据寄存器写入壹个字符‘a’,如果调试助手能稳定收到a,说明硬件链路是通的,难题就出在库配置或重定给环节,按顺序排查很快就能定位。走完这三个排查环节,绝大多数keil5下的printf打印空白难题都能快速化解,不用再对着空串口窗口卡调试进度。
