目录
1.数据通信的基础概念
1.1.串行/并行通信
按数据通信方式分类 :串行通信 、 并行通信
1.2.单工/半双工/全双工通信
按数据传输方向分类 :单工通信 、 半双工通信、全双工通信
单工通信:数据只能沿一个方向传输
半双工通信:数据可以沿两个方向传输,但需要分时进行
全双工通信:数据可以同时进行双向传输
1.3.同步/异步通信
按数据同步方式分类:同步通信、异步通信
1.4.波特率
1)比特率:每秒传送的比特数,单位 bit/s
2)波特率:每秒传送的码元数(数据帧数),单位Baud
3)比特率=波特率*(以2为底M的对数),M表示每个码元承载的信息量
比特率=波特率*单个调制状态对应的二进制位数
log(以2为底)每个码元承载的信息量=单个调制状态对应的二进制位数
如
数据传送速率为240符号/秒,
而每个字符格式包含10位(1个起始位,1个停止位,8个有效数据位),
这时的波特率为240 baud (波特),
比特率(有效数据位的传送速率)为240*10=2400 bps(比特每秒)。
再例如
假设数据传送速率为120符号/秒(symbol/s)(也就是波特率为120Baud),
又假设每一个符号为八相调制(单个调制状态对应3个二进制位),
则其传送的比特率为(120symbol/s) * (3bit/symbol)=360bps。
只有在每个符号只代表一个比特信息的情况、或一些简单的调制方式下,
例如基带二进制信号、Bell103或CCITTV.21(左列两种均为为FSK)调制方式等,
波特率与比特率才在数值上相等,但是它们的意义并不相同。
具体而言,
两相调制(单个调制状态对应1个二进制位)的比特率等于波特率;
四相调制(单个调制状态对应2个二进制位)的比特率为波特率的两倍;
八相调制(单个调制状态对应3个二进制位)的比特率为波特率的三倍,依次类推。
1.5.常见的串行通信接口
2.串口(RS-232)
2.1.什么是串口
串口,串行通信接口:指按位发送和接收的接口。如RS-232/422/485等
2.2.RS-232电平与CMOS/TTL电平对比
1)RS-232电平 逻辑1:-15V~-3V 逻辑0:+3V~+15V
2)CMOS电平(3.3V) 逻辑1: 3.3V 逻辑0: 0V --------------STM32
3)TTL电平(5V) 逻辑1: 5V 逻辑0: 0V --------------51
结论:CMOS/TTL电平不能与RS-232电平直接交换信息
2.3.设备间的RS-232通信示意图
2.4.STM32串口与电脑USB口通信示意图
2.5.RS-232异步通信协议
3.STM32的USART
3.1.STM32的USART简介
Universal Synchronous Asynchronous Receiver Transmitter , 通用同步异步收发器(USART)
Universal Asynchronous Receiver Transmitter , 通用异步收发器(UART)
USART/UART 都可以与外部设备进行全双工异步通信
USART,常用异步通信
3.2.STM32的USART主要特征
主要特征
1)全双工异步通信
2)单线半双工通信
3)单独的发送器和接收器使能位
4)可配置使用DMA的多缓冲器通信
5)多个带标志的中断源
字长设置
如何快速查看STM32某个外设的数量及其对应的引脚
参考:ST MCU 最新选型手册_201903.pdf STM32F103RCT6.pdf
3.3.STM32F1/F4/F7的USART框图
3.4.STM32H7的USART框图
STM32F1/F4/F7/H7的USART框图简化版
3.5.设置USART波特率(F1)
原理框图
如何使用寄存器操作的方式设置比特率
波特率设置通用公式推演(F1)
3.6.设置USART波特率(F4)
3.7.设置USART波特率(F7)
3.8.设置USART波特率(H7)
IO引脚复用映射示意图
3.9.USART寄存器介绍(F1)
1)控制寄存器1(CR1)
4.HAL库外设初始化MSP回调机制
以USART为例
Msp(MCU Support Package)
例:串口初始化函数HAL_UART_Init()与串口底层初始化函数HAL_UART_MspInit()
HAL_UART_Init()用于初始化串口通讯协议如波特率、有效位等
HAL_UART_MspInit()用于初始化于MCU相关的配置比如时钟、NVIC、GPIO等
这样在不同的MCU之间搬运代码时只需要修改HAL_UART_MspInit()而不用对HAL_UART_Init()进行修改。
5.HAL库中断回调机制
以USART为例
注意!!!! 官方HAL库中将所有外设的MspInit函数都放在stm32f1xx_hal_msp.c中,而正点原子将对应外设的MspInit函数放在了相应的外设.c文件中。
串口中断处理服务函数
6.USART/UART异步通信配置步骤(重点)
配置步骤
1.配置串口工作参数 HAL_UART_Init()
2.串口底层初始化 HAL_UART_MspInit()配置GPIO、NVIC、CLOCK等
3.开启串口异步接收中断 HAL_UART_Receive_IT()
4.设置优先级,使能中断 HAL_NVIC_SetPriority()、HAL_NVIC_EnableIRQ()
5.编写中断服务函数 USARTx_IRQHandler()、UARTx_IRQHandler()
6.串口数据发送 USART_DR,HAL_UART_Transmit()
HAL库相关函数介绍
7.IO引脚复用功能(重要)
对之前GPIO知识点的补充
7.1.何为复用?
1)通用
IO端口的输入或者输出是由GPIO外设控制
2)复用
IO端口的输入或者输出是由非GPIO外设控制 (USART、TIM、ADC、DAC...)
7.2.STM32F1的IO引脚复用
1)各IO支持什么复用功能
可查数据手册引脚定义
2)IO复用功能冲突问题
同一时间IO只能用作一种复用功能,否则会发生冲突,无法工作
3)遇到IO复用功能冲突
可考虑重映射
7.3.STM32F4/F7/H7的IO引脚复用
8.编程实战以及实验例程解读:通过串口接收或者发送字符串
(正点原子Mini板)
usart.c 文件源码
main.c 文件
实验时可以使用printf函数,但在开发产品时,为提高产品性能不建议使用。
9.总结