简述串口通信原理 stm32串口发送数据 如何通过串口发送数据

通信网络

650人已加入

描述

串口通信经常作为开发调试的工具,所以先介绍下串口通信。

串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。目前STM32一般只使用 RXD、TXD 以及 GND 三条信号线,直接传输数据信号。

STM32的串口通信外设有USART和UART。USART是Universal Synchronous Asynchronous Receiver and Transmitter的缩写,即通用同步异步收发器可以灵活地与外部设备进行全双工数据交换。UART(Universal Asynchronous Receiver and Transmitter)在USART基础上裁减了同步通信功能,只有异步通信。

接口通过三个引脚从外部连接到其它设备(如以下USART框图所示)。任何 USART 双向通信均需要至少两个引脚:接收数据输入引脚 (RX) 和发送数据引脚输出 (TX)。

led灯

RX :接收数据输入引脚就是串行数据输入引脚。过采样技术可区分有效输入数据和噪声,从而用于恢复数据。

TX :发送数据输出引脚。如果关闭发送器,该输出引脚模式由其 I/O 端口配置决定。如果使能了发送器但没有待发送的数据,则 TX 引脚处于高电平。在单线和智能卡模式下,该 I/O用于发送和接收数据(USART 电平下,随后在 SW_RX 上接收数据)。

TX和RX分别用PA9和PA10。即使用USART1。

配置串口时,首先要对相应的GPIO口进行初始化,初始化方式和LED灯初始化类似。开启外设时钟,设置端口模式,端口输出类型、输出速度、上下拉、初始输入输出状态。由于USART属于可选功能项,所以两个端口工作模式都为复用功能模式。

led灯

GPIO口配置好后,需要选用复用的功能USART1。

led灯

从图中可以知道USART1属于寄存器GPIOx_AFRH中的AF7。需要在相应GPIO口写入0111。

led灯

接着,设置USART1模式。

led灯

led灯

led灯

led灯

led灯

根据寄存器说明,配置为过采样16倍、字长8位、不校验,设置一个停止位,设置波特率,使能发送器和接收器。最后使能USART。

波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示,单位为波特。比特率指单位时间内传输的比特数,单位 bit/s(bps)。对于 USART 波特率与比特率相等。波特率越大,传输速率越快。USART 的发送器和接收器使用相同的波特率。

led灯

led灯

波特率计算公式

led灯

其中,f PLCK 为 USART 时钟,OVER8 为 USART_CR1 寄存器的 OVER8位对应的值,USARTDIV 是一个存放在波特率寄存器(USART_BRR)的一个无符号定点数。其中 DIV_Mantissa[11:0]位定义 USARTDIV 的整数部分,DIV_Fraction[3:0]位定义USARTDIV 的小数部分,DIV_Fraction[3]位只有在 OVER8 位为 0 时有效,否则必须清零。

led灯

led灯

可通过状态寄存器USART_SR的第七位判断发送数据寄存器是否为空,进行下一步的发送数据。

led灯

这个函数虽然可以发送数据,但只能单个发送,如果想发送一个字符串就要多次调用这个函数,所以把这个函数再进行封装。判断要输出的数是否为‘�’,如果是,则这个数发送结束,不再进行发送数据。这样就可以一次发送一个完整的字符串了。

led灯

主函数

led灯

usart源文件

led灯

usart头文件

led灯

led灯

最终编译后将程序烧入,STM32发送数据,电脑通过串口助手接收到数据,串口发送数据成功。这样以后就可以很方便的进行调试了。

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

全部0条评论

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

×
20
完善资料,
赚取积分