嵌入式开发学习日志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)编写中断服务函数

相关推荐
zhangrelay3 小时前
ROS云课三分钟-使用动态参数重配置调试Teb导航案例-251008
笔记·学习
生物小卡拉3 小时前
R脚本——Deseq2差异表达分析--v1.0
windows·经验分享·笔记·学习·信息可视化·数据分析
livana.4 小时前
小学scrach入门项目学习幸运大转盘项目
经验分享·学习·其他·scratch
Hy行者勇哥4 小时前
数据中台的数据源与数据处理流程
大数据·前端·人工智能·学习·个人开发
fat house cat_4 小时前
记一次网络io学习流水账
网络·学习
初圣魔门首席弟子6 小时前
C++ STL string(字符串)学习笔记
c++·笔记·学习
LGL6030A6 小时前
数据结构学习(2)——多功能链表的实现(C语言)
数据结构·学习·链表
iconball6 小时前
个人用云计算学习笔记 --18(NFS 服务器、iSCSI 服务器)
linux·运维·笔记·学习·云计算
国科安芯6 小时前
ASP4644芯片低功耗设计思路解析
网络·单片机·嵌入式硬件·安全