秉火429笔记之十四 USART--串口通信

2019-09-12来源: eefocus关键字:秉火  USART  串口通信

1. 串口通讯协议简介

串口通讯(Serial Communication)是一种设备间常用的串行通讯方式,因为简单便捷,大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。


对于通讯协议,我们也以分层的方式来理解,最基本的是把它分为物理层和协议层。物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。


1.1 物理层

串口通讯的物理层有很多标准及变种,我们主要讲解RS-232标准 ,RS-232标准主要规定了信号的用途、通讯接口以及信号的电平标准。


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

电平标准

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

常见的电子电路中常使用TTL的电平标准,理想状态下,使用5V表示二进制逻辑1,使用0V表示逻辑0;而为了增加串口通讯的远距离传输及抗干扰能力,它使用-15V表示逻辑1,+15V表示逻辑0。因为控制器一般使用TTL电平标准,所以常常会使用MA3232芯片对TTL及RS-232电平的信号进行互相转换。


RS-232信号线

在最初的应用中,RS-232串口标准常用于计算机、路由与调制调解器(MODEN,俗称“猫”)之间的通讯 ,在这种通讯系统中,设备被分为数据终端设备DTE(计算机、路由)和数据通讯设备DCE(调制调解器)。我们以这种通讯模型讲解它们的信号线连接方式及各个信号线的作用。


在旧式的台式计算机中一般会有RS-232标准的COM口(也称DB9接口)

接线口以针式引出信号线的称为公头,以孔式引出信号线的称为母头。在计算机中一般引出公头接口,而在调制调解器设备中引出的一般为母头,使用上图中的串口线即可把它与计算机连接起来。通讯时,串口线中传输的信号就是使用前面讲解的RS-232标准调制的。

信号线说明

image.png


串口线中的RTS、CTS、DSR、DTR及DCD信号,使用逻辑 1表示信号有效,逻辑0表示信号无效。例如,当计算机端控制DTR信号线表示为逻辑1时,它是为了告知远端的调制调解器,本机已准备好接收数据,0则表示还没准备就绪。


在目前的其它工业控制使用的串口通讯中,一般只使用RXD、TXD以及GND三条信号线,直接传输数据信号。


1.2 协议层

串口通讯的数据包由发送设备通过自身的TXD接口传输到接收设备的RXD接口。在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。


波特率

两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码,图 中用虚线分开的每一格就是代表一个码元。常见的波特率为4800、9600、115200等。


通讯的起始和停止信号

串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑0的数据位表示,而数据包的停止信号可由0.5、1、1.5或2个逻辑1的数据位表示,只要双方约定一致即可


有效数据

在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为5、6、7或8位长。


数据校验

在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验(odd)、偶校验(even)、0校验(space)、1校验(mark)以及无校验(noparity)


奇校验要求有效数据和校验位中“1”的个数为奇数

偶校验与奇校验要求刚好相反,要求帧数据和校验位中“1”的个数为偶数

0校验是不管有效数据中的内容是什么,校验位总为“0”,1校验是校验位总为“1”。

在无校验的情况下,数据包中不包含校验位

2  ST USART

2.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.2 重要状态

编程重要状态

image.png

空闲字符 可理解为整个帧周期内电平均为“1”(停止位的电平也是“1”),该字符后是下一个数据帧的起始位。

停止字符 可理解为在一个帧周期内接收到的电平均为“0”。发送器在中断帧的末尾插入 1 或 2 个停止位(逻辑“1”位)以确认起始位。


2.3 编程要点

常规中断方式:


使能RX和TX引脚GPIO时钟和USART时钟

初始化GPIO,并将GPIO复用到USART上

配置USART参数;

配置中断控制器并使能USART收发中断;

使能USART;

在USART接收中断服务函数实现数据接收和发送

DMA中断方式:


使能RX和TX引脚GPIO时钟和USART时钟

初始化GPIO,并将GPIO复用到USART上

配置USART参数;

配置中断控制器并使能USART DMA 收发中断

配置DMA参数及关联数据BUF并配置传输完成中断

使能USART

通过IDLE空闲中断来标识单帧传输完成,计数数据大小,并配合DMA缓存满中断完成数据接收判断

通过重置DMA计数和使能DMA发送

注意考虑接收超过缓存大小时,关闭DMA传输,进入等待IDLE,然后,处理数据,超出直接丢掉

2.4 代码实例

重定向prinft和scanf函数


在C语言标准库中,fputc函数是printf函数内部的一个函数,功能是将字符ch写入到文件指针f所指向文件的当前写指针位置,简单理解就是把字符写入到特定文件中。我们使用USART函数重新修改fputc函数内容,达到类似“写入”的功能。介于某些情况下,硬件并不一定有UART,亦可以类似方法重定义到RAM来方便调试,后续专门介绍。


fgetc函数与fputc函数非常相似,实现字符读取功能。在使用scanf函数时需要注意字符输入格式。

还有一点需要注意的,使用fput和fgetc函数达到重定向C语言标准库输入输出函数必须在MDK的工程选项把“Use MicroLIB”勾选上,MicoroLIB是缺省C库的备选库,它对标准C库进行了高度优化使代码更少,占用更少资源。当然,维库在某些特殊条件下并不需要,比如RL_FLASH,通过其他方式来实现重定向。


