初级会员

- 积分
- 68
- 金钱
- 68
- 注册时间
- 2020-5-9
- 在线时间
- 15 小时
|
1金钱
在串口接收中使用空闲中断+DMA方式接收数据,以下代码在STM32F103和GD32F103中使用都没问题,但换成HK32F103后空闲中断IDLE无法清除,一直重复中断
if(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_IDLE)!=RESET)//空闲中断,一组数据接收完成
{
temp=USART2->SR;//读DR
temp=USART2->DR;//读DR
__HAL_UART_CLEAR_FLAG(&huart2,UART_FLAG_IDLE); //清除中断标志
temp=huart2.hdmarx->Instance->CNDTR;//获取剩余待传输的数量
uart2_rx_count=USART2_BUF_SIZE-temp;//得到接收长度
uart2_revflag =TURE; //接收到数据
__HAL_DMA_DISABLE(huart2.hdmarx);//关闭DMA
huart2.hdmarx->Instance->CNDTR =USART2_BUF_SIZE;//重置DMA传输数据
__HAL_DMA_ENABLE(huart2.hdmarx);//重新开启DMA
uart2_Rx_flag_led=1;
uart2_Rx_out_time=HAL_GetTick();//获取时间
// printf("%d",uart2_rx_count);
}
|
|