1. 在使用STM32F103C8T6的时候,使用的是串口通讯,波特率9600,在读取数据的时候使用的是DMA数据读取加串口空闲中断的方式,使用MAX485接口的芯片,每隔200毫秒发送一次数据,在仿真测试的时候,如果发送一次数据后100毫秒返回一次数据,如果数据长度短了可以,但是如果数据长度长了,就会在DMA读取数据的时候,读取不完全,如果将返回间隔设置为20毫秒或50毫秒就没问题,这其实反应了一个问题,就是在回信息的时候,发送时间太长,可能与下次接收时间重合,因为485是半双工通讯,所以要考虑发送时间、接收时间、发送延时、接收延时,如果冲突了,就会导致接收数据异常。 2. 有没有一个完整的DMA配置的步骤,比如第一步怎么做,第二步怎么做? |
从你描述来看,感觉你配置的DMA应该没什么问题。是不是IDLE中断里对DMA做了不恰当的操作,你仔细看看IDEL中断里做了些什么,如果是基于HAL库的话,有些版本的IDLE中断里会关闭DMA。如果这样的话,你自己需要对代码做些调整。
DMA的接收长度长一下,串口我一般不用DMA,我用中断接收,放入缓冲区中,当产生空闲中断时,处理当前的数据。
DMA的接收长度长一下,串口我一般不用DMA,我用中断接收,放入缓冲区中,当产生空闲中断时,处理当前的数据 ...
那是不是这样,每次接收中断来了,就把数据存起来,当产生空闲中断的时候,发送一个信号量通知任务处理接收的数据
从你描述来看,感觉你配置的DMA应该没什么问题。是不是IDLE中断里对DMA做了不恰当的操作,你仔细看看IDEL中 ...
我感觉LL 库和HAL 库好坑啊,我以前一直用的标准库,现在突然使用这两个了感觉好麻烦
那是不是这样,每次接收中断来了,就把数据存起来,当产生空闲中断的时候,发送一个信号量通知任务处理接 ...
嗯。我一般是这样做的。我也不习惯用HAL库,还是用标准库,如果实在没有,就自己改HAL库的方式。
嗯。我一般是这样做的。我也不习惯用HAL库,还是用标准库,如果实在没有,就自己改HAL库的方式。 ...
现在公司用的HAL库,我也没办法,先这么用吧,能用了再说改的事儿
HAL库可能是因为国内外使用方式的不同。HAL库接收函数用的时候,是指定接收数据长度后,再操作如何使用。可以改成每次接收一个字节数据,完成后调用回调函数,数据读取到自己的缓冲区,再重新开启接收中断来操作。
HAL库可能是因为国内外使用方式的不同。HAL库接收函数用的时候,是指定接收数据长度后,再操作如何使用。可 ...
嗯,可以,我看还有一种韦东山老师讲的循环的方式,就是接收数据后,保存在一个数组里,解析一个字节指针后移一个,直到解析完,循环调用的方式