【发布时间】:2019-08-19 01:12:33
【问题描述】:
我知道可以使用 UART 接收中断
HAL_UART_Receive_IT(&huart2, (uint8_t *)rx_buffer, expectedNumberOfBytes)
- 但是一旦启动,如何“手动”停止它?
我们可以使用HAL_NVIC_DisableIRQ()(例如:HAL_NVIC_DisableIRQ(USART1_IRQn))禁用 UART 中断。这将阻止它引发中断,但是由函数HAL_UART_Receive_IT(即HAL_UART_STATE_BUSY_RX)设置的状态需要设置回HAL_UART_STATE_READY,以便UART句柄返回到可以接受新@987654329的状态@调用。
问题
如果我想在一段时间后禁用 Rx 中断,如何重置 UART 中断的状态?
堆栈溢出问题没有解决如何重置状态;我已经提到了这些问题:
- Disabling interrupt in interrupt handler STM32F407
- https://electronics.stackexchange.com/questions/100073/stm32-usart-rx-interrupts
我可以使用USART_ClearITPendingBit() 或USART_ITConfig(),但它们被STM 的HAL 库定义为私有函数。那么我应该使用它们吗?
【问题讨论】:
-
您应该使用更清晰的术语。
HAL_UART_Receive_IT是一个驱动函数,而不是一个中断处理程序。它为接收驱动程序设置状态。 UART 外围设备有自己的中断状态,但这与软件驱动程序中的状态不同,这似乎是您所坚持的。所以我认为您要问的是“如何重置 STM32 HAL UART 驱动程序状态?”如果这不是您的意思,并且您想要重置外围设备(UART 硬件)状态,或者您想要重置中断处理(NVIC 硬件)状态,请编辑您的问题以明确说明。
标签: c stm32 interrupt hardware