你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32C8T6 DMA数据读取

[复制链接]
1+1=2 提问时间:2022-6-9 08:24 / 未解决
1.  在使用STM32F103C8T6的时候,使用的是串口通讯,波特率9600,在读取数据的时候使用的是DMA数据读取加串口空闲中断的方式,使用MAX485接口的芯片,每隔200毫秒发送一次数据,在仿真测试的时候,如果发送一次数据后100毫秒返回一次数据,如果数据长度短了可以,但是如果数据长度长了,就会在DMA读取数据的时候,读取不完全,如果将返回间隔设置为20毫秒或50毫秒就没问题,这其实反应了一个问题,就是在回信息的时候,发送时间太长,可能与下次接收时间重合,因为485是半双工通讯,所以要考虑发送时间、接收时间、发送延时、接收延时,如果冲突了,就会导致接收数据异常。
2. 有没有一个完整的DMA配置的步骤,比如第一步怎么做,第二步怎么做?
收藏 评论8 发布时间:2022-6-9 08:24

举报

8个回答
xmshao 回答时间:2022-6-9 08:34:42
从你描述来看,感觉你配置的DMA应该没什么问题。是不是IDLE中断里对DMA做了不恰当的操作,你仔细看看IDEL中断里做了些什么,如果是基于HAL库的话,有些版本的IDLE中断里会关闭DMA。如果这样的话,你自己需要对代码做些调整。
废鱼 回答时间:2022-6-9 08:28:31
DMA的接收长度长一下,串口我一般不用DMA,我用中断接收,放入缓冲区中,当产生空闲中断时,处理当前的数据。
1+1=2 回答时间:2022-6-10 10:47:45
废鱼 发表于 2022-6-9 08:28
DMA的接收长度长一下,串口我一般不用DMA,我用中断接收,放入缓冲区中,当产生空闲中断时,处理当前的数据 ...

那是不是这样,每次接收中断来了,就把数据存起来,当产生空闲中断的时候,发送一个信号量通知任务处理接收的数据

1+1=2 回答时间:2022-6-10 10:48:37
xmshao 发表于 2022-6-9 08:34
从你描述来看,感觉你配置的DMA应该没什么问题。是不是IDLE中断里对DMA做了不恰当的操作,你仔细看看IDEL中 ...

我感觉LL 库和HAL 库好坑啊,我以前一直用的标准库,现在突然使用这两个了感觉好麻烦
废鱼 回答时间:2022-6-10 15:30:44
1+1=2 发表于 2022-6-10 10:47
那是不是这样,每次接收中断来了,就把数据存起来,当产生空闲中断的时候,发送一个信号量通知任务处理接 ...

嗯。我一般是这样做的。我也不习惯用HAL库,还是用标准库,如果实在没有,就自己改HAL库的方式。
1+1=2 回答时间:2022-6-10 16:07:44
废鱼 发表于 2022-6-10 15:30
嗯。我一般是这样做的。我也不习惯用HAL库,还是用标准库,如果实在没有,就自己改HAL库的方式。
...

现在公司用的HAL库,我也没办法,先这么用吧,能用了再说改的事儿
废鱼 回答时间:2022-6-10 16:44:47
HAL库可能是因为国内外使用方式的不同。HAL库接收函数用的时候,是指定接收数据长度后,再操作如何使用。可以改成每次接收一个字节数据,完成后调用回调函数,数据读取到自己的缓冲区,再重新开启接收中断来操作。
1+1=2 回答时间:2022-6-13 08:07:58
废鱼 发表于 2022-6-10 16:44
HAL库可能是因为国内外使用方式的不同。HAL库接收函数用的时候,是指定接收数据长度后,再操作如何使用。可 ...

嗯,可以,我看还有一种韦东山老师讲的循环的方式,就是接收数据后,保存在一个数组里,解析一个字节指针后移一个,直到解析完,循环调用的方式
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版