没有合适的资源?快使用搜索试试~ 我知道了~
STM32-串口,中断的思维导图
资源推荐
资源详情
资源评论
串口
1,数据通信的基础概念(了解)
2,串口(RS-232)(熟悉)
6,USART/UART异步通信配置步骤(掌握)
4,HAL库外设初始化MSP回调机制(了解)
5,HAL库中断回调机制(了解)
2.1,串口
2.2,RS-232电平与COMS/TTL电平对比
2.3,设备间的RS-232通信示意图
8,编程实战:通过串口接收或者发送一个字符(掌握)
10,课堂总结(掌握)
1,什么是串口?
2,RS-232接口(DB9)
使用MAX3232或者SP3232等电平转换芯片、TXD和RXD必须交差连接
3,STM32的USART(熟悉)
数据通信常见类型
常见的串行通信接口
SPI
按数据通信方式分类
UART
1-wire
IIC
同步全双工
1,RS-232电平
2,COMS电平(3.3V)
3, TTL电平(5V)
结论:COMS/TTL电平不能与RS-232电平直接交换信息
2.5,RS-232异步通信协议
启动位
有效数据位
按数据传输方向分类
3.1,STM32的USART简介
Universal synchronous asynchronous receiver transmitter,通用同步异步收发器
Universal asynchronous receiver transmitter,通用异步收发器
USART/UART都可以与外部设备进行全双工异步通信
USART,我们常用的也是异步通信
3.2, STM32的USART主要特征
2.4, STM32串口与电脑USB口通信示意图
使用CH340C等USB/串口转换芯片、TXD和RXD必须交差连接、安装CH340 USB虚拟串口驱动
校验位
停止位
3.3, STM32F1/F4/F7的USART框图
3.4,STM32H7的USART框图
1,全双工异步通信
2,单线半双工通信
框图介绍
框图介绍
1,配置串口工作参数
HAL_PPP_Init()-->HAL_PPP_MspInit()
中断服务函数-->HAL_PPP_IRQHandler()-->HAL_PPP_xxxCallback()
HAL_PPP_xxxCallback()作用:根据回调函数类型,编写对应的中断处理程序,用户可选择是否使用并重新定义该函数
CH340 USB转串口原理图(战舰)
编程实战:通过串口接收或者发送一个字符
HAL_PPP_MspInit()作用:配置PPP外设用到的硬件,如:GPIO、NVIC、CLOCK等,用户可选择是否使用并重新定义该函数
按数据同步方式分类
波特率
串行通信
并行通信
单工通信
半双工通信
全双工通信
同步通信
异步通信
比特率:每秒钟传送的比特数,单位bit/s
数据逐位按顺序依次传输
数据各位通过多条线同时传输
数据只能沿一个方向传输
数据可以沿两个方向传输,但需要分时进行
数据可以同时进行双向传输
共用同一时钟信号
没有时钟信号,通过在数据信号中加入起始位或停止位等一些同步信号
波特率:每秒钟传送的码元数,单位Baud
二进制系统中,波特率数值上等于比特率
异步全双工通信
异步半双工
同步半双工
9,解读例程源码:串口实验
串行通信接口:指按位发送和接收的接口。如:RS-232/422/485等
逻辑1:-15V ~ -3V 逻辑0:+3V ~ +15V
逻辑1:3.3V 逻辑0:0V
逻辑1:5V 逻辑0:0V
数据线:TXD/RXD,信号地:GND
必须占1个位长,保持逻辑0电平
可选5、6、7、8、9个位长,LSB在前,MSB在后
可选占1个位长,也可以没有该位
必须有,可选占0.5、1、1.5、2个位长,保持逻辑1电平
比特率 = 波特率 * log2 M ,M表示每个码元承载的信息量
3.5,设置USART波特率(F1)
3.6,设置USART波特率(F4)
3.7,设置USART波特率(F7)
3.8,设置USART波特率(H7)
3.9,USART寄存器介绍(F1)
3,单独的发送器和接收器使能位
4,可配置的使用DMA的多缓冲器通信
5,多个带标志的中断源
参考:STM32xxxx参考手册(中文版).pdf USART相关章节
简化版框图:数据发送/接收过程
波特率计算公式:baud=fck /(16∗USARTDIV)
波特比率寄存器(BRR)
如何使用寄存器操作的方式设置波特率
其中fck是串口的时钟,如:USART1的时钟是PCLK2,其他串口都是PCLK1
把USARTDIV的整数部分写入位[15:4], USARTDIV的小数部分写入[3:0]
波特率设置通用公式推演(F1)
波特率计算公式:baud=fck /(8∗(2−OVER8)∗USARTDIV)
波特率寄存器(BRR)
8倍过采样波特率计算公式:baud=2*fck /USARTDIV
16倍过采样波特率计算公式:baud=fck /USARTDIV
其中fck是串口的时钟,参考:RCC 专用时钟配置寄存器 (DCKCFGR)
波特率寄存器(BRR)
OVER8=0,使用的是16倍过采样,OVER8=1,使用的是8倍过采样
由USART_CR1寄存器的位15设置16/8倍过采样
由USART_CR1寄存器的位15设置16/8倍过采样
16倍过采样波特率计算公式:baud=usart_ker_ckpres/USARTDIV
8倍过采样波特率计算公式:baud=2*usart_ker_ckpres/USARTDIV
其中 usart_ker_ckpres是串口的工作时钟,
参考:RCC 域 2 内核时钟配置寄存器 (RCC_D2CCIP2R)
波特率寄存器(BRR)
由USART_CR1寄存器的位15设置16/8倍过采样
控制寄存器1(CR1)
控制寄存器2(CR2)
控制寄存器3(CR3)
数据寄存器(DR)
状态寄存器(SR)
该寄存器需要完成的配置:
位13:使能USART
位12:配置8个数据位
位10:禁止检验控制
位5:使能接收缓冲区非空中断
位3:使能发送
位2:使能接收
该寄存器需要完成的配置:配置1个停止位
该寄存器需要完成的配置:配置不选择半双工模式
设置好控制和波特率寄存器后,往该寄存器写入数据即可发送,接收数据则读该寄存器
根据TC位可以知道能否发数据,根据RXNE位知道是否收到数据
例子:USART
例子:USART
2,串口底层初始化
3,开启串口异步接收中断
4,设置优先级,使能中断
5,编写中断服务函数
6,串口数据发送
HAL_UART_Init()
HAL_UART_MspInit() 配置GPIO、NVIC、CLOCK等
HAL_UART_Receive_IT()
HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()
USARTx_IRQHandler()、 UARTx_IRQHandler()
USART_DR, HAL_UART_Transmit()
USART/UART - HAL库相关函数介绍
1,HAL_UART_Init()
2,HAL_UART_Receive_IT()
7,IO引脚复用功能(掌握)
7.1,何为复用?
7.2,STM32F1的IO引脚复用
7.3,STM32F4/F7/H7的IO引脚复用
IO端口的输入或输出是由GPIO外设控制,我们称之为通用
IO端口的输入或输出是由其它非GPIO外设控制,我们称之为复用
1,各IO支持什么复用功能
2,IO复用功能冲突问题
3,遇到IO复用功能冲突
可查数据手册引脚定义
同一时间IO只能用作一种复用功能,否则会发生冲突
可考虑重映射功能,后续课程会讲
为了解决F1系列存在的IO复用功能冲突问题,F4往后的系列都加入了复用器
复用器特点
温馨提示:IO引脚与AF(0~15)具体定义关系,需要参考对应的芯片数据手册
IO引脚复用映射示意图
1、每个 IO 引脚都有一个复用器
2、复用器采用 16 路复用功能输入(AF0 到 AF15)
3、复用器一次仅允许一个外设的复用功能 (AF) 连接到 IO 引脚
4、通过GPIOx_AFRL和GPIOx_AFRH寄存器进行配置
温馨提示:复位完成后,所有 IO 都会连接到系统的复用功能 0 (AF0)
GPIO 复用功能低位寄存器(AFRL)、GPIO 复用功能高位寄存器(AFRH)
3,HAL_UART_Transmit()
需要注意的是:通过P4端子,实现TX和RX交差连接
来自printf函数的疑问
结论:printf函数打印是一件“挺费时的事”,实际产品尽量少用,以免影响整体性能
串口发送数据过程
串口接收数据过程
资源评论
我要你咬了一口的梨
- 粉丝: 358
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功