stm32串口接受定长和不定长数据的两种中断方式

stm32串口有两种中断方式

1.字节中断(定长数据接受)

接收指定字节数的数据后产生中断:

HAL_UART_Receive_IT(&huart3, rxBuffer,21);

注意这里仍然是接受一个字节进入一次IRQ中断函数,这里指定的字节数指的是接受指定字节数量后进入一次回调函数,由于IRQ函数会关闭中断,如需重复接受定长数据须在IRQ函数中刷新中断

void USART3_IRQHandler(void)
{
  /* USER CODE BEGIN USART3_IRQn 0 */
	//HAL_UART_IRQHandler函数会清空中断标志,取消中断使能,并间接调用回调函数
  /* USER CODE END USART3_IRQn 0 */
  HAL_UART_IRQHandler(&huart3);
  /* USER CODE BEGIN USART3_IRQn 1 */
	HAL_UART_Receive_IT(&huart3, (uint8_t *)&rxBuffer,2);  //每接受一个字节进入一次中断 每接受两个字节进入一次回调函数
  /* USER CODE END USART3_IRQn 1 */
}

2.空闲中断(不定长数据接受) 

stm32早期使用cubemx生成的hal库文件中,没有空闲中断的选项,需要另外改造

后面hal库更新之后 可以使用库函数直接处理空闲中断

HAL_UARTEx_ReceiveToIdle_IT(&huart1,serial.Rx_Data_Buf,1024);

以激活中断

重定义

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)

以处理中断

 

posted @ 2024-07-08 13:20  为鲸  阅读(515)  评论(0编辑  收藏  举报