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) 代码如下

此段代码没看明白怎么实现的,有看明白的欢迎评论区留言。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