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

[复制链接]
1523|11
手机看帖
扫描二维码
随时随地手机跟帖
宋先森|  楼主 | 2023-11-14 15:40 | 显示全部楼层 |阅读模式
型号AT32F407,在USART2  DMA发送数据时,接包已经接到了要发送的数据,但是程序还是处于等待传输完成的标识判断中,卡死了。请教一下是什么造成的?

使用特权

评论回复
宋先森|  楼主 | 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 | 显示全部楼层

使用特权

评论回复
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中断,并在中断中清除了一下标识并且关闭了通道,就不可以使用。在程序中等待并清除就可以使用

使用特权

评论回复
评论
宋先森 2023-11-15 10:45 回复TA
补充一下因为自己作为log输出的,所以在之前关闭中断保护了一下,就产生错误了 
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寄存器值

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

44

帖子

0

粉丝