STM32 HAL DMA 中断碰到的问题

流程

串口收数据--->dma搬运到变量--->空闲中断----->接收完成

配置

dma中断全部去掉

串口中断开启

freertos中断全部去掉

时钟配置

代码

开启中断

c 复制代码
// DMA 空闲检查
void receives_uaru_7(void)
{
	RXU7 = 0;//清除中断标志
	HAL_UARTEx_ReceiveToIdle_DMA(&huart7, Buff_U7, sizeof_U7);//储存接收数据
	//HAL_UARTEx_ReceiveToIdle_IT(&huart7, Buff_U7, sizeof_U7);
}
c 复制代码
// dma中断回调
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
    if (huart->Instance == UART7)
    {
        if (Size <= sizeof_U7)
        {
			//停止dma中断
            HAL_UART_DMAStop(huart);
            //将数据传到cmd处理
			Buff_LEN_U7 = Size;//获取接收的数据长度
			RXU7 = 1;//标志中断
			
        }
		
    
}

处理中断

c 复制代码
	for (;;)
	{
		if(RXU7 == 1){//检测到中断
			U7();
			receives_uaru_7();//启动中断 和清除标志
		}
		osDelay(1);
	}

中断错误

c 复制代码
// dma 错误回调
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
	if (huart->Instance == UART7)
	{
        printf("串口7 dma 发生错误 可能是 缓冲区溢出 波特率错误\n");
		receives_uaru_7();
	}else if (huart->Instance == USART1){
		printf("串口1 dma 发生错误 可能是 缓冲区溢出 波特率错误\n");
		receives_uaru_1();
	}else if (huart->Instance == USART6){
		printf("串口6 dma 发生错误 可能是 缓冲区溢出 波特率错误\n");
		receives_uaru_6();
	}else if (huart->Instance == UART4){
		printf("串口4 dma 发生错误 可能是 缓冲区溢出 波特率错误\n");
		receives_uaru_4();
	}else if (huart->Instance == UART5){
		printf("串口5 dma 发生错误 可能是 缓冲区溢出 波特率错误\n");
		receives_uaru_5();
	}
}

问题

间歇性出现 中断报错

相关推荐
碧海银沙音频科技研究院9 小时前
基于炬芯ATS308X 设计的上位机usb 串口音乐EQ调节工具
stm32·单片机·嵌入式硬件
三佛科技-1341638421212 小时前
过认证72W碳化硅方案(12V6A)主控HN1562+HN36228V 典型应用电路、变压器参数分享
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
Zwawa13 小时前
串口为什么会丢字节:从轮询到中断和环形缓冲区
c语言·单片机·嵌入式
Brilliantwxx14 小时前
【STM32】 内部 Flash 详解:寄存器逐位拆解 + 工作流程顺序全讲 + EEPROM再实现
stm32·单片机·嵌入式硬件·1024程序员节
木子单片机14 小时前
基于单片机的DS18B20温度传感器测温系统设计
单片机·嵌入式硬件·51单片机·keil
华清远见IT开放实验室14 小时前
实验室建设案例 | 安徽三联学院物联网实验室
stm32·单片机·嵌入式硬件·物联网·华清远见
Zw-awa15 小时前
串口为什么会丢字节:从轮询到中断和环形缓冲区
stm32
深圳光特通信豆子16 小时前
TTL 光模块在工业控制与串口通信中的应用指南(10M BIDI 单模系列)
单片机·嵌入式硬件
桀人16 小时前
SPI概念引入
stm32·单片机·嵌入式硬件
离凌寒16 小时前
一、基于stm32+freertos下LD2410D和R60ADB1两款雷达的使用效果
stm32·单片机·嵌入式硬件