【嵌入式学习笔记】---- 串口通信

1 串口

1.1 什么是串口

即串行通信接口,如:RS-232和RS-485

1.2 物理层

1.2.1 RS-232信号线

在旧式计算机中一般会有RS-232标准的COM口(也被称为DB9接口),如图:
image

信号线功能说明见下表:

引脚号 名称 符号 功能说明
1 载波检测 DCD 检测是否收到载波信号
2 接收数据 RXD 接受数据信号,即输入
3 发送数据 TXD 发送数据信号,即输出
4 数据终端就绪 DTR 向对方告知本机是否准备好
5 信号地 GND 共地
6 数据设备就绪 DSR 向对方告知本机是否处于待命状态
7 请求发送 RTS 请求发送
8 允许发送 CTS 回应RTS请求
9 响铃指示 RI 表示线路已接通

实际使用过程中,一般只使用RXD,TXD,GND三条信号线,就可实现数据传输

1.2.2 电平标准

通信标准 电平标准
CMOS电平(3.3V) 逻辑0:0V;逻辑1:3.3V
TTL电平(5.0V) 逻辑0:0-0.5V;逻辑1:2.4-5.0V
RS-232电平 逻辑0:+3至+15V;逻辑1:-15至-3V

CMOS/TTL电平不能直接与RS-232电平直接交换信息

1.2.3 通信结构图

RS-232通信:
image
STM32串口与电脑USB口通信:
image

1.3 协议层

串口数据包的组成:
image

1.3.1 起始位

必须占一个位长,且为逻辑0电平

1.3.2 有效数据位

起始位之后,可选5、6、7、8、9个位长,最低有效位在前,最高有效位在后

1.3.3 校验位

可选占一个位长,也可以没有该位

奇偶校验
奇校验:数据位中“1”的个数与校验位中“1”的个数之和应该为奇数
偶校验:数据位中“1”的个数与校验位中“1”的个数之和应该为偶数

②代码和校验:
发送方将所有要发送的数据块求和(或各字节异或),产生一个字节的校验字符(校验和)附加到数据块末尾。接收方接收数据的同时,对数据块求和(或各字节异或),将结果与发送方的校验和进行比较,相符表示传输正常

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

④无校验:数据包中没有校验位

1.3.4 停止位

可有0.5、1、1.5、2个位长。保持逻辑1电平

2 STM32的USART介绍

2.1 USART简介

Universal synchronous asynchronous receiver transmitter:通用同步异步收发器

Universal asynchronous receiver transmitter:通用异步收发器

2.2 通信流程图

image

2.3 波特率计算

波特率是指数据信号对载波的调制速率
\(波特率=\frac{f_{PLCK}}{16*USARTDIV}\)

  • 其中\(f_{PLCK}\)是USART的时钟
  • USARTDIV是存放在波特率寄存器(USART_BRR)的一个无符号定点数;DIV_Mantissa[11:0] 位定义 USARTDIV 的整数部分,DIV_Fraction[3:0] 位定义USARTDIV 的小数部分

使用寄存器操作设置波特率

波特率为115200;时钟为72MHz,得USARTDIV=39.0625

点击查看代码
uint16_t mantissa;
uint16_t fraction;
mantissa=39;
fraction=0.0625*16+0.5=0x01;  /*根据波特率公式计算,加0.5是进行四舍五入,减小误差*/
USART->BRR=(mantissa << 4)+fraction;

由于左移4位和乘以16倍是等价的,故可直接对USARTDIV进行操作即可,无需分整数小数,即
USART->BRR=USARTDIV * 16 + 0.5

posted @ 2024-01-11 16:14  晚风也温柔  阅读(10)  评论(0编辑  收藏  举报