原子哥的F103视频第52讲IIC总线实验中,PB7的设置模式与《中文参考手册》中的不符

2019-07-21 06:24发布

在IIC实验中,原子哥将PB7设置为了 通用上下拉输入或者通用推挽输出

原子哥的例程:
#define SDA_IN()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}        //将PB7设为通用上下拉输入
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;}        //将PB7设为通用推挽输出

//IO操作函数         
#define IIC_SCL    PBout(6) //SCL
#define IIC_SDA    PBout(7) //SDA         
#define READ_SDA   PBin(7)  //输入SDA



但是《STM32中文参考手册》8.1.11中,端口的复用功能,要把GPIO作为IIC接口,要设置为开漏复用输出。这与原子哥的设置不相符合。
123.png

疑问:我能想到的原因是,这里任何的引脚都能做IIC接口,而STM32芯片的硬件底层IIC功能根本没有被调用,这里仅仅是使用IO口仿真了IIC的时序。不知正解如何?请大家指教。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
lion87223
2019-07-21 12:12
1208 发表于 2018-12-27 12:56
通用推挽输出也可以正常使用,你可以配置成开漏复用输出看看怎么样

试过了。PB7只要设置成了复用输出功能,不管是推挽还是开漏,24C02就无法正常读写。设置为通用输出,都能正常读写。

#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)0X0F<<28;}
或者
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)0X0B<<28;}
就不行

#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)0X03<<28;}
或者
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)0X07<<28;}
就可以

一周热门 更多>