C++ 如何计算stm32l0的i2c定时
我有一个stm32l0系列处理器,我不知道如何计算i2c定时。 我想使用波什bme680/bme280传感器。我发现只有用于stm32F0/f3的Timming配置工具。有人知道如何计算吗?TLDR:包含示例C++ 如何计算stm32l0的i2c定时,c++,stm32,i2c,C++,Stm32,I2c,我有一个stm32l0系列处理器,我不知道如何计算i2c定时。 我想使用波什bme680/bme280传感器。我发现只有用于stm32F0/f3的Timming配置工具。有人知道如何计算吗?TLDR:包含示例 注意:我还没有真正使用过I2C。以下所有内容均以文档为基础 (p。 233): uint32_t I2C_InitTypeDef::Timing指定I2C_TIMINGR_寄存器值。此参数通过引用 至参考手册中的I2C初始化部分 (临641): 定时寄存器(I2C_TIMINGR)
注意:我还没有真正使用过I2C。以下所有内容均以文档为基础
t_PRESC=(PRESC+1)x t_I2CCLK
SCLDEL[3:0]:数据设置时间
该字段用于在SDA边缘和SCL上升边缘之间生成延迟t_SCLDEL。在NOSTRETCH=0的主模式和从模式下,SCL线在t_SCLDEL期间被拉伸到较低的位置
t_-SCLDEL=(SCLDEL+1)x t_-PRESC
注意:t\u SCLDEL用于生成t\u SU:DAT定时。
SDADEL[3:0]:数据保持时间
该字段用于生成SCL下降沿和SDA沿之间的延迟t_SDADEL。在NOSTRETCH=0的主模式和从模式下,SCL线在t_SDADEL期间被拉伸到较低的位置
t\u SDADEL=SDADEL x t\u PRESC
注意:SDADEL用于生成t_HD:DAT定时。
SCLH[7:0]:SCL高时段(主模式)
此字段用于在主模式下生成SCL高周期
t_-SCLH=(SCLH+1)x t_-PRESC
注意:SCLH还用于生成TU SU:STO和TU HD:STA定时。
SCL[7:0]:SCL低周期(主模式)
此字段用于在主模式下生成SCL低周期
t_-SCLL=(SCLL+1)x t_-PRESC
注意:SCLL还用于生成TU BUF和TU SU:STA定时。
有关预分频器的更多信息可以在有关计时器的段落中找到
(第433页)- PCLK1:APB1时钟(默认值)
- HSI16:内部16MHz RC振荡器
- 系统时钟 有关更多详细信息,请参阅第7节:复位和时钟控制(RCC)
t_SCL=t_SYNC1+t_SYNC2+{[(SCLH+1)+(scl1)]x(PRESC+1)x t_I2CCLK}
t_SYNC1的持续时间取决于以下参数:
- 落坡
- 启用时,模拟滤波器引起的输入延迟
- 启用时,数字滤波器引起的输入延迟:DNF x t_I2CCLK
- SCL与I2CCLK时钟同步引起的延迟(2到3个I2CCLK周期)
- 上坡
- 启用时,模拟滤波器引起的输入延迟
- 启用时,数字滤波器引起的输入延迟:DNF x t_I2CCLK
- SCL与I2CCLK时钟同步引起的延迟(2到3个I2CCLK周期)
收集所有信息:根据I2C时钟频率和您想要使用的速度,您需要选择以下值:
PREC
、SCLDEL
、SDADEL
、SCLH
,SCLL
使用公式t_SCL=t_SYNC1+t_SYNC2+{[(SCLH+1)+(SCLL+1)]x(PREC+1)x t_I2CCLK}遵守I2C-SMBUS规范时钟计时
RM0377第614页也有一些I2C计时寄存器配置示例。TLDR:包含示例
注意:我还没有真正使用过I2C。以下所有内容均以文档为基础
(p。
233):
uint32_t I2C_InitTypeDef::Timing指定I2C_TIMINGR_寄存器值。此参数通过引用
至参考手册中的I2C初始化部分
(临641):
定时寄存器(I2C_TIMINGR)
(……)
预分频[3:0]:定时预分频器
此字段用于预标I2CCLK,以生成用于数据设置和保持计数器的时钟周期t_PREC(参考
至第587页上的I2C计时)和SCL高电平和低电平
计数器(参见第602页的I2C主机初始化)
t_PRESC=(PRESC+1)x t_I2CCLK
SCLDEL[3:0]:数据设置时间
该字段用于在SDA边缘和SCL上升边缘之间生成延迟t_SCLDEL。在NOSTRETCH=0的主模式和从模式下,SCL线在t_SCLDEL期间被拉伸到较低的位置
t_-SCLDEL=(SCLDEL+1)x t_-PRESC
注意:t\u SCLDEL用于生成t\u SU:DAT定时。
SDADEL[3:0]:数据保持时间
此字段用于生成延迟t_SDADEL betwe