STM32Cube之GPIO能读取设置为输出模式引脚的高低电平

探讨了STM32 HAL库中HAL_GPIO_ReadPin函数为何能读取设置为输出模式的引脚状态,深入解析了GPIO BSRR与IDR寄存器的关系,以及这对I2C等通信的影响。

在看HAL库代码的时候,发现如果是HAL_GPIO_ReadPin读取设置为输出模式的引脚高低电平也是能读取成功的。这个现象引起作者的好奇心,进一步看了STM32的参考手册(如下图1、2)与HAL_GPIO_WritePin函数的实现(如下图3)。答案就很显然了。HAL_GPIO_WritePin是通过修改GPIO的BSRR寄存器来达到将具体某个引脚置位或清零的。从参考手册也可以发现,修改BSRR的同时会修改IDR寄存器。巧了HAL_GPIO_ReadPin就是读取IDR寄存器的。所以HAL_GPIO_ReadPin能读取输出模式的引脚,但是要注意,若是你需要和外界交互的比如I2C(模拟I2C,因为要给外部设备控制),SDA引脚就需要设置为输入模式了。好了本文就到这里了,下次见。

 

                                                                 图1       

                                                                图2

                                                                 图3

                                                                 图4

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值