一篇笔记带你了解STM32串口

目录

1.数据通信的基础概念

1.1.串行/并行通信

1.2.单工/半双工/全双工通信

1.3.同步/异步通信

1.4.波特率

1.5.常见的串行通信接口

2.串口(RS-232)

2.1.什么是串口

2.2.RS-232电平与CMOS/TTL电平对比

2.3.设备间的RS-232通信示意图

2.4.STM32串口与电脑USB口通信示意图

2.5.RS-232异步通信协议

3.STM32的USART

3.1.STM32的USART简介

3.2.STM32的USART主要特征

主要特征

字长设置

​编辑​

如何快速查看STM32某个外设的数量及其对应的引脚

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)

3.9.USART寄存器介绍(F1)

1)控制寄存器1(CR1)

4.HAL库外设初始化MSP回调机制

5.HAL库中断回调机制

6.USART/UART异步通信配置步骤(重点)

配置步骤

HAL库相关函数介绍

7.IO引脚复用功能(重要)

7.1.何为复用?

7.2.STM32F1的IO引脚复用

7.3.STM32F4/F7/H7的IO引脚复用

8.编程实战以及实验例程解读:通过串口接收或者发送字符串

(正点原子Mini板)

9.总结


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.总结

 

 

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值