STM32 F4 CUBEMX USART可变长度接收

STM32 F4 CUBEMX USART可变长度接收

CUBEMX配置

CUBEMX config

使能USART中断


__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);
HAL_UART_Receive_DMA(&huart1,rx_buffer,BUFFER_SIZE);

中断函数处理

void USART2_IRQHandler(void)
{
/* USER CODE BEGIN USART2_IRQn 0 /
uint32_t tmp_flag = 0;
uint32_t temp;
/
USER CODE END USART2_IRQn 0 /
HAL_UART_IRQHandler(&huart2);
/
USER CODE BEGIN USART2_IRQn 1 */
if(USART2 == huart2.Instance){
tmp_flag =__HAL_UART_GET_FLAG(&huart2,UART_FLAG_IDLE); //获取IDLE标志位

    if((tmp_flag != RESET))//idle标志被置位
    { 
        recv_end_flag = 1;  // 接受完成标志位置1 
        __HAL_UART_CLEAR_IDLEFLAG(&huart2);//清除标志位     
        HAL_UART_DMAStop(&huart2); //                     
        temp = huart2.Instance->SR;  //清除状态寄存器SR,读取SR寄存器可以实现清除SR寄存器的功能
        temp = huart2.Instance->DR; //读取数据寄存器中的数据
        temp  =  __HAL_DMA_GET_COUNTER(&hdma_usart2_rx);// 获取DMA中未传输的数据个数                     
        rx_len =  BUFFER_SIZE - temp; //总计数减去未传输的数据个数,得到已经接收的数据个数
           
        HAL_UART_Receive_DMA(&huart2,rx_buffer,BUFFER_SIZE);//重新打开DMA接收
    }
		}

/* USER CODE END USART2_IRQn 1 */
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值