Перейти к содержанию

Регистры I2C STM32H7

Регистры I2C1…I2C4 STM32H742/H743/H750/H753: включение и фильтры, адрес и число байтов передачи, тайминги SCL, собственные адреса, флаги состояния и ошибок, SMBus.

I2C STM32H7 — того же поколения, что у STM32G4: тайминги в TIMINGR, передачей управляет CR2, флаги ISR сбрасываются записью в ICR. Такт ядра I2C1–I2C3 выбирается в D2CCIP2R, I2C4 — в D3CCIPR (RM0433, раздел 47.9).

ЭкземплярБазовый адресЕсть у
I2C10x4000 5400всех
I2C20x4000 5800всех
I2C30x4000 5C00всех
I2C40x5800 1C00всех

Регистры блока

РегистрСмещениеНазначениеПосле сброса
I2C_CR10x00Включение, фильтры, прерывания и DMA0x0000 0000
I2C_CR20x04Адрес ведомого, число байт, START и STOP0x0000 0000
I2C_OAR10x08Собственный адрес 10x0000 0000
I2C_OAR20x0CСобственный адрес 2 с маской0x0000 0000
I2C_TIMINGR0x10Временные параметры шины0x0000 0000
I2C_TIMEOUTR0x14Тайм-ауты SMBus0x0000 0000
I2C_ISR0x18Флаги состояния и прерываний0x0000 0001
I2C_ICR0x1CСброс флагов0x0000 0000
I2C_PECR0x20Контрольный байт PEC0x0000 0000
I2C_RXDR0x24Принятый байт0x0000 0000
I2C_TXDR0x28Байт для передачи0x0000 0000

Конструктор значения

Выберите регистр и значения полей — конструктор покажет 32-битное значение и строку на C с макросами CMSIS. Поля, которые вы не меняете, берутся из значения после сброса.

Значение: 0x00000000

0000 0000 0000 0000 0000 0000 0000 0000

I2C1->CR1 = 0x00000000;

I2C_CR1 — включение, фильтры, прерывания и DMA

Смещение 0x00, 32 бит, после сброса 0x0000 0000. В коде: I2C1->CR1.

31302928272625242322212019181716
—PECENALERTENSMBDENSMBHENGCENWUPENNOSTRETCHSBC
1514131211109876543210
RXDMAENTXDMAEN—ANFOFFDNFERRIETCIESTOPIENACKIEADDRIERXIETXIEPE
  • PECEN (бит 23) — Контрольный байт PEC (SMBus).
  • ALERTEN (бит 22) — Сигнал SMBALERT.
  • SMBDEN (бит 21) — Ответ на адрес устройства SMBus по умолчанию (0b1100001x).
  • SMBHEN (бит 20) — Ответ на адрес хоста SMBus (0b0001000x).
  • GCEN (бит 19) — Ответ на общий вызов (адрес 0x00).
  • WUPEN (бит 18) — Пробуждение из режима Stop при совпадении адреса.
  • NOSTRETCH (бит 17) — Запрет растягивания SCL ведомым.
  • SBC (бит 16) — Подтверждение каждого байта программой (ведомый, SMBus).
  • RXDMAEN (бит 15) — DMA при приёме.
  • TXDMAEN (бит 14) — DMA при передаче.
  • ANFOFF (бит 12) — Выключение аналогового фильтра помех.
  • DNF (биты 11:8) — Цифровой фильтр помех: 0 — выключен, 1…15 — длина в тактах I2CCLK.
  • ERRIE (бит 7) — Прерывание по ошибкам: BERR, ARLO, OVR, PECERR, TIMEOUT, ALERT.
  • TCIE (бит 6) — Прерывание по окончании передачи (TC, TCR).
  • STOPIE (бит 5) — Прерывание по условию STOP.
  • NACKIE (бит 4) — Прерывание по приёму NACK.
  • ADDRIE (бит 3) — Прерывание по совпадению адреса (ведомый).
  • RXIE (бит 2) — Прерывание: принят байт (RXNE).
  • TXIE (бит 1) — Прерывание: можно писать следующий байт (TXIS).
  • PE (бит 0) — Включение I2C.

I2C_CR2 — адрес ведомого, число байт, START и STOP

Смещение 0x04, 32 бит, после сброса 0x0000 0000. В коде: I2C1->CR2.

