• 【STM32 HAL】串口中断控制相关


    引言

    在移植modbus时需要进行串口接收与发送中断的控制,由于hal库封装比较复杂,不便于精细操作。在此记录串口中断的控制函数,不详细介绍串口的寄存器控制,仅就如何使用入手。如果不理解请自行学习。

    串口中断类型

    STM32F103系列较为常用,打开文件可以看到所有hal库中关于串口的操作接口与说明。其中串口中断管理部分的函数说明中有写明可操作的串口中断种类有:

      * @arg UART_IT_CTS:  CTS change interrupt
      * @arg UART_IT_LBD:  LIN Break detection interrupt
      * @arg UART_IT_TXE:  Transmit Data Register empty interrupt
      * @arg UART_IT_TC:   Transmission complete interrupt
      * @arg UART_IT_RXNE: Receive Data register not empty interrupt
      * @arg UART_IT_IDLE: Idle line detection interrupt
      * @arg UART_IT_PE:   Parity Error interrupt
      * @arg UART_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    中断管理函数

    中断管理主要是开启中断、关闭中断和获取中断状态,在文件中也能看到。三条接口均是宏定义直接操作寄存器。

    使能中断 __HAL_UART_ENABLE_IT(HANDLE, INTERRUPT)

    __HANDLE__   为需要操作的串口
    __INTERRUPT__ 为中断类型
    
    
    • 1
    • 2
    • 3

    关闭中断 __HAL_UART_DISABLE_IT(HANDLE, INTERRUPT)

    __HANDLE__   为需要操作的串口
    __INTERRUPT__ 为中断类型
    
    
    • 1
    • 2
    • 3

    获取中断状态 __HAL_UART_GET_IT_SOURCE(HANDLE, IT)

    用于查询某中断是否开启

    __HANDLE__   为需要操作的串口
     __IT__ 为中断类型
    
    
    • 1
    • 2
    • 3

    中断标志位种类

    有中断种类就有中断标志位种类,也在文件中有说明

      * @arg UART_FLAG_CTS:  CTS Change flag (not available for UART4 and UART5)
      * @arg UART_FLAG_LBD:  LIN Break detection flag
      * @arg UART_FLAG_TXE:  Transmit data register empty flag
      * @arg UART_FLAG_TC:   Transmission Complete flag
      * @arg UART_FLAG_RXNE: Receive data register not empty flag
      * @arg UART_FLAG_IDLE: Idle Line detection flag
      * @arg UART_FLAG_ORE:  Overrun Error flag
      * @arg UART_FLAG_NE:   Noise Error flag
      * @arg UART_FLAG_FE:   Framing Error flag
      * @arg UART_FLAG_PE:   Parity Error flag
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    中断标志位管理

    中断标志位的管理主要有中断标志位的查询与标志位的清除。和中断控制一样,均使用宏定义直接操作寄存器。

    查询中断标志 __HAL_UART_GET_FLAG(HANDLE, FLAG)

    __HANDLE__   为需要操作的串口
    __FLAG__  为查询的类型
    
    • 1
    • 2

    清除中断标志 __HAL_UART_CLEAR_FLAG(HANDLE, FLAG)

    __HANDLE__   为需要操作的串口
    __FLAG__  为查询的类型
    
    • 1
    • 2

    并不是所有中断标志都可以清除所以此接口只能清除以下中断标志位

      * @arg UART_FLAG_CTS:  CTS Change flag (not available for UART4 and UART5).
      * @arg UART_FLAG_LBD:  LIN Break detection flag.
      * @arg UART_FLAG_TC:   Transmission Complete flag.
      * @arg UART_FLAG_RXNE: Receive data register not empty flag.
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    特殊专用接口

    对于某些较为常用的中断控制与中断标志会有专用的接口函数方便使用。这里不做详细展开。

  • 相关阅读:
    AtCoder abc137
    EfficientFormer:轻量化ViT Backbone
    周记之反思
    css 布局出现无法去除的空白
    vscode 远程开发golang
    Redis 持久化配置,RDB和AOF方式配置说明
    Redis:Hash应用场景(一)
    大数据埋点
    Matplotlib 主要参数配置
    SpringBoot项目整合MybatisPlus持久层框架+Druid数据库连接池
  • 原文地址:https://blog.csdn.net/qq_40329772/article/details/126170766