历史上的今天
返回首页

历史上的今天

今天是:2024年08月29日(星期四)

正在发生

2019年08月29日 | STM32F429 >> 9. USART_串口通讯

2019-08-29 来源:eefocus

本工程板级支持包文件适用于野火stm32f429 开发板。


串口通讯是一种设备间常用的串行通讯方式


通讯协议基本分为物理层和协议层:


物理层:规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体间的传输;

协议层:主要规定通讯逻辑,统一收发双方的数据打包、解包标准。

物理层

主要分析RS-232

在这里插入图片描述

该通讯方式中,两个通讯设备的“DB9接口” 之间通过串口信号线建立起连接,串口信号线中使用“RS-232标准” 传输数据信号。由于RS-232 电平标准的信号不能直接被控制器识别,所以这些信号会经过一个“电平转换芯片” 转换成控制器能够识别的“TTL校准” 的电平信号,才能实现通讯。


1. 电平标准

根据通讯使用的电平标准不同,串口通讯可分为TTL 标准及RS-232 标准


在这里插入图片描述
在这里插入图片描述

常使用MA3232 芯片对TTL 及RS-232 电平的信号进行相互转换


2. RS-232 信号线

RS-232 串口标准在最初的应用当中常用于计算机、路由与调制解调器之间的通讯,该通讯系统中,设备被分为数据终端设备DTE(计算机、路由) 和数据通讯设备DCE(调制解调器)。



在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

协议层

串口通讯的数据包由发送设备通过自身的TXD 接口传输到接收设备的RXD 接口。

在串口通讯的协议层中,规定了数据包的内容,它由起始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据

在这里插入图片描述


1. 波特率

异步通讯中由于没有时钟信号,固两个通讯设备间需约定好波特率,常见有4800、9600、115200 等


2. 通讯的起始和停止信号

数据包的起始信号由一个逻辑0 的数据位表示,而数据包的停止信号可由0.5、1、1.5 或两个逻辑1 的数据位表示,只要双方约定一致即可


3. 数据校验

可选。其有奇校验、偶校验、0校验、1校验和无校验


STM32 的USART 简介

STM32 芯片具有多个USART(Universal Synchronous Asynchronous Receiver and Transmitter )外设用于串口通讯,即通用同步异步收发器。

除了USART,它还有UART(Universal Asynchronous Receiver and Transmitter),即通用异步收发器,即通信时不需要对外提供时钟输出。

我们平时用的串口通信基本都是UART


USART 功能框图


在这里插入图片描述

1. 功能引脚

TX:发送数据输出引脚;

RX:接收数据输入引脚;

SW_RX:数据接收引脚,只用于单线和智能卡模式,属于内部引脚,没有具体外部引脚;

nRTS:请求以发送(Request To Send),n 表示低电平有效。如果使能 RTS 流控制,当 USART 接收器准备好接收新数据时就会将 nRTS 变成低电平;当接收寄存器已满时, nRTS将被设置为高电平。该引脚只适用于硬件流控制;

nCTS:清除以发送(Clear To Send),n表示低电平有效。如果使能 CTS流控制,发送 器在发送下一帧数据之前会检测 nCTS 引脚,如果为低电平,表示可以发送数据,如果为 高电平则在发送完当前数据帧之后停止发送。该引脚只适用于硬件流控制;

SCLK:发送器时钟输出引脚。这个引脚仅适用于同步模式;


STM32F42xxx 系统控制器有四个 USART和四个 UART,其中 USART1 和 USART6 的

时钟来源于 APB2总线时钟,其最大频率为 90MHz,其他六个的时钟来源于 APB1总线时

钟,其最大频率为 45MHz。


UART只是异步传输功能,所以没有 SCLK、nCTS和 nRTS 功能引脚。


2. 数据寄存器

USART 数据寄存器(USART_DR)只有低 9位有效,并且第 9位数据是否有效要取决于 USART 控制寄存器 1(USART_CR1)的 M位设置,当 M 位为 0时表示 8 位数据字长,当 M

