嵌入式开发学习日志37——stm32之USART

所谓串口通信,就是在外设与计算机之间通过数据线等设备,按位进行数据传输的一种通信方式。串口,属于一种接口标准,用于规定接口的电气标准。

这里常用的接口标准是RS-232,它是通过正负电压来表示不同的逻辑状态,而stm32单片机是使用高低电平来显示逻辑,所以两者间需要有能够进行转换的物件,也就是电平转换芯片。

而且说到通信,那么必然会涉及到一定的通信协议,RS-232的通信协议十分简单,它遵循96-N-8-1格式的协议。

96意思为通信波特率为9600,由于串口通信中一般使用异步通信,所以要通信的两个设备间需要保持波特率一致。

N表示没有校验位,串口通信抗干扰能力还是比较差的,容易因为外界干扰导致数据偏差,所以可以在传输过程中加上校验位(有种又菜又爱玩的感觉)。

8表示数据位总共有8位,上章有配上异步通信时的数据格式的图,所以这里就不多赘述。

最后的1表示停止位,这里没什么可说的。

stm32上总共有3个USART,中文名称为同步异步收发器,正是由它们来实现单片机的串口通信功能,而且值得一提的是,按照数据传输方向,这几个收发器都可以实现全双工通信,十分的高级。

欸,这时候有人问了,stm32上装这么几个USART有什么具体作用呢?

实际上,我们在工程项目里如果遇到了代码没错,但是装置怎么都运行不起来的情况,就可以用到USART的串口通信能力了。USART在stm32中应用最多的莫过于它的printf输出功能(学过C的小伙伴狂喜),你可以在特定位置加上printf语句对代码进行调试,一般情况下,串口都会正常将你想要输出的语句打印到串口助手上,但是,如果代码里有隐含的逻辑错误,那么很可能你没法看到语句的输出打印,那么这个时候,你就可以锁定问题所在了。

下面我们来简短看一下UASRT的内部结构。

十分复杂,对不对?其实真正要注意的地方并不多,一些引脚及其功能可以查阅手册来了解,毕竟咱们是人,真要一口气全部记下来很不现实。

首先,根据之前提到的时钟树的相关内容,以及图上的信息,我们在编写代码时得注意,只有USART1是挂载在APB2上面的,另外两个2和3挂载在APB1上。

其次是数据寄存器部分,它是低9位有效,但实际用起来却并非如此,USART控制寄存器中有M位,这个标志位决定了数据第9位是否有效,M位为0时,数据字长为8位,而当M位为1时,数据字长为9位。

然后?当然是最重要的配置环节。

(1)使能串口以及GPIO时钟

(2)设置串口对应引脚为复用功能

(3)初始化串口参数,即波特率、字长、停止位

(4)使能串口

(5)设置串口中断类型并且使能

(6)设置中断优先级,并且使能中断通道

(7)编写中断服务函数

相关推荐
普中科技11 分钟前
【普中STM32F1xx开发攻略--标准库版】-- 第 13 章 STM32 位带操作
stm32·单片机·嵌入式硬件·arm·gpio·普中科技·位带操作
喜欢吃燃面37 分钟前
C++:哈希表
开发语言·c++·学习
初圣魔门首席弟子1 小时前
C++ STL list 容器学习笔记:双向链表的 “小火车“ 操控指南
c++·windows·笔记·学习
2301_796512522 小时前
Rust编程学习 - 如何学习有关函数和闭包的高级特性,这包括函数指针以及返回闭包
服务器·学习·rust
LBuffer2 小时前
破解入门学习笔记题三十四
java·笔记·学习
_pass_2 小时前
flask 框架的ORM 学习及应用
学习·flask·orm
河南博为智能科技有限公司2 小时前
RS485转以太网串口服务器-串口设备联网的理想选择
大数据·服务器·人工智能·单片机·嵌入式硬件·物联网
再睡一夏就好2 小时前
【C++闯关笔记】unordered_map与unordered_set的底层:哈希表(哈希桶)
开发语言·c++·笔记·学习·哈希算法·散列表
potato_15542 小时前
现代C++核心特性——内存篇
开发语言·c++·学习
国科安芯3 小时前
抗辐照MCU芯片在无人叉车领域的性能评估与选型建议
网络·人工智能·单片机·嵌入式硬件·安全