如何用串口进行调试

描述

串口是MCU最重要的一个通信端口,几乎所有的嵌入式产品都会用到串口,可能是产品预研的时候用来调试,可能是与某一个外设连接收发数据,还可能用来对产品进行固件升级。这篇文章主要给大家介绍一下如何用串口进行调试,也就是打印log。

打印log最常用的方法是printf,所以要解决的问题是将printf的输出重定向到串口,然后通过串口将数据发送出去。

首先要配置串口,串口的配置包括:

1、 开启串口和GPIO时钟

2、 GPIO引脚模式配置

3、 串口波特率、数据位、停止位、校验位的配置

4、 使能串口

代码如下(使用stm32 LL库):

GPIO

此时,已经可以通过串口来收发数据了,但是只能通过库函数一个一个从数据寄存器读写单个字符,非常的不方便。

下面说一下如何重定向printf。这里我在Ubuntu下用make编译源码,所以重定向的方式与用keil有所区别。

首先要在源码文件开头包含头文件#include ,然后在串口初始化时调用setvbuf(stdout, NULL, _IONBF, 0),设置buffer缓存为0,这样一有数据就发送,不然会等到缓存满或有回车换行符才发送。如果没有这句,你的printf又没n,log就会打不出来。

GPIO

接下来是重定向的代码

GPIO

这里有两个地方需要注意,第一,用gcc编译需要加_write()函数,然后在函数内部调用__io_putchar()函数将字符串一个一个发送出去。第二,使用LL库发送数据,要查看发送寄存器是否为空或者发送是否完成标志,否则发的太快会导致前面的数据还没发完,后边的数据又来了,后边的覆盖掉前面的,导致发送错误。

到此,就可以尽情使用printf调试了。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分