位为 1 表示 9 位数据字长,我们一般使用 8位数据字长.

USART_DR包含了已发送的数据或者接收到的数据。USART_DR 实际是包含了两个

寄存器,一个专门用于发送的可写 TDR,一个专门用于接收的可读 RDR。当进行发送操

作时,往 USART_DR 写入数据会自动存储在 TDR内;当进行读取操作时,向 USART_DR

读取数据会自动提取 RDR数据。

TDR 和 RDR 都是介于系统总线和移位寄存器之间。串行通信是一个位一个位传输的,

发送时把 TDR内容转移到发送移位寄存器,然后把移位寄存器数据每一位发送出去,接收

时把接收到的每一位顺序保存在接收移位寄存器内然后才转移到 RDR。


3. 控制器

USART 有专门控制发送的发送器、控制接收的接收器,还有唤醒单元、中断控制等等。

使用 USART 之前需要向 USART_CR1寄存器的 UE位置 1 使能 USART。发送或者接收数

据字长可选 8位或 9位,由 USART_CR1的 M位控制。


发送器

当 USART_CR1 寄存器的发送使能位 TE置 1时,启动数据发送,发送移位寄存器的

数据会在 TX 引脚输出,如果是同步模式 SCLK也输出时钟信号。

一个字符帧发送需要三个部分:起始位+数据帧+停止位。起始位是一个位周期的低电

平,位周期就是每一位占用的时间;数据帧就是我们要发送的 8位或 9位数据,数据是从

最低位开始传输的;停止位是一定时间周期的高电平。

停止位时间长短是可以通过 USART控制寄存器 2(USART_CR2)的 STOP[1:0]位控制,

可选 0.5个、1 个、1.5 个和 2个停止位。默认使用 1 个停止位。

在这里插入图片描述

当发送使能位 TE 置 1 之后,发送器开始会先发送一个空闲帧(一个数据帧长度的高电平),接下来就可以往 USART_DR寄存器写入要发送的数据。在写入最后一个数据后,需要等待USART状态寄存器(USART_SR)的 TC 位为 1,表示数据传输完成,如果USART_CR1寄存器的 TCIE位置 1,将产生中断。


发送数据时,有几个比较重要的标志位:


在这里插入图片描述

接收器

如果将 USART_CR1 寄存器的 RE 位置 1,使能 USART接收,使得接收器在 RX 线开始搜索起始位。在确定到起始位后就根据 RX 线电平状态把数据存放在接收移位寄存器内。接收完成后就把接收移位寄存器数据移到 RDR内,并把 USART_SR 寄存器的 RXNE 位置1,同时如果 USART_CR2 寄存器的 RXNEIE 置 1的话可以产生中断。


接收数据时,有几个比较重要的标志位:

在这里插入图片描述

采样:

为得到一个信号真实情况,需要用一个比这个信号频率高的采样信号去检测,称为过采样,这个采样信号的频率大小决定最后得到源信号准确度,一般频率越高得到的准确度越高,但为了得到越高频率采样信号越也困难,运算和功耗等等也会增加,所以一般选择合适就好。


接收器可配置为不同过采样技术,以实现从噪声中提取有效的数据。

USART_CR1 寄存器的 OVER8 位用来选择不同的采样采样方法,如果 OVER8 位设置为 1 采用 8 倍过采样,即用 8 个采样信号采样一位数据;如果 OVER8 位设置为 0 采用 16 倍过采样,即用 16个采样信号采样一位数据。


USART 的起始位检测需要用到特定序列。如果在 RX线识别到该特定序列就认为是检

测到了起始位。起始位检测对使用 16倍或 8 倍过采样的序列都是一样的。该特定序列为:

1110X0X0X0000,其中 X表示电平任意,1或 0皆可。


8 倍过采样过程见图。使用第 4、5、6 次脉冲的值决定该位的电平状态。