为使用printf、scanf函数需要在文件中包含stdio.h头文件。


///重定向c库函数printf到串口,重定向后可使用printf函数

int fputc(int ch, FILE *f)

{

/* 发送一个字节数据到串口 */

USART_SendData(DEBUG_USART, (uint8_t) ch);

/* 等待发送完毕 */

while (USART_GetFlagStatus(DEBUG_USART, USART_FLAG_TXE) == RESET);

return (ch);

}

 

///重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数

int fgetc(FILE *f)

{

/* 等待串口输入数据 */

while (USART_GetFlagStatus(DEBUG_USART, USART_FLAG_RXNE) == RESET);

 

return (int)USART_ReceiveData(DEBUG_USART);

}

关键字:秉火  USART  串口通信 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic474288.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:秉火429笔记之九 中断应用概述
下一篇:秉火429笔记之十五 DMA--直接存储区访问

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

秉火429笔记之十 EXTI-外部中断/事件
1. EXTI 简介外部中断/事件控制器(EXTI)管理了控制器的23个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。EXTI 控制器的主要特性如下: 每个中断/事件线上都具有独立的触发和屏蔽每个中断线都具有专用的状态位支持多达 23 个软件事件/中断请求检测脉冲宽度低于 APB2 时钟宽度的外部信号。 2. EXTI 功能框图3. 功能点要产生中断,必须先配置好并使能中断线。要产生事件,必须先配置好并使能事件线。通过在软件中对软件中断/事件寄存器写“1”,也可以产生
发表于 2019-09-12
秉火429笔记之十 EXTI-外部中断/事件
秉火429笔记之十一 Systick--滴答定时器
SysTick—系统定时器是属于CM4内核中的一个外设,内嵌在NVIC中。系统定时器是一个24bit的向下递减的计数器。所有基于CM4内核的单片机都具有这个系统定时器,使得软件在CM4单片机中可以很容易的移植。系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。2. 寄存器说明CTRL  SysTick控制及状态寄存器LOAD  SysTick重装载数值寄存器VAL SysTick当前数值寄存器CALIB SysTick校准数值寄存器(可忽略)3. 编程要点__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks){  if ((ticks
发表于 2019-09-12
秉火429笔记之十一 Systick--滴答定时器
秉火429笔记之十二 看门狗
1. 概述STM32有两个看门狗,一个是独立看门狗,另外一个是窗口看门狗,独立看门狗号称宠物狗,窗口看门狗号称警犬。一般情况下,使用频次较高是独立看门狗,也即是通常意义的看门狗。2. 独立看门狗(IWDG)一个12位的递减计数器,最大值为0XFFF,当计数器的值从某个值一直减到0的时候,系统就会产生一个复位信号,即IWDG_RESET。如果在计数没减到0之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们经常说的喂狗。看门狗功能由 VDD 电压域供电,在停止模式和待机模式下仍能工作.看门狗时钟独立看门狗的时钟由独立的RC振荡器LSI提供,即使主时钟发生故障它仍然有效,非常独立。LSI的频率一般在30~60KHZ之间,
发表于 2019-09-12
秉火429笔记之十二 看门狗
秉火429笔记之十五 DMA--直接存储区访问
1. 简介直接存储器访问 (DMA) 用于在外设与存储器之间以及存储器与存储器之间提供高速数据传 输。可以在无需任何 CPU 操作的情况下通过 DMA 快速移动数据。这样节省的 CPU 资源可 供其它操作使用。从硬件层次上来说,DMA控制器是独立于Cortex-M4内核的,有点类似GPIO、USART外设一般,只是DMA的功能是可以快速移动内存数据。STM32F4xx系列的DMA支持外设到存储器传输、存储器到外设传输和存储器到存储器传输三种传输模式。这里的外设一般指外设的数据寄存器,比如ADC、SPI、I2C、DCMI等等外设的数据寄存器,存储器一般是指片内SRAM、外部存储器、片内Flash等等。外设到存储器传输。比如进行ADC采
发表于 2019-09-12
秉火429笔记之十五 DMA--直接存储区访问
秉火429笔记之九 中断应用概述
1. 中断类型在此不严格区分中断和异常,即简单的认为中断与异常一个概念。M4 内核搭载了异常响应系统,支持众多的系统异常和外部中断。其中,F429芯片,系统异常10个,外部中断91个。除个别异常的优先级固定外,其它均可编程。stm32f4xx.htypedef enum IRQn{/******  Cortex-M4 Processor Exceptions Numbers ****************************************************************/  NonMaskableInt_IRQn         =
发表于 2019-09-12
秉火429笔记之九 中断应用概述
Stm32F407ZGT6 串口通迅 usart2
正点原子的开发板,一定要注意跳线帽串口2usart2.h//STM32F407 zgt6 串口2#ifndef __USART2_H#define __USART2_H#include "sys.h" #define USART2_MAX_RECV_LEN 200#define USART2_MAX_SEND_LEN 200extern u8 USART2_RX_buf[USART2_MAX_RECV_LEN];extern u8 USART2_TX_buf[USART2_MAX_SEND_LEN];extern u16 USART2_RX_STA;      &nbs
发表于 2019-10-09
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved