侧边栏壁纸
博主头像
thinkTV博主等级

喜爱动漫的二刺螈一枚,摩托车云爱好者(快要有车了)。 懂一点技术的在读生物医学工程研究生( •̀ ω •́ )✧,多多指教。

  • 累计撰写 127 篇文章
  • 累计创建 17 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

STM32串口

thinkTV
2023-06-27 / 0 评论 / 0 点赞 / 153 阅读 / 1,205 字 / 正在检测是否收录...

1. 数据通信基础概念

1.1 串行/并行通信

图片-1687855417299

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

图片-1687855597969

  • 单工通信:数据只能沿一个方向传输
  • 半双工通信:数据可以沿两个方向传输,但需要分时进行
  • 全双工通信:数据可以同时进行双向传输

1.3 同步/异步通信

图片-1687873544721

  • 同步通信:共用同一时钟信号
  • 异步通信:没有时钟信号,通过在数据信号中加入起始位和停止位等一些同步信号

1.4 波特率

  1. 比特率:每秒钟传送的比特数,单位bit/s
  2. 波特率:每秒钟传送的码元数,单位Baud
  3. 比特率 = 波特率 * log2 M ,M表示每个码元承载的信息量
  4. 二进制系统中,波特率数值上等于比特率

1.5 常见的串行通信接口

图片-1688006813568

2. 串口(RS-232)

2.1 串口的定义

串行通信接口:指按位发送和接收的接口。如:RS-232/422/485等

RS-232接口(DB9)

图片-1688010540974

数据:

  • TXD(pin 3):串口数据输出
  • RXD(pin 2):串口数据输入
    握手:
  • RTS(pin 7):请求发送
  • CTS(pin 8):清除发送
  • DSR(pin 6):数据发送就绪
  • DCD(pin 1):数据载波检测
  • DTR(pin 4):数据终端就绪
    地线:
  • GND(pin 5):信号地
    其他:
  • RI(pin 9):振铃指示

2.2 RS-232电平与COMS/TTL电平对比

电平类型 逻辑1 逻辑0
RS-232电平 -15V ~ -3V +3V ~ +15V
COMS电平 3.3V 0V
TTL电平 5V 0V

2.3 设备间RS-232通信

图片-1688022820522

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

图片-1688024235174

2.5 RS-232异步通信协议

图片-1688024258663

  • 启动位:必须占1个位长,保持逻辑0电平
  • 有效数据位:可选5、6、7、8、9个位长,LSB在前,MSB在后
  • 校验位:可选占1个位长,也可以没有该位
  • 停止位:必须有,可选占0.5、1、1.5、2个位长,保持逻辑1电平

3. STM32的USART

  • Universal synchronous asynchronous receiver transmitter,通用同步异步收发器
  • Universal asynchronous receiver transmitter,通用异步收发器
  • USART/UART都可以与外部设备进行全双工异步通信
  • USART,我们常用的也是异步通信

3.1 STM32的USART主要特征

  1. 全双工异步通信
  2. 单线半双工通信
  3. 单独的发送器和接收器使能位
  4. 可配置使用DMA的多缓冲器通信
  5. 多个带标志的中断源

3.2 STM32F1/F4/F7的USART框图

图片-1688106863052

STM32F1/F4/F7/H7的USART框图简化版

图片-1688107029800

3.5 设置USART波特率(F1)

图片-1688107073468

波特比率寄存器(BRR)

图片-1688107098486

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

图片-1688107404640

5. HAL库中断回调机制

图片-1688107480663

6. USART/UART异步通信配置步骤

图片-1688107599097

HAL库相关函数介绍

  1. HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
关键结构体(F1):
typedef struct 
{    uint32_t BaudRate; 		/* 波特率 */ 
     uint32_t WordLength; 	/* 字长 */
     uint32_t StopBits; 		/* 停止位 */ 
     uint32_t Parity; 			/* 奇偶校验位 */ 
     uint32_t Mode; 			/* UART 模式 */ 
     uint32_t HwFlowCtl; 		/* 硬件流设置 */ 
     uint32_t OverSampling; 	/* 过采样设置 */ 
}UART_InitTypeDef

  1. HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart,uint8_t *pData, uint16_t Size)

作用:以中断的方式接收指定字节的数据

  • 形参 1 是 UART_HandleTypeDef 结构体类型指针变量
  • 形参 2 是指向接收数据缓冲区
  • 形参 3 是要接收的数据大小,以字节为单位
  1. HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

作用:以阻塞的方式发送指定字节的数据

  • 形参 1 :UART_HandleTypeDef 结构体类型指针变量
  • 形参 2:指向要发送的数据地址
  • 形参 3:要发送的数据大小,以字节为单位
  • 形参 4:设置的超时时间,以ms单位

7. IO引脚复用功能

7.1 复用功能概念

  • IO端口的输入或输出是由GPIO外设控制,我们称之为通用
  • IO端口的输入或输出是由其它非GPIO外设控制,我们称之为复用

7.2 STM32F1的IO引脚复用

IO复用功能冲突问题:同一时间IO只能用作一种复用功能,否则会发生冲突

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

复用器特点:

  1. 每个 IO 引脚都有一个复用器
  2. 复用器采用 16 路复用功能输入(AF0 到 AF15)
  3. 复用器一次仅允许一个外设的复用功能 (AF) 连接到 IO 引脚
  4. 通过GPIOx_AFRL和GPIOx_AFRH寄存器进行配置
0

评论区