在这里插入图片描述

16 倍过采样过程见图。

在这里插入图片描述

4. 小数波特率生成

在这里插入图片描述

f PLCK 为 USART 时钟;

OVER8为 USART_CR1 寄存器的 OVER8

位对应的值;

USARTDIV 是一个存放在波特率寄存器(USART_BRR)的一个无符号定点数。


5. 校验控制

当使用校验位时,串口传输的长度将是 8位的数据帧加上 1位的校验位总共 9 位,此时 USART_CR1 寄存器的 M位需要设置为1,即 9 数据位。


将 USART_CR1 寄存器的 PCE 位置 1 就可以启动奇偶校验控制,奇偶校验由硬件自动完成。


启动了奇偶校验控制之后,在发送数据帧时会自动添加校验位,接收数据时自动验证校验位。接收数据时如果出现奇偶校验位验证失败,会见 USART_SR 寄存器的 PE位置 1,并可以产生奇偶校验中断。


使能了奇偶校验控制后,每个字符帧的格式将变成:起始位+数据帧+校验位+停止位。


6. 中断控制

USART 有多个中断请求事件


中断事件 事件标志 使能控制位

发送数据寄存器为空 TXE TXEIE

CTS 标志 CTS CTSIE

发送完成 TC TCIE

准备好读取接收到的数据 RXNE RXNEIE

检测到上溢错误 ORE RXNEIE

检测到空闲线路 IDLE IDLEIE

奇偶校验错误 PE PEIE

断路标志 LBD LBDIE

多缓冲通信中的噪声标志、上溢错误和帧错误 NF/ORE/FE EIE

编程要点:

使能USART 的GPIO端口,配置成复用模式,并将端口复用配置成相应的USART 发送接收端口;

开启USART 对应GPIO 时钟和USART 时钟;

配置USART 寄存器,并使能;

配置NVIC,中断源选择为USART 中断源;

使能USART 中断;

使能USART ;

编写相应中断函数;

注意:

当将printf, scanf 和getchar 函数重定向后,魔术棒中必须配置use micro lib

配置GPIO 和USART 时必须使用"." 对结构体进行配置,不能使用“->” 否则不能成功配置,至于为什么,我也没有搞清楚,希望大家能告诉我

推荐阅读

史海拾趣

Excellence Optoelectronics Inc公司的发展小趣事

EOI始终将产品质量放在首位。公司建立了严格的质量管理体系,从原材料采购到生产流程,再到产品检测,每一个环节都严格把控。同时,EOI还注重员工的培训和教育,提高员工的质量意识和技能水平。这些努力使得EOI的产品质量得到了客户的广泛认可,公司也因此树立了良好的品牌形象。

ABL Aluminum Components公司的发展小趣事

随着业务规模的不断扩大,ABL公司开始面临供应链管理的挑战。为了应对这一挑战,公司引入了先进的供应链管理系统,实现了从原材料采购、生产制造到产品销售的全程监控。同时,ABL公司还与供应商建立了长期稳定的合作关系,确保了原材料的稳定供应和成本控制。通过优化供应链管理,ABL公司提高了生产效率和市场响应速度,进一步巩固了市场地位。

Emhiser Research Inc公司的发展小趣事

随着全球对环保和可持续发展的关注度不断提高,Emhiser Research也积极承担起自己的环保责任。公司采用环保材料和生产工艺来降低产品对环境的影响;同时,公司还积极推广绿色电子产品的理念,帮助客户实现更加环保和可持续的生产方式。这些努力不仅提升了公司的社会责任感,也为公司的长期发展注入了新的动力。

Exar [Exar Corporation]公司的发展小趣事

进入21世纪后,数字视频应用的兴起为Exar提供了新的发展机遇。为了抓住这一机遇,公司在2000年推出了视频处理器和编解码器产品。这些产品不仅满足了市场对高质量视频处理的需求,也进一步巩固了Exar在通信和视频处理领域的地位。

