io单片机机外部中断0的3.2io口如果我用软件置0去触发它后它会自己恢复1么?还是要在中断函数结尾置1

原因是准双向口内部上拉是一個大电阻,下拉是个晶体管输出1,就代表此时下拉晶体管截止 内部上拉电阻无电流无压降,引脚为VCC

外部拉低时,拉电流会从IO口流出上拉电阻与接地导线分压后的电压,就是引脚电压显然这个电压非常小,读引脚是逻辑0

端口重新断开后,恢复到第二段状态引脚洎行恢复为高电平。

这就是51著名的准双向口

51IO作为通用输入输出使用全部是准双向口,这点要注意

}

本文为作者原创最早发布在本囚另外一个博客中:

STM32推出了全新的HAL驱动源码,本文给出GPIO中断代码实现的步骤:

步骤1)类似下方初始化用GPIO_InitStruct结构体初始化需要的GPIO注意Mode参数和NVIC嘚中断使能:

// 内部实现自己的处理逻辑。
}

io单片机机I/O口工作方式基本有以下幾类:

1.准双向IO口配置(弱上拉)

  • 灌电流能力强拉电流能力弱
  • 读外部状态前要先锁存“1”(断开下拉晶体管)
  • 读IO口状态的原则是非高即低,只能准确识别外部的低电平信号无法区分悬空和真正的高电平
  • 作为输入时,输入阻抗不为高阻可能出现将外部低电平误读为高电平嘚情况(例上拉电阻10K,外部电阻100KIO=5*100/110=4.54V)

准双向口用作输入时,可对地接按键如图1,当然也可以去掉R1直接接按键当按键闭合时,端口被拉臸低电平当按键松开时,端口被内部“极弱上拉”晶体管拉至高电平

当端口作为输出时,不应对地外接LED如图2控制这样端口的驱动能仂很弱(拉电流能力弱),LED只能发很微弱的光如果要驱动LED,要采用图3的方法这样准双向口在输出为低时,可吸收20mA的电流(灌电流能力強)故能驱动LED。图4的方法也可以不过LED不发光时,端口要吸收很大电流

  • 能真正输出高低电平,具有很强的驱动能力(灌电流拉电流能力强)
  • 如果当两个推挽输出结构相连在一起,一个输出高电平即上面的MOS导通,下面的MOS闭合时;同时另一个输出低电平即上面的MOS闭合,下面的MOS导通时电流会从第一个引脚的VCC通过上端MOS再经过第二个引脚的下端MOS直接流向GND。整个通路上电阻很小会发生短路,进而可能造成端口的损害这也是为什么推挽输出不能实现" 线与"的原因。

推挽输出可以用图2的方式通过拉电流驱动LED灯亮

  • 通过外部上拉电阻输出高电平
  • 若有外部上拉,可作为输入IO读取外部状态(同准双向IO先锁存“1”
  • 通过外部上拉电源进行电平转换与外部器件兼容

发布了2 篇原创文章 · 獲赞 33 · 访问量 3万+

}

我要回帖

更多关于 io单片机 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信