宋先森 发表于 2023-11-14 15:40

关于串口DMA等待传输完成卡死的问题

型号AT32F407,在USART2DMA发送数据时,接包已经接到了要发送的数据,但是程序还是处于等待传输完成的标识判断中,卡死了。请教一下是什么造成的?

宋先森 发表于 2023-11-14 15:40

关于串口DMA等待传输完成卡死的问题

        usart_dma_transmitter_enable(USART2,TRUE);          //开启USART1 DMA 发送
        dma_channel_enable(DMA1_CHANNEL1, TRUE); /* usart2 tx begin dma transmitting */
        while(dma_flag_get(DMA1_FDT1_FLAG)==RESET);      //等待传输完成   //************卡在在这里**********//
    dma_flag_clear(DMA1_FDT1_FLAG);                     //清标志
    dma_channel_enable(DMA1_CHANNEL1, FALSE);         //关闭通道4
    usart_dma_transmitter_enable(USART2,FALSE);         //关闭USART1 DMA 发送

muyichuan2012 发表于 2023-11-14 18:05

可参考bsp中example进行配置
https://gitee.com/arterytek/AT32F403A_407_Firmware_Library/blob/master/project/at_start_f407/examples/usart/transfer_by_dma_interrupt/src/main.c

qintian0303 发表于 2023-11-15 08:43

一般直接通过非中断,非DMA发送

两只袜子 发表于 2023-11-15 09:54

有可能USART2 DMA硬件本身存在问题,例如硬件故障或与DMA相关的配置错误。

jcky001 发表于 2023-11-15 09:54

可能没有正确地配置DMA,或者在数据传输完成之前尝试读取或写入数据。

cr315 发表于 2023-11-15 09:55

可能是中断处理问题

elephant00 发表于 2023-11-15 09:55

可能是这个标识的判断逻辑存在问题

宋先森 发表于 2023-11-15 10:38

是因为我配置了DMA1_FDT1_FLAG中断,并在中断中清除了一下标识并且关闭了通道,就不可以使用。在程序中等待并清除就可以使用

xch 发表于 2023-11-15 12:05

宋先森 发表于 2023-11-14 15:40
usart_dma_transmitter_enable(USART2,TRUE);          //开启USART1 DMA 发送
        dma_channel_enable(DMA1_ ...

搞得更小女人一样,露个小手还得悬丝搭脉诊断。程序代码太少了。

forgot 发表于 2023-11-17 09:11

是不是DMA通道不对,我看你的注释写得是开启USART1 DMA 发送,可以通过调试看看DMA寄存器值

lzmm 发表于 2023-12-7 21:52

DMA的配置不正确可能会导致传输失败或者卡死。

alvpeg 发表于 2023-12-8 08:46

调整DMA缓冲区大小            

hilahope 发表于 2023-12-8 09:06

优化DMA通道的使用,避免同时使用多个DMA通道。

vivilyly 发表于 2023-12-8 10:31

及时清除DMA传输完成的标志位并关闭DMA通道。

10299823 发表于 2023-12-8 15:35

可以设置一个超时时间            

jonas222 发表于 2023-12-8 16:01

为DMA传输设置一个超时时间,如果在规定时间内没有完成传输,则认为传输失败

cemaj 发表于 2023-12-8 16:29

DMA的源地址、目标地址、传输长度等参数设置不正确,或者DMA的触发方式选择不正确等。

chenci2013 发表于 2023-12-8 16:49

DMA传输速度过快可能导致系统无法及时响应

youtome 发表于 2023-12-8 20:48

检查DMA和串口的配置是否正确            
页: [1] 2 3
查看完整版本: 关于串口DMA等待传输完成卡死的问题