Как рассчитать время i2c для stm32l0

У меня есть процессор серии stm32l0, и я не знаю, как рассчитать время i2c. Хочу работать с сенсором Bosh bme680 / bme280. Я нашел только инструмент настройки времени для stm32F0 / f3. Some1 умеют его рассчитать?

(вы также можете продолжить методом проб и ошибок ...)

Attersson 28.05.2018 13:29

ИМХО, лучший метод измерения времени - использовать контрольные точки и осциллограф. Напишите некоторый тестовый код, который утверждает контрольную точку в начале и отменяет контрольную точку в конце измерения. Используйте оскоп, чтобы измерить время.

Thomas Matthews 28.05.2018 18:28

В процессоре ARM нет метода для точного расчета времени выполнения инструкций из-за кешей инструкций, буферов и алгоритмов упреждающего просмотра, продолжительности выборки и сохранения в памяти, прогнозирования ветвлений. Поищите в Интернете "Расчет времени выполнения инструкций ARM".

Thomas Matthews 28.05.2018 18:30

Я не уверен, что моя проблема ясна для вас ... ммм, я имею в виду, что хочу настроить параметры для шины i2c, например namei2c.Instance = I2C1; namei2c.Init.OwnAddress1 = 0; namei2c.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; и т.д. и т.д ... Я не уверен, что писать в настройку namei2c.Init.Timing, как рассчитать / выбор хорошо;)

Kuba 29.05.2018 10:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
5 068
1

Ответы 1

TL; DR: RM0377 Справочное руководство "Ультра-маломощный STM32L0x1 Advanced Arm®-based 32-bit MCU », стр. 614 содержит примеры.


Примечание: я еще не работал с I2C. Все нижеследующее основано на документации.

  1. Руководство пользователя UM1749 "Описание STM32L0 HAL и нижнего уровня. водители » (стр. 233):

    uint32_t I2C_InitTypeDef::Timing Specifies the I2C_TIMINGR_register value. This parameter calculated by referring to I2C initialization section in Reference manual

  2. RM0377 Справочное руководство "Ультра-маломощный STM32L0x1 Advanced Arm®-based 32-bit MCU » (стр.641):

    Timing register (I2C_TIMINGR)

    (...)

    PRESC[3:0] : Timing prescaler

    This field is used to prescale I2CCLK in order to generate the clock period t_PRESC used for data setup and hold counters (refer to I2C timings on page 587 ) and for SCL high and low level counters (refer to I2C master initialization on page 602 ).

    t_PRESC = (PRESC+1) x t_I2CCLK

    SCLDEL[3:0] : Data setup time This field is used to generate a delay t_SCLDEL between SDA edge and SCL rising edge. In master mode and in slave mode with NOSTRETCH = 0, the SCL line is stretched low during t_SCLDEL.

    t_SCLDEL = (SCLDEL+1) x t_PRESC

    Note: t_SCLDEL is used to generate t_SU:DAT timing.

    SDADEL[3:0] : Data hold time This field is used to generate the delay t_SDADEL between SCL falling edge and SDA edge. In master mode and in slave mode with NOSTRETCH = 0, the SCL line is stretched low during t_SDADEL.

    t_SDADEL = SDADEL x t_PRESC

    Note: SDADEL is used to generate t_HD:DAT timing.

    SCLH[7:0] : SCL high period (master mode) This field is used to generate the SCL high period in master mode.

    t_SCLH = (SCLH+1) x t_PRESC

    Note: SCLH is also used to generate t_SU:STO and t_HD:STA timing.

    SCLL[7:0] : SCL low period (master mode) This field is used to generate the SCL low period in master mode.

    t_SCLL = (SCLL+1) x t_PRESC

    Note: SCLL is also used to generate t_BUF and t_SU:STA timings.

    Более подробную информацию о предделителях можно найти в параграфах о таймерах. (стр. 433).

  3. RM0377 (стр. 581):

    The interface is connected to the I2C bus by a data pin (SDA) and by a clock pin (SCL). It can be connected with a standard (up to 100 kHz), Fast-mode (up to 400 kHz) or Fast-mode Plus (up to 1MHz) I2C bus.

    Таким образом, для связи часы I2C должны иметь соответствующую частоту.

  4. RM0377 (стр. 583):

    This independent clock source can be selected from the following three clock sources:

    • PCLK1: APB1 clock (default value)
    • HSI16: internal 16 MHz RC oscillator
    • SYSCLK: system clock Refer to Section 7: Reset and clock control (RCC) for more details.
  5. RM0377 (стр. 604): I2C-SMBUS specification clock timings

  6. RM0377 (стр. 602):

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

    The duration of t_SYNC1 depends on these parameters:

    • SCL falling slope
    • When enabled, input delay induced by the analog filter.
    • When enabled, input delay induced by the digital filter: DNF x t_I2CCLK
    • Delay due to SCL synchronization with I2CCLK clock (2 to 3 I2CCLK periods)

    The duration of t_SYNC2 depends on these parameters:

    • SCL rising slope
    • When enabled, input delay induced by the analog filter.
    • When enabled, input delay induced by the digital filter: DNF x t_I2CCLK
    • Delay due to SCL synchronization with I2CCLK clock (2 to 3 I2CCLK periods)
  7. BME280 Лист данных (стр.30):

    All modes (standard, fast, high speed) are supported.


Собирать все это: на основе тактовой частоты I2C и скорости, которую вы хотите использовать, вам необходимо выбрать такие значения PRESC, SCLDEL, SDADEL, SCLH, SCLL, которые соответствуют I2C-SMBUS specification clock timings, используя формулу t_SCL = t_SYNC1 + t_SYNC2 + {[(SCLH+1) + (SCLL+1)] x (PRESC+1) x t_I2CCLK}.

Также есть несколько I2C_TIMINGR register configuration examples в RM0377 на странице 614.

Другие вопросы по теме