问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

STM32串口调试技术详解:从UART到USART

创作时间:
作者:
@小白创作中心

STM32串口调试技术详解:从UART到USART

引用
CSDN
1.
https://blog.csdn.net/m0_65292176/article/details/139002180

本文将介绍STM32微控制器的串口调试技术,包括UART和USART的区别、printf函数的实现以及具体的串口调试步骤。对于从事嵌入式开发的工程师来说,这些内容具有较高的参考价值。

一、UART和USART

1、UART

UART是一种通用的串行通信协议,采用异步通信方式,即不需要时钟信号来同步数据传输。它使用起始位、数据位、校验位和停止位来组织和解析数据。

在UART通信中,数据位是指每个数据字节中实际传输的位数。通常,UART支持7位或8位数据位的传输。起始位用于指示数据传输的开始,而停止位则指示数据传输的结束。校验位可以用于检测传输过程中的错误。

2、USART

USART是一种通用的串行通信协议,它结合了UART和同步通信的功能。与UART不同,USART可以通过外部时钟信号进行同步通信,也可以使用内部时钟进行异步通信。

USART支持多种传输模式,包括异步、同步、全双工和半双工模式。它可以发送和接收数据,并且可以实现更高的通信速率和更可靠的数据传输。

3、比较

UART在简单性和成本方面有一些优势,适用于一些基本的串行通信需求;而USART则在通信速率、数据传输可靠性和通信模式等方面具有更多的功能和灵活性,适用于更复杂和要求更高的串行通信应用。

二、printf函数实现

在STM32微控制器中使用printf函数通常需要结合串口通信模块(如USART或UART)来实现。

为了让printf函数将数据输出到串口通信模块,需要重定向printf函数。比如GNUC编译器,就要将printf函数重定向,通常使用__io_putchar(int ch)函数来实现这一功能,这个函数会被printf自动调用来输出数据。

重定向之后,还需要链接相应的库函数来实现底层的串口输出。这通常是通过STM32提供的库(比如STM32Cube HAL库)来完成的,其中包含了底层的串口驱动函数。这些函数负责将数据发送到正确的串口,并且处理发送过程中可能的错误或者中断。

三、串口调试

1、配置

2、代码

3、调试

烧录过程在前面文章整理过,这里省略。

4、浮点数输出

当需要输出浮点数时,编译器会报错。这是由于单片机的硬件资源限制(内存太小),STM32单片机里C语言标准库的printf()函数并不支持浮点数的输出。但是可以通过以下方式解决:


添加-u_printf_float,重新烧录并调试。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号