繁体   English   中英

如何为stm32l0计算i2c时序

[英]how to calculate i2c timing for stm32l0

我有一个stm32l0系列处理器,但我不知道如何计算i2c时序。 我想使用Bosh bme680 / bme280传感器。 我只找到stm32F0 / f3的Timming配置工具。 Some1知道如何计算吗?

TLDRRM0377参考手册“基于超低功耗STM32L0x1基于Arm®的高级32位MCU”,第614页包含示例。


注意:我实际上还没有使用过I2C。 以下所有内容均基于文档。

  1. UM1749用户手册“ STM32L0 HAL和低层驱动程序的描述”p。233 ):

    uint32_t I2C_InitTypeDef :: Timing指定I2C_TIMINGR_register值。 该参数通过参考参考手册中的I2C初始化部分计算得出

  2. RM0377参考手册“超低功耗STM32L0x1基于Arm®的高级32位MCU” (第641页):

    时序寄存器(I2C_TIMINGR)

    (...)

    PRESC [3:0] :定时预分频器

    此字段用于预分频I2CCLK,以生成时钟周期t_PRESC,用于数据设置和保持计数器(请参阅第587页的I2C时序)以及SCL高电平和低电平计数器(请参阅第602页的I2C主设备初始化)。

    t_PRESC = (PRESC+1) x t_I2CCLK

    SCLDEL [3:0] :数据建立时间该字段用于在SDA沿和SCL上升沿之间生成延迟t_SCLDEL。 在主机模式和从机模式下,其中NOSTRETCH = 0,在t_SCLDEL期间SCL线被拉低。

    t_SCLDEL = (SCLDEL+1) x t_PRESC

    注意:t_SCLDEL用于生成t_SU:DAT时序。

    SDADEL [3:0] :数据保持时间该字段用于生成SCL下降沿和SDA沿之间的延迟t_SDADEL。 在主机模式和从机模式下(NOSTRETCH = 0),在t_SDADEL期间SCL线被拉低。

    t_SDADEL = SDADEL x t_PRESC

    注意:SDADEL用于生成t_HD:DAT时序。

    SCLH [7:0] :SCL高电平周期(主模式)该字段用于在主模式下生成SCL高电平周期。

    t_SCLH = (SCLH+1) x t_PRESC

    注意:SCLH还用于生成t_SU:STO和t_HD:STA时序。

    SCLL [7:0] :SCL低电平周期(主模式)该字段用于在主模式下生成SCL低电平周期。

    t_SCLL = (SCLL+1) x t_PRESC

    注意:SCLL还用于生成t_BUF和t_SU:STA时序。

    有关预分频器的更多信息,请参见有关计时器的段落(第433页)。

  3. RM0377(第581页):

    该接口通过数据引脚(SDA)和时钟引脚(SCL)连接到I2C总线。 它可以与标准(最高100 kHz),快速模式(最高400 kHz)或快速模式增强型(最高1MHz)I2C总线连接。

    因此,为了进行通信,I2C时钟需要具有适当的频率。

  4. RM0377(第583页):

    可以从以下三个时钟源中选择该独立的时钟源:

    • PCLK1:APB1时钟(默认值)
    • HSI16:内部16 MHz RC振荡器
    • SYSCLK:系统时钟有关更多详细信息,请参见第7节:复位和时钟控制(RCC)。
  5. RM0377(第604页): I2C-SMBUS规范时钟时序

  6. RM0377(第602页):

    t_SCL = t_SYNC1 + t_SYNC2 + {[(SCLH+1) + (SCLL+1)] x (PRESC+1) x t_I2CCLK}

    t_SYNC1的持续时间取决于以下参数:

    • SCL下降斜率
    • 使能后,由模拟滤波器引起的输入延迟。
    • 使能后,由数字滤波器引起的输入延迟:DNF x t_I2CCLK
    • SCL与I2CCLK时钟同步导致的延迟(2至3个I2CCLK周期)

    t_SYNC2的持续时间取决于以下参数:

    • SCL上升斜率
    • 使能后,由模拟滤波器引起的输入延迟。
    • 使能后,由数字滤波器引起的输入延迟:DNF x t_I2CCLK
    • SCL与I2CCLK时钟同步导致的延迟(2至3个I2CCLK周期)
  7. BME280数据表 (第30页):

    支持所有模式(标准,快速,高速)。


收集全部信息 :基于I2C时钟频率和要使用的速度,您需要使用公式t_SCL = t_SYNC1 + t_SYNC2 + {[(SCLH+1) + (SCLL+1)] x (PRESC+1) x t_I2CCLK}选择符合I2C-SMBUS specification clock timingsPRESCSCLDELSDADELSCLHSCLL t_SCL = t_SYNC1 + t_SYNC2 + {[(SCLH+1) + (SCLL+1)] x (PRESC+1) x t_I2CCLK}

第614页的I2C_TIMINGR register configuration examples中还有一些I2C_TIMINGR register configuration examples

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM