串口

时间:2023-01-13
本文章向大家介绍串口,主要内容包括一、数据通信基础概念、1、串行/并行通信、2、单工/半双工/全双工通信、3、同步/异步通信、4、波特率、5、常见的串行通信接口、二、串口(RS-232)、1、什么是串口、2、RS-232电平与COMS/TTL电平对比、使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

串口

一、数据通信基础概念

1、串行/并行通信

2、单工/半双工/全双工通信

3、同步/异步通信

4、波特率

5、常见的串行通信接口

二、串口(RS-232)

1、什么是串口

2、RS-232电平与COMS/TTL电平对比

3、设备间的RS232通信示意图

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

5、RS-232异步通信协议

三、STM32-USART

1、STM32的USART简介

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

2、STM32的USART主要特征

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

3、STM32F1/F4/F7的USART框图

4、STM32H7的USART框图

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

6、设置USART波特率(F1)

波特比率寄存器(BRR)

使用寄存器设置波特率 - USART1为例

波特率设置通用公式推演(F1)

7、设置USART波特率(F4)

波特率寄存器(BRR)

8、设置USART波特率(F7)

波特率寄存器(BRR)

9、设置USART波特率(H7)

波特率寄存器(BRR)

10、USART寄存器介绍(F1)

控制寄存器1(CR1)

控制寄存器2(CR2)

控制寄存器3(CR3)

数据寄存器(DR)

状态寄存器(SR)

需要配置的时序总结

四、HAL 库外设初始化MSP回调机制

1、HAL库外设初始化MSP回调机制- USART为例

五、HAL 库中断回调机制

1、HAL库中断回调机制 - USART为例(F1)

UART中断回调函数:
HAL_UART_TxCpltCallback()               /* 发送完成回调函数 */
HAL_UART_TxHalfCpltCallback()           /* 半发送完成回调函数 */
HAL_UART_RxCpltCallback()               /* 接收完成回调函数 */
HAL_UART_RxHalfCpltCallback()           /* 半接收完成回调函数 */
HAL_UART_ErrorCallback()                /* UART错误回调函数 */
HAL_UART_AbortCpltCallback()            /* UART中止回调函数 */
HAL_UART_AbortTransmitCpltCallback()    /* UART发送中止回调函数 */
HAL_UART_AbortReceiveCpltCallback()     /* UART接收中止回调函数 */

六、USART/UART 异步通信配置步骤

功能 函数
配置串口工作参数 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()

1、HAL库相关函数介绍

  • 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
    
  • HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

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

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

七、IO 引脚复用功能

1、何为复用?

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

2、STM32F1的IO引脚复用

3、STM32F4/F7/H7的IO引脚复用

IO引脚复用映射示意图

GPIO 复用功能低位寄存器(AFRL)

GPIO 复用功能高位寄存器(AFRH)

八、串口接收过程


原文地址:https://www.cnblogs.com/lxd-koi/p/17045244.html