关于 STM32F1 开漏输出的误解
来源:鱼鹰谈单片机 发布时间:2024-08-12 分享至微信
来源:公众号【鱼鹰谈单片机】
作者:鱼鹰Osprey
ID :emOsprey
正文
有些 IO 可能作为双向输出,比如 I2C 的 SDA 引脚,如果配置成推挽输出(push-pull),那么当要读取 应答信号或者读取 i2c 数据时,需要重新配置 IO。
因此,很多教程会建议配置成开漏输出(open-drain),这样就不需要来回配置输出方向。
这里需要注意的一点是,不管是开漏还是推挽输出,作为输入时,都需要设置 ODR 寄存器。
一直以为设置为开漏后,不管 ODR 设置0或 1,引脚电平应该都是一样的低电平,实际上,还是会有差异:
开漏 ODR 设置为 1:0.15~0.6V(波动比较大)
开漏 ODR 设置为 0:0.002V
按理说,即使 0.6V 电压,IDR 读出的值应该都是 0 才对,实际上,不管是代码,还是调试窗口,偶尔还是可以读出 1 的情况。
外部未接任何电路,开发板引脚悬空:
刚开始以为是调试窗口有问题,但通过代码发现,开漏模式下,即使未接外部上拉电阻,电平确实被识别成高电平.
并且使用逻辑分析仪也是被莫名其妙的识别成高电平。
1V 不到的电平怎么就是高电平了(VDD 3.3V)?
按这个数据手册来说,VDD 3.3V 情况下,最少也需要 1.5V 以上才会被识别为高电平,百思不得其解。如果有道友懂的可以留言区讨论,没找到理论依据。
并且当设置为开漏时,当准备作输入时,如果 ODR 不设置为 1,虽然应答信号可以读取,读取的数据却是错误的(测试 AT24C256)
(STM32F103 参考手册)
[ 新闻来源:鱼鹰谈单片机,更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj]
存入云盘 收藏
举报
全部评论
暂无评论哦,快来评论一下吧!
鱼鹰谈单片机
面向软件开发进阶读者的公众号,分享包括但不限于 C 语言、KEIL、STM32、51 等知识。
查看更多
相关文章
格见半导体推出高性能GS32F003X系列DSP
2024-07-31
高性能与超高性价比的PY32F002B微控制器系列震撼发布
2024-07-23
Audi携手bp,共绘F1电动化新篇章
2024-08-12
高性能与灵活性并存:STM32MP25x MPU引领工业4.0新时代
2024-07-23
热门搜索