i2c 100kb/s 这里的b指的bit,就是二进制的一位,所以:
100kb/s =12.5 KB/s,因为1 byte = 8 bits。
寄存器设置:
那么关于时钟控制寄存器(I2C_CCR),如何设置:
CCR= Thigh/Tpclk1
Thigh=(1/100k)/2=5us, 因为是半个周期所以除以2
为了达到5μs的高电平或低电平时间,需要的底层时钟周期数为 5μs / (1/8) =40, 此处以PCLK1=8M为例说明。
HAL库代码实现:
HAL_I2C_Init(I2C_HandleTypeDef *hi2c)中代码如下
这个MODIFY的功能是,先与非 第二个参数(要设定的寄存器位的掩码),然后或上第3个参数达到设定寄存器相应位的目的。
I2C_SPEED(pclk1, hi2c->Init.ClockSpeed, hi2c->Init.DutyCycle) 代码如下
此段代码没看明白怎么实现的,有看明白的欢迎评论区留言。