久芯网

STM32G0,空闲中断异常,且DMA接收不到数据?

avatar 一页百 提问时间: 2023-07-31 20:12:11 / 已解决

板子:STM32G0B1

方式:UART2空闲中断+DMA接收

问题:烧写程序后,板子一上电就自动进入空闲中断,但此时没有数据发送,当采用上位机发送数据时,可以进入空闲中断,但DMA接收不到数据?

求帮助,感谢感谢!


如需获得 STM32G0 等器件的更多信息,请点击链接或 点击此处 联系在线客服!

9个回答
  • avatar xmshao
    最佳答案
    回答时间: 2023-07-31 20:38:55

    我这边做了验证的确会出现你说的现象,个人认为库函数在处理跟空闲有关的中断处理代码部分有些问题。你这样,在每次进UART中断里首先检查下IDLE标志,如果该标志置位了,我们自己 先行对该位 清零,__HAL_UART_CLEAR_FLAG(&huart2, UART_CLEAR_IDLEF);不要留到后面让库代码处理,这个地方它处理得有点问题。

  • avatar 一页百
    回答时间: 2023-07-31 20:55:57

    想问问是什么原因造成的

  • avatar 废鱼
    回答时间: 2023-07-31 21:15:54

    DMA接收数据长度,只有到达指定长度后才能产生中断,在线仿真模式下,断点可以看一下DMA使用的缓冲区中,是否有数据。

  • avatar butterflyspring
    回答时间: 2023-07-31 21:34:13

    最好是模拟一个上位机通讯,这样容易调试。先发一个字节看看是否能正常接收,然后再增加。 如果一个字节都不正常,那就调试检查基本配置了。 若果多个字节不正常,那要看看逻辑上是不是有问题,调试一下就找到了。

  • avatar xmshao
    回答时间: 2023-07-31 21:52:53

    你这样,在每次进UART中断里首先检查下IDLE标志,如果该标志置位了,我们自己 先行对该位 清零,__HAL_UART_CLEAR_FLAG(&huart2, UART_CLEAR_IDLEF);不要留到后面让库代码处理,这个地方它处理得有点问题。

  • avatar 一页百
    回答时间: 2023-07-31 22:19:04
    废鱼 发表于 2022-4-24 08:36
    DMA接收数据长度,只有到达指定长度后才能产生中断,在线仿真模式下,断点可以看一下DMA使用的缓冲区中 ...

    [md]感谢,问题已解决

  • avatar 一页百
    回答时间: 2023-07-31 22:50:34
    butterflyspring 发表于 2022-4-24 11:46
    最好是模拟一个上位机通讯,这样容易调试。先发一个字节看看是否能正常接收,然后再增加。

    如果一个字 ...

    [md]感谢,问题已解决

  • avatar 一页百
    回答时间: 2023-07-31 23:21:31
    xmshao 发表于 2022-4-24 17:33
    你这样,在每次进UART中断里首先检查下IDLE标志,如果该标志置位了,我们自己 先行对该位 清零,_HAL ...

    [md]感谢,问题已解决

  • avatar 啊源股
    回答时间: 2023-07-31 23:43:18

    请问咋解决的?

会员中心 微信客服
客服
回到顶部