簡體   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