31302928272625242322212019181716
—PECBYTEAUTOENDRELOADNBYTES
1514131211109876543210
NACKSTOPSTARTHEAD10RADD10RD_WRNSADD
  • PECBYTE (бит 26) — Передать или принять байт PEC.
  • AUTOEND (бит 25) — Автоматический STOP после NBYTES байт (ведущий).
  • RELOAD (бит 24) — Передача длиннее NBYTES: после них — флаг TCR и новое NBYTES.
  • NBYTES (биты 23:16) — Число байт передачи: 0…255.
  • NACK (бит 15) — Ответить NACK на следующий байт (ведомый).
  • STOP (бит 14) — Сформировать STOP после текущего байта (ведущий).
  • START (бит 13) — Сформировать START или повторный START и передать адрес.
  • HEAD10R (бит 12) — Чтение с 10-битным адресом: только заголовок после повторного START.
  • ADD10 (бит 11) — 10-битный адрес ведомого.
  • RD_WRN (бит 10) — Направление: 0 — запись, 1 — чтение.
  • SADD (биты 9:0) — Адрес ведомого; 7-битный адрес пишется в биты 7:1.

I2C_OAR1 — собственный адрес 1

Смещение 0x08, 32 бит, после сброса 0x0000 0000. В коде: I2C1->OAR1.

31302928272625242322212019181716
—
1514131211109876543210
OA1EN—OA1MODEOA1
  • OA1EN (бит 15) — Включение собственного адреса 1.
  • OA1MODE (бит 10) — Собственный адрес 1 — 10-битный.
  • OA1 (биты 9:0) — Собственный адрес 1; 7-битный — в битах 7:1.

I2C_OAR2 — собственный адрес 2 с маской

Смещение 0x0C, 32 бит, после сброса 0x0000 0000. В коде: I2C1->OAR2.

31302928272625242322212019181716
—
1514131211109876543210
OA2EN—OA2MSKOA2—
  • OA2EN (бит 15) — Включение собственного адреса 2.
  • OA2MSK (биты 10:8) — Маска адреса 2: число младших битов OA2, которые не сравниваются.
    OA2MSKЗначениеМакрос CMSIS
    001Не сравниваются OA2[1], сравниваются OA2[7:2]I2C_OAR2_OA2MASK01
    010Не сравниваются OA2[2:1], сравниваются OA2[7:3]I2C_OAR2_OA2MASK02
    011Не сравниваются OA2[3:1], сравниваются OA2[7:4]I2C_OAR2_OA2MASK03
    100Не сравниваются OA2[4:1], сравниваются OA2[7:5]I2C_OAR2_OA2MASK04
    101Не сравниваются OA2[5:1], сравниваются OA2[7:6]I2C_OAR2_OA2MASK05
    110Не сравниваются OA2[6:1], сравниваются OA2[7:7]I2C_OAR2_OA2MASK06
    111OA2[7:1] не сравниваются: подтверждаются все 7-битные адреса, кроме зарезервированныхI2C_OAR2_OA2MASK07
  • OA2 (биты 7:1) — Собственный адрес 2 (7 бит).

I2C_TIMINGR — временные параметры шины

Смещение 0x10, 32 бит, после сброса 0x0000 0000. В коде: I2C1->TIMINGR.

31302928272625242322212019181716
PRESC—SCLDELSDADEL
1514131211109876543210
SCLHSCLL
  • PRESC (биты 31:28) — Предделитель I2CCLK: tPRESC = (PRESC + 1) / fI2CCLK.
  • SCLDEL (биты 23:20) — Время установки данных: (SCLDEL + 1) × tPRESC.
  • SDADEL (биты 19:16) — Время удержания данных: SDADEL × tPRESC.
  • SCLH (биты 15:8) — Длительность высокого уровня SCL: (SCLH + 1) × tPRESC.
  • SCLL (биты 7:0) — Длительность низкого уровня SCL: (SCLL + 1) × tPRESC.

I2C_TIMEOUTR — тайм-ауты SMBus

Смещение 0x14, 32 бит, после сброса 0x0000 0000. В коде: I2C1->TIMEOUTR.

31302928272625242322212019181716
TEXTEN—TIMEOUTB
1514131211109876543210
TIMOUTEN—TIDLETIMEOUTA
  • TEXTEN (бит 31) — Тайм-аут суммарного растягивания SCL (tLOW:SEXT, tLOW:MEXT).
  • TIMEOUTB (биты 27:16) — Тайм-аут B: суммарное растягивание SCL.
  • TIMOUTEN (бит 15) — Тайм-аут шины SMBus.
  • TIDLE (бит 12) — Что отслеживает тайм-аут A: низкий уровень SCL (0) или простой шины — SCL и SDA высокие (1).
  • TIMEOUTA (биты 11:0) — Тайм-аут A шины SMBus.

