OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2515|回复: 5

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

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-5-7
在线时间
3 小时
发表于 2018-12-27 10:44:05 | 显示全部楼层 |阅读模式
在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的时序。不知正解如何?请大家指教。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4307
金钱
4307
注册时间
2018-6-30
在线时间
808 小时
发表于 2018-12-27 12:56:37 | 显示全部楼层
通用推挽输出也可以正常使用,你可以配置成开漏复用输出看看怎么样
业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-5-7
在线时间
3 小时
 楼主| 发表于 2018-12-27 13:45:40 | 显示全部楼层
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;}
就可以
回复 支持 反对

使用道具 举报

5

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2015-8-25
在线时间
56 小时
发表于 2018-12-27 15:31:15 | 显示全部楼层
你有没理解,通用和复用的意思。通用就是用户自己可控制的IO,复用是IC内部的硬件寄存器自己完成操作。
原子哥用的是模拟IIC,IO口必须全是通用,才可以用。
至于手册推荐的,是IIC硬件寄存器的推荐配置
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-5-7
在线时间
3 小时
 楼主| 发表于 2018-12-27 16:45:38 | 显示全部楼层
yahopo 发表于 2018-12-27 15:31
你有没理解,通用和复用的意思。通用就是用户自己可控制的IO,复用是IC内部的硬件寄存器自己完成操作。
原 ...

您这么说。我好像明白了。我以前理解的复用功能的意义在于:因为物理接口不够,所以把某些IO口定义为可以使用其他的功能。而并未想到用作其他功能时,是STM32内置外设的硬件来操作,这时不能随心所欲操作这些IO。感谢4楼大哥
回复 支持 反对

使用道具 举报

5

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2015-8-25
在线时间
56 小时
发表于 2018-12-28 11:04:04 | 显示全部楼层
本帖最后由 yahopo 于 2018-12-28 11:05 编辑
lion87223 发表于 2018-12-27 16:45
您这么说。我好像明白了。我以前理解的复用功能的意义在于:因为物理接口不够,所以把某些IO口定义为可以 ...

对啦,就是这意思。设为复用,你就已经没操作权啦,没法改变IO状态。所以,用软件IIC,把IO设为复用状态,肯定会通讯失败的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 23:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表