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

引言

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

串口中断类型

STM32F103系列较为常用,打开文件<stm32f1xx_hal_uart.h>可以看到所有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)

中断管理函数

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

使能中断 __HAL_UART_ENABLE_IT(HANDLE, INTERRUPT)

__HANDLE__   为需要操作的串口
__INTERRUPT__ 为中断类型

关闭中断 __HAL_UART_DISABLE_IT(HANDLE, INTERRUPT)

__HANDLE__   为需要操作的串口
__INTERRUPT__ 为中断类型

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

用于查询某中断是否开启

__HANDLE__   为需要操作的串口
 __IT__ 为中断类型

中断标志位种类

有中断种类就有中断标志位种类,也在文件<stm32f1xx_hal_uart.h>中有说明

  * @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

中断标志位管理

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

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

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

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

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

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

  * @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
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值