嵌入式开发学习之--串口通讯(上)
创始人
2024-04-20 19:39:43
0

提示:本篇开始学习各种通讯方式,重中之重。

文章目录

  • 前言
  • 一、 串口通讯协议简介
    • 1.1 物理层
    • 1.2 协议层
      • 1.2.1 基本组成。
      • 1.2.2 波特率
      • 1.2.3 起始和终止位
      • 1.2.4 有效数据
      • 1.2.5 数据校验
  • 二、USART结构体详解
  • 总结


前言

作为一个嵌入式的开发者,解析信息、传递信息是十分重要的,前面一篇大致介绍了通讯的概念,这一篇一个很常用的通讯方式——串口通讯。


提示:以下是本篇文章正文内容,下面案例可供参考

一、 串口通讯协议简介

首先,对串口通讯协议我们分为物理层和协议层两个层面来理解,物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输,比如有几根线,电压多少等等。协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准,比如帧头帧尾校验位等等。

1.1 物理层

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

在这里插入图片描述
我们知道常见的电子电路中常使用 TTL 的电平标准,理想状态下,使用 5V 表示二进制逻辑 1,使用 0V 表示逻辑 0;而为了增加串口通讯的远距离传输及抗干扰能力,它使用-15V 表示逻辑 1,+15V 表示逻辑 0。

因为控制器一般使用 TTL 电平标准,所以常常会使用 MA3232 芯片对 TTL 及 RS-232电平的信号进行互相转换。

下图是db9接口线序,只需要知道rx,tx,gnd位置就好了。其他的没用。
在这里插入图片描述

1.2 协议层

1.2.1 基本组成。

串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成。

在这里插入图片描述

1.2.2 波特率

异步通讯中由于没有时钟信号(如前面讲解的 DB9接口中是没有时钟信号的),所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码,图 20-6 中用虚线分开的每一格就是代表一个码元。

1.2.3 起始和终止位

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

1.2.4 有效数据

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

1.2.5 数据校验

校验方式主要包含:校验方法有奇校验(odd)、偶校验(even)、0 校验(space)、1 校验(mark)以及无校验(noparity)。

奇校验要求有效数据和校验位中“1”的个数为奇数,比如一个 8 位长的有效数据
为:01101001,此时总共有 4 个“1”,为达到奇校验效果,校验位为“1”,最
后传输的数据将是 8 位的有效数据加上 1 位的校验位总共 9 位。

偶校验与奇校验要求刚好相反,要求帧数据和校验位中“1”的个数为偶数,比如
数据帧:11001010,此时数据帧“1”的个数为 4 个,所以偶校验位为“0”。

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

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

二、USART结构体详解

标准库函数对每个外设都建立了初始化结构体,如USART_InitTypeDef,结构体成员用于设置外设工作参数,并由外设初始化配置函数,比如 USART_Init()调用,这些设定参数将会设置外设相应的寄存器,达到配置外设工作环境的目的。

初始化结构体和初始化库函数配合使用是标准库精髓所在,理解了初始化结构体每个成员意义基本上就可以对该外设运用自如了。初始化结构体定义在 stm32f4xx_usart.h 文件中,初始化库函数定义在 stm32f4xx_usart.c 文件中,编程时我们可以结合这两个文件内注释使用。

USART 初始化结构体

1 typedef struct {
2 uint32_t USART_BaudRate; // 波特率
3 uint16_t USART_WordLength; // 字长
4 uint16_t USART_StopBits; // 停止位
5 uint16_t USART_Parity; // 校验位
6 uint16_t USART_Mode; // USART 模式
7 uint16_t USART_HardwareFlowControl; // 硬件流控制
8 } USART_InitTypeDef;
  1. USART_BaudRate:波特率设置。一般设置为 2400、9600、19200、115200。

  2. USART_WordLength:数据帧字长,可选 8 位或 9 位。它设定USART
    _CR1 寄存器的 M 位的值。如果没有使能奇偶校验控制,一般使用 8 数据位;如果使能了奇偶校验则一般设置为 9 数据位。

  3. USART_StopBits:停止位设置,可选 0.5 个、1 个、1.5 个和 2 个停止位,它设定USART_CR2 寄存器的 STOP[1:0]位的值,一般我们选择 1 个停止位。

  4. USART_Parity : 奇 偶 校 验 控 制 选 择 , 可 选 USART_Parity_No( 无校验 ) 、USART_Parity_Even( 偶校验 ) 以 及 USART_Parity_Odd( 奇 校 验 ) , 它 设 定USART_CR1 寄存器的 PCE 位和 PS 位的值。

  5. USART_Mode:USART 模式选择,有 USART_Mode_Rx 和 USART_ Mode_Tx,允许使用逻辑或运算选择两个,它设定 USART_CR1 寄存器的 RE 位和 TE 位。

  6. USART_HardwareFlowControl:硬件流控制选择,只有在硬件流控制模式才有效,可选使能 RTS、使能 CTS、同时使能 RTS 和 CTS、不使能硬件流。

USART 时钟初始化结构体

1 typedef struct {
2 uint16_t USART_Clock; // 时钟使能控制
3 uint16_t USART_CPOL; // 时钟极性
4 uint16_t USART_CPHA; // 时钟相位
5 uint16_t USART_LastBit; // 最尾位时钟脉冲
6 } USART_ClockInitTypeDef;
  1. USART_Clock:同步模式下 SCLK 引脚上时钟输出使能控制,可选禁止时钟输出(USART_Clock_Disable)或开启时钟输出(USART_Clock_Enable);如果使用同步模式发送,一般都需要开启时钟设定 USART_CR2 寄存器CLKEN 位的值。
  1. USART_CPOL:同步模式下 SCLK 引脚上输出时钟极性设置,可设置在空闲时SCLK 引脚为低电平(USART_CPOL_Low)或高电(USART_CPOL_ High)。它设定 USART_CR2 寄存器的 CPOL 位的值。

  2. USART_CPHA:同步模式下 SCLK 引脚上输出时钟相位设置,可设置在时钟第一个变化沿捕获数据(USART_CPHA_1Edge)或在时钟第二个变化沿捕获数据。它设定 USART_CR2 寄存器的 CPHA 位的值。USART_CPHA 与 USART_CPOL 配合使用可以获得多种模式时钟关系。

  3. USART_LastBit:选择在发送最后一个数据位的时候时钟脉冲是否在 SCLK 引脚输 出 , 可 以 是 不 输 出 脉 冲 (USART_LastBit_Disable) 、 输 出 脉 冲
    (USART_LastBit_Enable)。它设定 USART_CR2 寄存器的 LBCL 位的值。


总结

本篇主要从硬件层和协议层了解了串口协议,知道了串口协议大体是个什么东西,最后学习了串口的结构体配置,这个是很重要的,配置串口通信全靠它。下一篇,做一个关于串口的实验。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...