全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 接口/总线/驱动 >

如何用串口进行调试

时间:2023-03-23 10:02

人气:

作者:admin

标签: GPIO  调试  时钟  mcu  串口 

导读:串口是MCU最重要的一个通信端口,几乎所有的嵌入式产品都会用到串口,可能是产品预研的时候用来调试,可能是与某一个外设连接收发数据,还可能用来对产品进行固件升级。这篇文...

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

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

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

1、 开启串口和GPIO时钟

2、 GPIO引脚模式配置

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

4、 使能串口

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

pYYBAGQbszOACgoaAALZpgKCzk0231.jpg

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

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

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

poYBAGQbszSALyXTAAAHLlnSrlc452.jpg

接下来是重定向的代码

poYBAGQbszaABeIiAAEGeLJBQAA936.jpg

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

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

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信