I2C_ISR — флаги состояния и прерываний

Смещение 0x18, 32 бит, после сброса 0x0000 0001. В коде: I2C1->ISR.

31302928272625242322212019181716
—ADDCODEDIR
1514131211109876543210
BUSY—ALERTTIMEOUTPECERROVRARLOBERRTCRTCSTOPFNACKFADDRRXNETXISTXE
  • ADDCODE (биты 23:17) — Принятый адрес (ведомый).
  • DIR (бит 16) — Направление передачи у ведомого: 1 — ведущий читает.
  • BUSY (бит 15) — Шина занята: между START и STOP.
  • ALERT (бит 13) — Сигнал SMBALERT.
  • TIMEOUT (бит 12) — Тайм-аут шины.
  • PECERR (бит 11) — Ошибка PEC при приёме.
  • OVR (бит 10) — Переполнение или недогрузка (ведомый при NOSTRETCH = 1).
  • ARLO (бит 9) — Потеря арбитража.
  • BERR (бит 8) — Ошибка шины: START или STOP не на месте.
  • TCR (бит 7) — Передано NBYTES байт при RELOAD = 1: запишите новое NBYTES.
  • TC (бит 6) — Передано NBYTES байт при AUTOEND = 0: пора START или STOP.
  • STOPF (бит 5) — Обнаружено условие STOP.
  • NACKF (бит 4) — Принят NACK.
  • ADDR (бит 3) — Совпадение адреса (ведомый).
  • RXNE (бит 2) — В RXDR есть принятый байт.
  • TXIS (бит 1) — Нужен следующий байт в TXDR.
  • TXE (бит 0) — Регистр TXDR пуст; запись 1 очищает его.

I2C_ICR — сброс флагов

Смещение 0x1C, 32 бит, после сброса 0x0000 0000. В коде: I2C1->ICR.

31302928272625242322212019181716
—
1514131211109876543210
—ALERTCFTIMOUTCFPECCFOVRCFARLOCFBERRCF—STOPCFNACKCFADDRCF—
  • ALERTCF (бит 13) — Сброс флага ALERT записью 1.
  • TIMOUTCF (бит 12) — Сброс флага TIMEOUT записью 1.
  • PECCF (бит 11) — Сброс флага PECERR записью 1.
  • OVRCF (бит 10) — Сброс флага OVR записью 1.
  • ARLOCF (бит 9) — Сброс флага ARLO записью 1.
  • BERRCF (бит 8) — Сброс флага BERR записью 1.
  • STOPCF (бит 5) — Сброс флага STOPF записью 1.
  • NACKCF (бит 4) — Сброс флага NACKF записью 1.
  • ADDRCF (бит 3) — Сброс флага ADDR записью 1.

I2C_PECR — контрольный байт PEC

Смещение 0x20, 32 бит, после сброса 0x0000 0000. В коде: I2C1->PECR.

31302928272625242322212019181716
—
1514131211109876543210
—PEC
  • PEC (биты 7:0) — Вычисленный байт PEC.

I2C_RXDR — принятый байт

Смещение 0x24, 32 бит, после сброса 0x0000 0000. В коде: I2C1->RXDR.

31302928272625242322212019181716
—
1514131211109876543210
—RXDATA
  • RXDATA (биты 7:0) — Принятый байт.

I2C_TXDR — байт для передачи

Смещение 0x28, 32 бит, после сброса 0x0000 0000. В коде: I2C1->TXDR.

31302928272625242322212019181716
—
1514131211109876543210
—TXDATA
  • TXDATA (биты 7:0) — Байт для передачи.

Частые вопросы

Почему I2C STM32H7 не стартует после смены системной частоты?

Значение TIMINGR рассчитано для такта ядра I2C. Если такт берётся от шины APB (PCLK1), смена частоты меняет и тайминги — выберите для I2C в D2CCIP2R независимый источник (HSI или CSI) или пересчитайте TIMINGR.

Источники

  1. STMicroelectronics. RM0433: Reference manual (Rev 9) — раздел 47.9: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-h7 v1.10.7: заголовки CMSIS stm32h742xx.h, stm32h743xx.h, stm32h750xx.h, stm32h753xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

Нашли ошибку в регистрах?

Другие регистры STM32H7

Калькуляторы и статьи