HM International公司的发展小趣事

进入21世纪后,数字视频应用的兴起为Exar提供了新的发展机遇。为了抓住这一机遇,公司在2000年推出了视频处理器和编解码器产品。这些产品不仅满足了市场对高质量视频处理的需求,也进一步巩固了Exar在通信和视频处理领域的地位。

G24 Innovations公司的发展小趣事

进入21世纪第二个十年,电子行业迎来了前所未有的变革。新技术、新产品的不断涌现,给传统企业带来了巨大挑战。远阳公司敏锐地意识到这一点,迅速启动了转型升级战略。公司加大了对新技术、新工艺的研发投入,不断提升产品的技术含量和附加值。同时,远阳还积极探索智能制造、绿色生产等新模式,推动企业向高质量发展迈进。这一系列的举措,使远阳在激烈的市场竞争中保持了领先地位。

问答坊 | AI 解惑

这里有朋友搞vxworks操作系统的嘛?

请问这里有朋友搞vxworks操作系统的嘛?…

查看全部问答>

开启物联网时代--中国首颗手机传感芯片推出

本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 12月7日消息,上海芯片企业深迪半导体宣布,国内第一款具有中国自主知识产权的商用MEMS陀螺仪诞生,这是国内首颗手机传感器芯片,将改变我国手机MEMS陀螺仪完全从国外进口的历史。 中 ...…

查看全部问答>

如何精确控制多个继电器的延时触发?

我现在需要工控机(IPC)控制30个继电器并行工作,要求延时精度在1毫秒, windows够精度的方法都太耗资源,不能同时开30个,只好想办法硬件解决…… 不知道有没有这类现成的继电器输出板卡可以选? 另外单片机最多有内置多少个定时器的?或者只 ...…

查看全部问答>

单片机和嵌入式

我是从软件转到嵌入式的,最近在学习S3C2440(ARM9T),想自己写一个类似Uboot的程序,于是开始看芯片技术文档。发现看不懂,阅读uboot的原代码,那些芯片的配置也已经让我焦头烂额了,现在是举步维艰。还请高人给指条路。先谢过了。…

查看全部问答>

基于TFT彩屏的51源程序代码

大家有彩屏的资料 拿出来嗮嗮咯!!!…

查看全部问答>

使用430F437发现32K晶体起振速度很慢,引起LCD显示开机不正常。

使用430F437发现32K晶体起振速度很慢,引起LCD显示开机不正常。 是什么原因引起的,我怎么改电容都不行啊。…

查看全部问答>

TI grlib widget层调用问题

用LM3s9b96自己画了块板子,使用了一块240*400的TFT LCD。已经将grlib 的 Displaydriver 层修改好,现在调用displaydriver层或者graphics primitives层的函数均可正常使用。对于widget层,如果widget tree结构<3可以正常工作,再多则出问题,贴下 ...…

查看全部问答>

sitara 板子已收到

sitara 板子已收到,还没拆开看,晚上上图 ___________________________________________________ 对不住大家了,晚上光线不好,照了几张惨不忍睹,就不上传了。 屏幕色彩不太好,其他都很不错。 [ 本帖最后由 lcofjp 于 2012-11-20 19:50 编辑 ...…

查看全部问答>

按这八项去做,电脑慢下来都难

  先看一下电脑的“系统资源”是多少,右键单击“我的电脑”,选择“属性”,再选择“性能”,看一下“系统资源”是多少,一般应该达到95%左右还差不多。   1、电脑桌面上的东西越少越好,我的电脑桌面上就只有“我的电脑”和“回收站”。东西 ...…

查看全部问答>

Linux驱动程序工作原理简介

[Linux资料]Linux驱动程序工作原理简介 Linux驱动程序工作原理简介 一、linux驱动程序的数据结构        1 二、设备节点如何产生?        2 三、应用程序是如何访问设备驱动程序的?    &n ...…

查看全部问答>