STM32
直播中

628215

12年用户 783经验值
擅长:电源/新能源
私信 关注
[问答]

为什么stm32 hal库配置串口时调用函数开启串口接收中断却没有作用呢

为什么STM32 hal库配置串口时调用函数开启串口接收中断却没有作用呢?

回帖(2)

刘羽扬

2021-12-9 14:08:16
STM32HAL库串口接收中断配置失效 HAL_UART_Receive_IT()函数调用无效

  问题:

  


  • 使用stm32的hal库配置串口的时候调用HAL_UART_Receive_IT()函数开启串口接收中断,但是发现没有作用,将HAL_UART_Receive_IT()函数丢在MX_USART2_UART_Init()函数最后可以,但是丢在HAL_UART_MspInit()函数最后却不行。

  解决方案:

  


  • 查看HAL_UART_Receive_IT()函数原型发现,在调用此函数的时候会首先进行判断


  if (huart->RxState == HAL_UART_STATE_READY)
  {
          ...
  }
它会首先判断串口的状态,只有串口转态为就绪态的时候才会进行配置,而执行HAL_UART_MspInit()函数的时候,串口初始化并未完成,因此串口的状态不为就绪态,因此HAL_UART_Receive_IT()函数实际并不会执行。
所以调用HAL_UART_Receive_IT()函数必须在串口初始化完成之后调用,一般放在MX_USART2_UART_Init()函数最后。
举报

赵文娜

2021-12-9 14:08:16
STM32HAL库串口接收中断配置失效 HAL_UART_Receive_IT()函数调用无效

  问题:

  


  • 使用stm32的hal库配置串口的时候调用HAL_UART_Receive_IT()函数开启串口接收中断,但是发现没有作用,将HAL_UART_Receive_IT()函数丢在MX_USART2_UART_Init()函数最后可以,但是丢在HAL_UART_MspInit()函数最后却不行。

  解决方案:

  


  • 查看HAL_UART_Receive_IT()函数原型发现,在调用此函数的时候会首先进行判断


  if (huart->RxState == HAL_UART_STATE_READY)
  {
          ...
  }
它会首先判断串口的状态,只有串口转态为就绪态的时候才会进行配置,而执行HAL_UART_MspInit()函数的时候,串口初始化并未完成,因此串口的状态不为就绪态,因此HAL_UART_Receive_IT()函数实际并不会执行。
所以调用HAL_UART_Receive_IT()函数必须在串口初始化完成之后调用,一般放在MX_USART2_UART_Init()函数最后。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分