GPIO偶尔自己一直输出高
坛友们有没有人遇到过STM32的GPIO有时候自己输出高电平的情况?遇到过一次,程序配置错了,操作成同一个引脚了。 eric2013 发表于 2023-11-24 08:41
遇到过一次,程序配置错了,操作成同一个引脚了。
那和我遇到的不大像。我的是运行了一点时间之后出现的。 庄永 发表于 2023-11-24 09:10
那和我遇到的不大像。我的是运行了一点时间之后出现的。
特别是指针类的操作是不是有越界的情况,也容易出现奇怪的问题。 有这么一种情况有可能会触发:有两个输出,用的是同一个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的,可能有帮助。 eric2013 发表于 2023-11-24 09:37
特别是指针类的操作是不是有越界的情况,也容易出现奇怪的问题。
还在定位,有可能就是存在一些未知的非法操作导致的 ldqmcu 发表于 2023-11-24 09:46
有这么一种情况有可能会触发:有两个输出,用的是同一个port,A输出是出问题的那个输出,一般在主线程序操 ...
IO操作ST不是硬件提供了原子操作吗?可能不是中断的问题。标记一下所有操作过的IO应该就可以找到了。 5L说的很有可能,这个问题之前我就遇到过很多次了!!! ldqmcu 发表于 2023-11-24 09:46
有这么一种情况有可能会触发:有两个输出,用的是同一个port,A输出是出问题的那个输出,一般在主线程序操 ...
没有,输出只有一个位置。怀疑是输出高以后由于其他原因导致任务堆栈被破坏,任务再也得不到执行。或者是干扰导致IO失效 庄永 发表于 2023-11-25 22:17
没有,输出只有一个位置。怀疑是输出高以后由于其他原因导致任务堆栈被破坏,任务再也得不到执行。或者是 ...
用原子操作试试看{:10:} 没有遇到过,这种100%都是程序问题。
页:
[1]