其他
STM8S芯片GPIO脚复用AD功能后无法回到GPIO状态问题
STM8S芯片GPIO脚复用AD功能后无法回到GPIO状态问题
整理:Miler Shao QQ: 332537577
某日,一工程师使用STM8S芯片开发产品,其管脚资源比较紧张。某一GPIO口被复用为AD输入脚做相关AD检测。之后,把该脚AD功能禁用掉,把该口配置切换为带下降沿触发的EXTI触发脚,之后让芯片进入睡眠。当然,休眠时该口处于高电平。
奇怪的是,那样设置后根本没法唤醒。即使不做休眠,做好切换配置后,直接查看该脚的IDR位的电平,发现始终提示为0.
后来一起查看代码,发现在配置AD时,他配置了ADC_TDR寄存器,目的是关闭跟该脚相关的GPIO 模块里的一个施密特触发器。IO口复用为AD时,关闭它是合理的。但它作为AD完成使命后,切换为
GPIO功能时,工程师忽略了ADC_TDR寄存器,让它依旧保持原值。结果是,AD虽然关了,但施密特触发器还是关闭的。麻烦就出在这里。看看下图就明白了,当那施密特被关闭时,它的输出始终是0,即红色箭头所指位置。那此时读输入寄存器【IDR】,自然提示输入为0,还哪来下降沿呢。
后来,让他在做从AD切换到GPIO功能时,同时修改了ADC_TDR寄存器让施密特
打开后就都正常了。
其实,对于STM32的这个地方,结构类似。只是STM32没有了这个专门的寄存器,在GPIO口复用为AD输入时,
硬件自动关闭了施密特触发器,而当切换为普通GPIO或其它复用功能时,硬件自动打开了该施密特触发器。可以看
看相关说明和框图: