Expertwu 发表于 2023-5-8 19:19:11

STM32F07USART+DMA程序发送问题

写了一个功能是 串口1 接收在串口2发送的程序,调用的是DMA。但是出现的问题很奇怪有一些不应该存在的乱码数据
有写过类似的知道是为什么会出现这样的情况吗


Expertwu 发表于 2023-5-8 19:19:52

有知道的大佬方便的话可以帮我解一下疑惑

Expertwu 发表于 2023-5-9 09:03:28

目前加延时解决了

glory 发表于 2023-5-9 09:57:39

本帖最后由 glory 于 2023-5-9 09:59 编辑

原因出在你test2[]数组是在堆栈上分配的,中断函数退出后,堆栈若被其它中断使用(注意中断函数的堆栈是复用的,由MSP指定),此时数组的数据就被破坏了。而同时DMA却还在进行中呢。
这是程序员没有修炼基本功的常见错误。

Expertwu 发表于 2023-5-9 12:02:45

glory 发表于 2023-5-9 09:57
原因出在你test2[]数组是在堆栈上分配的,中断函数退出后,堆栈若被其它中断使用(注意中断函数的堆栈是复 ...

我后来又尝试了一个方法解决,不用sizeof而转用strlen((const char *),这样就没有出现一开始那个情况了。因为我发现在中断里加了延时是不正确的操作,会把程序卡死。不过你说得这个中断和堆栈复用的情况的确是我没了解过的东西我得去了解下了,多谢了大佬

XIEYJ 发表于 2023-5-9 15:27:43

函数里的局部变量在初始化的时候是有脏数据的,你没用到的那部分空间初始值应该不是0,你可以在线调试的时候在那打个断点看一下数组里具体的值

水晶之泪0517 发表于 2023-5-11 08:08:27

发送的数据应该用全局的或者静态数组,函数退出的时候,DMA还在发送,而局部的函数变量空间已经释放了

跟着硬汉学 发表于 2023-5-12 09:20:45

4楼大哥的解释完美,确实是这样的,发送的数据放在中断中,很容易出现意想不到的问题!
页: [1]
查看完整版本: STM32F07USART+DMA程序发送问题