在使用软件模拟iic通信时,要将SDA线配置为开漏输出,既然配置为开漏输出,为什么程序还可以通过SDA线读取数据?
查阅手册:
只说了结论:在开楼模式下,对输入数据寄存器的读访问可以得到IO状态
来看输出配置这个框图结构:
我将其分为了A路 和 B路,A路和B路在IO引脚处有交点
在输出模式下,若想要某位引脚为低电平,需要在B路上对输出数据寄存器进行配置后经过输出控制,将电平信号传递到IO引脚,由于A路和B路是相连的,在传递到IO引脚的同时,也会传递到A路上的输入数据寄存器,这样便解释了为什么在输出模式下我们依然可以读取引脚。
实验:
IDR :输入寄存器
ODR:输出寄存器
读取函数:
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
官网给的解释:Reads the specified output data port bit. 读取指定的输出数据端口位。
可以理解为 获取引脚的状态,更适合本文的理解