写在前面:本节我们学习STM32F1串口,说实话,对于一个初学者来说,在学习这节内容的时候,牵涉的一些知识使我也很困惑。特别是利用HAL库的中断回调机制。至此,对于有些内容我依旧是感到迷惑,还是希望多看,多试尽力的有一个好的理解。
目录
一、数据通信的基本概念
在学习单片机中,数据的通信是不可缺少的一部分,比如:模块之间的数据传输,单片机同上位机之间的数据传输,而不同的数据传输拥有不同的传输协议。比如:UART、IIC、SPI、USB等等。所以在使用这些传输方式之前,我们需要对一些基本的概念做一了解。
1.1串并行通信
按照数据通信方式分为:串行通信与并行通信;
串行通信:数据逐位按顺序依次进行传输;
并行通信:数据各位通过多条线同时进行传输;(8位、16位、32位等)
1.2单工、半双工与全双工通信
根据数据传输方向,通信又可分为全双工、半双工和单工通信;
单工:指数据传输仅能沿一个方向,不能实现反方向传输,如校园广播。
半双工:指数据传输可以沿着两个方向,但是需要分时进行,如对讲机。
全双工:指数据可以同时进行双向传输,日常的打电话属于这种情形。
1.3同步、异步通信
根据数据同步方式,通信又可分为同步通信和异步通信。
同步通信:要求通信双方共用同一时钟信号,在总线上保持统一的时序和周期完成信息传输。
异步通信:不需要时钟信号,而是在数据信号中加入开始位和停止位等一些同步信号,以便使接收端能够正确地将每一个字符接收下来,某些通信中还需要双方约定传输速率。
同步通信:共用一根时钟信号;
异步通信:没有时钟信号,通过在数据信号中加入起始位和检验位等同步信号;
1.4通信速率
通信速率:指数据在信道中的传输速度;它分为两种:传信率和传码率。
传信率:每秒钟传输的信息量,即每秒钟传输的二进制位数,单位为 bit/s(即比特每秒), 因而又称为比特率。
传码率:每秒钟传输的码元个数,单位为 Baud(即波特每秒),因而又称为波特率。
采用二进制的时候,波特率和比特率数值上相等。我们需要知道的是,在通信时,需要保证通信双方的传输速率相同,这样才能保证数据传输过程中不会出错。
1.5常见的串行通信接口
接口名称 | 通信线 | 通信方式 | 数据传输方向 |
UART | TXD RXD GND |
异步 | 全双工 |
I-wire | DQ | 异步 | 半双工 |
IIC | SCL SDA |
同步 | 半双工 |
SPI | SCK MISO MOSI CS |
同步 | 全双工 |
注:不是有两根数据线就是全双工,而是有输入、输出信道才为全双工;
二、串行通信接口(RS-232)
什么是串口呢?
串口是指串行通信接口:指按位发送和接收的接口;也称为串口通信。像UART、IIC、SPI都属于串口通信,但是三者存在一定的差距也就是所谓的协议。
什么是串行通信接口标准呢?
是指用来进行串行通信的物理接口标准,它只表征了电气特性,而不涉及到接插件、电缆、协议等。
对于RS-232接口标准来说:
数据线:
TXD——串口数据输出;
RXD——串口数据输入;
电平:
逻辑1:-15到-3V;
逻辑0:+3到+15V
显然,从电平标准来说,RS-232的电平不能同coms/TTL电平(32单片机、51单片机)进行交换信息;因此在使用该接口标准的时候需要进行转化电路。
电路中添加一个 USB 转串口芯片,就可以实现 USB 通信协议和标准 UART 串行通信协议的转换,而我们开发板上的 USB 转串口芯片是 CH340C 这个芯片
串口通信协议:
串口通信的数据包由发送设备的 TXD 接口传输到接收设备的 RXD 接口。在串口通信的协 议层中,规定了数据包的内容,它由起始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。
1、启动位:必须占用1个位长,保持逻辑0电平;
2、有效数据位:地位在前,高位在后,可为5.6.7.8.9位长;
3、检验位:可选占1个位长也可以没有;
4、停止位:必须有,可选占0.5、1、1.5、2个位长;
三、STM32的USART
3.1 USART简介
stm32的usart是开发板实现串口通信的外设;
USART:通用同步异步收发器;
UART:通用异步收发器;
USART/UART都可以与外部设备进行全双工异步通信,对于USAR可以同步也可以异步,我们常用的是异步。
特点:
1、全双工异步通信;2、单线半双工通信;3、单独的发送器与接收器使能位;4、可配置使用DMA的多缓冲器通信;4、多个带标志的中断源。
STM32F1 有 3 个 USART 和 2 个 UART,其中 USART1 的时钟源来于 APB2 时钟,其最大频率为 72MHz,其他 4 个串口的时钟源可以来于 APB1 时钟,其最大频率为 36MHz。