以前一直用STM32cubemx配置得I2C,在cubemx里最高只能给到1MHz,然后那个时序又不怎么看得懂,于是就一度以为最高只能1MHz。
今天忙里偷闲研究了下I2C的timing寄存器
操作平台STM32G431,使用LL库
先贴手册
这是一个32bit寄存器
bit【0~7】SCLL,SCL低电平时间
bit【8~15】SCLH,SCL高电平时间
bit【16~19】SDADEL,数据保持时间,在SCL拉低多久后SDA可以变化
bit【20~23】SCLDEL,数据设置时间,在SDA上加载本次传输的0/1后多久SCL拉高(通知从机数据有效)
bit【28~31】PRESC,时钟源预分频
SCL高低电平时间很好理解
SDADEL和SCLDEL可以参考下图我框出来的,I2C在SCL高电平时数据有效,这个时间主要就是为了防止SCL高电平时SDA数据还没准备好,可以想象大部分情况下给到0其实也不会有问题,但原则上还是至少给1避免不稳定因素
关于timing参数的最小时间单位,我的理解是时钟树配给I2C的频率除去预分频就是了 ,例如160M主频如果不分频,那么timing的数字就表