引言
在移植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.
特殊专用接口
对于某些较为常用的中断控制与中断标志会有专用的接口函数方便使用。这里不做详细展开。
|