gpt4 book ai didi

c - STM32 串行 DMA - 查找流的开头

转载 作者:行者123 更新时间:2023-11-30 16:17:11 25 4
gpt4 key购买 nike

我有一个已知的串行流格式,我正在通过 DMA 捕获它。它有页眉和页脚字节。但有时 MCU 在流中间开始捕获,然后由于 DMA 正在寻找设定数量的字节而导致同步失败。我读过有人使用循环缓冲区,但我一直在努力理解这个概念。

相反,我正在考虑禁用 DMA 并在 MCU 启动时启用串行中断。然后循环遍历中断捕获的每个字节以查找起始字节。然后,一旦找到起始字节,就禁用串行中断捕获并启用 DMA 来接管流的捕获。

这听起来可行吗?感谢您的任何意见。

我正在将 STM32 HAL 库与包含 STM32 CubeMX 的新 STM32 IDE 一起使用。

最佳答案

如果我正确理解您对循环缓冲区的引用,那么这个概念很简单。您有一个带有写指针和读指针的大缓冲区。 write 函数从写指针开始将数据写入缓冲区,注意一旦到达缓冲区末尾,它就会回绕并转储缓冲区开头及以后的数据。然后,您需要一个读取器函数,从读取指针向前读取数据,并再次处理缓冲区末尾的环绕。

读和写指针都从缓冲区的开头开始。您必须检查的两个条件是:1)当读指针与写指针位于同一位置时,没有(更多)内容可读取。2) 当写指针递增并运行到读指针位置时,就会出现缓冲区溢出情况。这种情况永远不应该发生,因此您必须使用更大的缓冲区,或者让读取器任务更频繁地运行,或者您开始​​扔掉东西。

因此,在您的场景中,DMA 只是转储数据,而您的读取器任务会查找 header 字节并处理数据,直到找到页脚字节。

关于c - STM32 串行 DMA - 查找流的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56322846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com