STM32IIC和SPI端口初始化配置问题

为什么IIC需要配置成推挽输出,而不是复用推挽,IIC不是属于外设吗?而SPI为什么就要用复用推挽输出

img

img

现在STM用的I2C基本都是软件模拟的,所以并不是用的STM的外设,都是自己编程实现I2C通讯。原因嘛,说的是STM的I2C有BUG。实际工程上,我也确实没见过有人用过I2C外设,都是将GPIO口设置成普通开漏输出,外围电路加上拉来实现的。

IO复用只有2个模式,开漏输出和推挽输出。主要目的是为了打开复用通道。而当spi的MISO的GPIO模式配置为复用推挽输出时,因为MISO是输入而没有输出,输出信号线上没有信号,所以推挽输出的2个MOS管都是处于关闭状态,不会影响外部信号。