STM32 uart空闲中断

目的:

使用UART空闲中断接收不定长消息

前提:

stm32CubeMX工具配置uart,DMA,中断使能

相关代码:

在生成代码的基础上

使能UART_IT_IDLE中断

1.使能空闲中断
    __HAL_UART_ENABLE_IT(&UART_HANDLE, UART_IT_IDLE);
 2.打开DMA中断接收消息
    UART_Receive_DMA(g_Buf, BUF_LEN);

中断处理函数中添加回调

void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */
    IdleCallBack(&huart1); // 添加空闲中断处理函数
    /* USER CODE END USART1_IRQn 0 */
    HAL_UART_IRQHandler(&huart1);
    /* USER CODE BEGIN USART1_IRQn 1 */

    /* USER CODE END USART1_IRQn 1 */
}

回调处理函数

void IdleCallBack(UART_HandleTypeDef *huart)
{
    if (huart != &UART_HANDLE) {
        return;
    }
    if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE)) { // 判断是否是空闲中断
        __HAL_UART_CLEAR_IDLEFLAG(huart); //清空闲中断
        int rxSize = BUF_LEN - hdma_usart1_rx.Instance->CNDTR;  // 判断接收到的数据长度 CNDTR是dma中的剩余字节的个数
        // do something
        HAL_UART_DMAStop(huart);
        UART_Receive_DMA(g_bleRecBuf, BLE_BUF_LEN); // 重启DMA数据接收
    }
}
#endif
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值