硬件:STM32f103c8t6、OLED、MPU6050
记录:软件I2C的IO口引脚选择错误
正常运行:
在用GPIO口做软件I2C通信,使用MPU6050时,最开始mpu6050的SCL和SDA端连接的是PB6和PB7两个引脚,一切都正常使用。
更换引脚:
然后看到教程中说软件I2C通信可以任意选择两个IO口引脚做SCL和SDA,因此就重新把mpu6050连接到了PB3和PB4两个引脚,但I2C通信失败了,OLED显示的加速度数据恒为1。
错误原因:
一开始查看引脚功能表时,看到PB6和PB7正好是板子I2C硬件通信的引脚,就认为软件I2C的引脚选择也要是具备有I2C外设的IO口,所以后续又在PB10和PB11上进行了测试,发现软件I2C正常使用,但为什么大家使用软件i2c的时候又说io的选择很多呢?
于是搜索了好多GPIO软件模拟I2C的帖子,大家都没有专门的说明IO的选择,最后在下面的帖子中有了启发
STM32F103C8T6引脚图及引脚功能说明及避坑指南-腾讯云开发者社区-腾讯云 (tencent.com)
帖子作者也遇到了使用IO做输入输出时出现错误
也就是说使用引脚时要注意IO引脚在板子上的默认功能是什么,比如我后面更换引脚到PB3和PB4,这两个引脚的默认功能是Jlink烧录使用端口,不是默认作为普通IO使用的,所以回出现I2C输入输出通信失败的情况。
在最后,我又更换引脚到PB13、PB14来测试,因为PB13、PB14默认是普通IO口,所以I2C正常通信。