☰
STM32F103串口接收数据,多字节触发中断接收数据,DMA空闲中断接受,空闲中断触发中断。
2026/10/13 9:24:54 网站建设 项目流程

2.知识点

2.1多字节中断,接收指定字节数据

  1. 在STM32cubemx中开启串口全局中断。

  2. 在程序初始化编写接收中断函数。

  3. 启用接收中断回调函数。并要开启下一次中断接受函数,否则将不接收数据。

  4. 在串口全局中断服务函数调用接收中断函数。

HAL_UART_Receive_IT(&huart1,g_Comm1RxBuffer,8); void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART1) { //g_Comm1RxBuffe数据缓存区,串口接收到8字节触发中断,这儿将对接收到的数据进行处理 USART1DataRecv(); } }

2.2 DMA加空闲中断回调函数接收不定量数据

  1. 在STM32cubamx中配置DMA通道。

  2. 在程序初始化编写使能空闲中断和串口DMA接收中断函数。

  3. 在串口全局中断服务函数调用自定义中断服务函数。

  4. 编写中断服务函数和空闲中断服务函数。

2.3串口空闲中断接受不定量数据

  1. 程序初始化编写空闲中断接收函数。

  2. 调用空闲中断回调函数。

__HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE); //使能IDLE中断 //DMA接收函数,此句一定要加,不加接收不到第一次传进来的实数据,是空的,且此时接收到的数据长度为缓存器的数据长度 HAL_UART_Receive_DMA(&huart3, g_Comm3RxBuffer, BUFFER_SIZE);//重新打开DMA接收,不然只能接收一次数据 ​ ​ void HAL_UART_IdleCpltCallback(UART_HandleTypeDef *huart) { //注意:大量数据时,temp、g_Comm3RxBuffer_lenth为uint32_t ,不能写uint8_t否则会超过254就出现问题了。 //在数据量明确并且少量的情况下可以用uint8_t。 uint32_t temp=0; HAL_UART_DMAStop(&huart3); //停止DMA temp = __HAL_DMA_GET_COUNTER(&hdma_usart3_rx);// 获取DMA中未传输的数据个数 g_Comm3RxBuffer_lenth = BUFFER_SIZE - temp; //总计数减去未传输的数据个数,得到已经接收的数据个数 //控制逻辑。。。。。。 //HAL_UART_Transmit(&huart3, g_Comm3RxBuffer,g_Comm3RxBuffer_lenth,1000); // memset(g_Comm3RxBuffer,0,g_Comm3RxBuffer_lenth); HAL_UART_Receive_DMA(&huart3, g_Comm3RxBuffer,BUFFER_SIZE); } void USER_UART_IRQHandler(UART_HandleTypeDef *huart) { //DMA的通道每个芯片会有差异,有些串口没有DMA,所以在这儿不写其他的接口,需要时添加即可。 if(huart->Instance==USART3) { // 判断是否是空闲中断 if(RESET != __HAL_UART_GET_FLAG(&huart3, UART_FLAG_IDLE)) { // 清除空闲中断标志(否则会一直不断进入中断) __HAL_UART_CLEAR_IDLEFLAG(&huart3); // 调用空闲中断处理函数 HAL_UART_IdleCpltCallback(huart); } } }

HAL_UARTEx_ReceiveToIdle_IT(&huart5,Rxbuffer,1024); ​ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) { if(huart->Instance==UART5) { //数据存到了Rxbuffer,长度为函数参数Size。 //HAL_UART_Transmit(&huart1,Rxbuffer,Size,100); memset(Rxbuffer,0,sizeof(Rxbuffer)); HAL_UARTEx_ReceiveToIdle_IT(&huart5,Rxbuffer,1024); } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询