中级会员
 
- 积分
- 241
- 金钱
- 241
- 注册时间
- 2016-2-2
- 在线时间
- 80 小时
|

楼主 |
发表于 2018-2-3 16:02:58
|
显示全部楼层
最近在做一个IIC的数字电位器应用。在参考原子代码的时候遇到一些问题,主要是关于IIC的引脚配置。
首先在F1的历程中进行了如下的定义
#define SDA_IN() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;} //数据输入根据寄存器配置为输入上拉或下拉模式。
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;} //数据输出推挽 50MHZ
上面的代码是关于数据线引脚的模式配置,其中输入模式并没有指定上拉或者下拉。而在F1中上拉下拉由ODR寄存器决定。在使用IIC的过程中不同的数据输出会改变ODR寄存器的值,那么我切换到输入模式的时候由于IO没有复位是不是就会根据之前的ODR寄存器状态决定上拉或者下拉?这在接收数据是不会出现影响吗?我自己尝试作为浮空输入也可以进行通讯,关于这个问题不是很理解。
其次我还参考了F4的例程
#define SDA_IN() {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=0<<9*2;} //数据输入
#define SDA_OUT() {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=1<<9*2;} //数据输出
根据寄存器可知数据线引脚的模式仅仅只配置为输出输入,并没有推挽复用或者上拉下拉模拟等参数。与F1的配置又不相同这是什么原因呢? |
|