野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12321|回复: 2

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

[复制链接]
发表于 2017-4-24 10:06:22 | 显示全部楼层 |阅读模式
手册上说,只有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 10:16:49 | 显示全部楼层
寄存器的配置真心不想看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-24 20:04:52 | 显示全部楼层
相津童 发表于 2017-4-24 10:16
寄存器的配置真心不想看

用了一段时间的库,感觉有时候也得用一下寄存器
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 03:07 , Processed in 0.029009 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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