找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5270|回复: 3
打印 上一主题 下一主题
收起左侧

STM8S芯片GPIO复用AD功能后无法回到GPIO状态问题

[复制链接]
跳转到指定楼层
楼主
ID:98618 发表于 2015-12-7 00:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
某日,一工程师使用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或其它复用功能时,硬件自动打开了该施密特触发器。可以看
看相关说明和框图:





整理:Miler Shao

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:83761 发表于 2016-6-23 15:08 | 只看该作者
正需要用到复用ADC
回复

使用道具 举报

板凳
ID:169079 发表于 2017-3-8 13:52 | 只看该作者
很喜欢这样的分享,受益。。。
回复

使用道具 举报

地板
ID:169079 发表于 2017-3-8 13:53 | 只看该作者
很喜欢这样的分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表