久芯网

STM32F765使用DMA的Circular模式将串口接收的数据移动到内存指定区域,部分情况下失效

avatar leekuip 提问时间: 2023-08-10 19:02:21 / 未解决

如题,STM32F765使用DMA的Circular模式将串口接收的数据移动到内存指定区域,在UCOS多任务程序中可以正常接收数据,但是裸机的时候,比如写了一个for循环一直执行一段代码,DMA就不更新数据到内存中了,仿真的时候,打个断点,才会有数据更新到内存中。

正常不是应该CPU和DMA交替使用总线的吗?为什么会出现这样的情况


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

5个回答
  • avatar 废鱼
    回答时间: 2023-08-10 19:20:28

    应该是处理太快,还没有收到新数据。建议加延时。

  • avatar butterflyspring
    回答时间: 2023-08-10 19:37:30

    楼主估算一下串口接收一帧数据需要多长时间,而for循环执行多长时间。 如同楼上所说,串口的接收时间与F7的运算速度比,那是很慢的。 最简单验证延时足够长的时间再去检查内存收到的数据。 DMA相当于搬运工,硬件配置好后自动运行,与内核运行的其他代码没直接关系了。

  • avatar leekuip
    回答时间: 2023-08-10 20:08:38

    解决掉了,Cache的问题,把接收缓冲区Cache禁用就好了

  • avatar xmshao
    回答时间: 2023-08-10 20:31:20

    從你描述現象來看,有點詭異。不看代碼難以鎖定原因。不過,對於H7/F7系列,注意下因Cache導致的數據一致性問題

  • avatar leekuip
    回答时间: 2023-08-10 20:49:28
    xmshao 发表于 2022-2-9 10:59
    從你描述現象來看,有點詭異。不看代碼難以鎖定原因。不過,對於H7/F7系列,注意下因Cache導致的數據一致性 ...

    确实是数据一致性的问题

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