打印
[STM32F1]

stm32 I2C寄存器配置时CR1的PE位置1的时序问题

[复制链接]
940|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
赵怡彬|  楼主 | 2017-4-23 23:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
手册上说,只有PE为0的时候寄存器CCR和TRISE的值才可以被写入,所以理应在配置CCR和TRISE前,将PE置0,之后再置1,如下:
        I2C2->CR1 = 1 << 15;//复位
        I2C2->CR1 &= ~(1 << 15);
        I2C2->CR1 &= ~(1 << 0);;//设置PE为0
        I2C2->CR2 |= 30 << 0;//设置时钟频率为30MHz
        I2C2->CCR |= 1 << 15;//快速模式
        I2C2->CCR |= 1 << 14;//占空比为16/9
        I2C2->CCR |= 3 << 0;//时钟分频系数为3
        I2C2->TRISE |= 10 << 0;//最大上身是件
        I2C2->CR1 |= 1 << 10;//使能应答
        I2C2->CR1 |= 1 << 0;;//设置PE为1
但我试了一下,在CCR和TRISE配置之前就把PE置1也可以,正常的I2C通信如下:
       I2C2->CR1 = 1 << 15;
        I2C2->CR1 &= ~(1 << 15);
        I2C2->CR1 &|= 1 << 0;//设置PE为1
        I2C2->CR2 |= 30 << 0;
        I2C2->CCR |= 1 << 15;
        I2C2->CCR |= 1 << 14;
        I2C2->CCR |= 3 << 0;
        I2C2->TRISE |= 10 << 0;
        I2C2->CR1 |= 1 << 10;
       
请问这是怎么回事呢?
沙发
赵怡彬|  楼主 | 2017-4-24 20:03 | 只看该作者
有人吗

使用特权

评论回复
板凳
airwill| | 2017-4-25 06:57 | 只看该作者
最好不要这么玩
有些寄存器位的配置是需要时序的, 这是外设的硬件设计规定的.
象你这样虽然位设置实现了, 但未必保证功能就一定能正常了.
我也是遇到过这类问题的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