庄永 发表于 2023-11-24 00:33:05

GPIO偶尔自己一直输出高

坛友们有没有人遇到过STM32的GPIO有时候自己输出高电平的情况?

eric2013 发表于 2023-11-24 08:41:53

遇到过一次,程序配置错了,操作成同一个引脚了。

庄永 发表于 2023-11-24 09:10:28

eric2013 发表于 2023-11-24 08:41
遇到过一次,程序配置错了,操作成同一个引脚了。

那和我遇到的不大像。我的是运行了一点时间之后出现的。

eric2013 发表于 2023-11-24 09:37:30

庄永 发表于 2023-11-24 09:10
那和我遇到的不大像。我的是运行了一点时间之后出现的。

特别是指针类的操作是不是有越界的情况,也容易出现奇怪的问题。

ldqmcu 发表于 2023-11-24 09:46:07

有这么一种情况有可能会触发:有两个输出,用的是同一个port,A输出是出问题的那个输出,一般在主线程序操作,B输出是同一个port的另外一个输出,B输出在中断里会操作。两个都是用的 GPIO->ODR |= bit,和GPIO->ODR &= ~bit;的方式进行操作的。在某一刻主线操作A,想让其拉低用的是GPIO->ODR &= ~bit;在汇编层面取值了ODR的值到寄存器R1(假设保存到R1)之后,中断发生,在中断里,对B进行操作拉低了,中断结束之后,恢复到刚刚中断的地方,寄存器R1保存着B口原先的高电平,继续往下操作,最终会回写给ODR,让B口恢复高电平。当然,这种情况,你不一定是这么用的。这个思路只是“头痛医脚”的思考方式而已。还有,你操作的IO,尝试使用单纯操作拉高和拉低的寄存器的,不要直接使用涉及ODR的,可能有帮助。

庄永 发表于 2023-11-24 09:56:33

eric2013 发表于 2023-11-24 09:37
特别是指针类的操作是不是有越界的情况,也容易出现奇怪的问题。

还在定位,有可能就是存在一些未知的非法操作导致的

2859932063 发表于 2023-11-24 14:24:42

ldqmcu 发表于 2023-11-24 09:46
有这么一种情况有可能会触发:有两个输出,用的是同一个port,A输出是出问题的那个输出,一般在主线程序操 ...

IO操作ST不是硬件提供了原子操作吗?可能不是中断的问题。标记一下所有操作过的IO应该就可以找到了。

qq1646544 发表于 2023-11-25 10:56:00

5L说的很有可能,这个问题之前我就遇到过很多次了!!!

庄永 发表于 2023-11-25 22:17:20

ldqmcu 发表于 2023-11-24 09:46
有这么一种情况有可能会触发:有两个输出,用的是同一个port,A输出是出问题的那个输出,一般在主线程序操 ...

没有,输出只有一个位置。怀疑是输出高以后由于其他原因导致任务堆栈被破坏,任务再也得不到执行。或者是干扰导致IO失效

2859932063 发表于 2023-12-2 16:14:05

庄永 发表于 2023-11-25 22:17
没有,输出只有一个位置。怀疑是输出高以后由于其他原因导致任务堆栈被破坏,任务再也得不到执行。或者是 ...

用原子操作试试看{:10:}

asj 发表于 2023-12-4 11:46:58

没有遇到过,这种100%都是程序问题。
页: [1]
查看完整版本: GPIO偶尔自己一直输出高