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

Регистры I2C STM32G0

Регистры I2C1–I2C3 STM32G0: включение и фильтры помех, временные параметры шины, адрес ведомого и число байт, условия START и STOP, собственные адреса, флаги и их сброс, SMBus.

I2C STM32G0 — тот же блок, что у STM32F0: скорость и времена шины задаёт регистр TIMINGR, ведущий пишет в CR2 адрес, направление, число байт и START, а дальше блок сам проводит обмен. Источник такта I2C1 (и I2C2 у STM32G0B1/C1) — PCLK, SYSCLK или HSI16, выбирается в RCC_CCIPR (RM0444, раздел 32.4).

Флаги сбрасываются записью 1 в ICR. I2C1 может разбудить микроконтроллер из Stop по совпадению адреса (бит WUPEN), если тактируется от HSI16. Fast-mode Plus включается для выводов в SYSCFG_CFGR1.

ЭкземплярБазовый адресЕсть у
I2C10x4000 5400всех
I2C20x4000 5800всех
I2C30x4000 8800STM32G0B1, STM32G0C1

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

РегистрСмещениеНазначениеПосле сброса
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
RXDMAENTXDMAENSWRSTANFOFFDNFERRIETCIESTOPIENACKIEADDRIERXIETXIEPE
  • 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 при передаче.
  • SWRST (бит 13) — Программный сброс I2C.
  • 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) — Байт для передачи.

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

Какое значение TIMINGR для 400 кГц?

При I2CCLK = 8 МГц — 0x0031 0309 по таблице примеров RM0444 (раздел 32.4.10): PRESC = 0, SCLL = 9, SCLH = 3, SDADEL = 1, SCLDEL = 3. При тактировании от HSI16 или SYSCLK значение другое: пересчитайте его в калькуляторе TIMINGR или в STM32CubeMX.

Источники

  1. STMicroelectronics. RM0444: Reference manual (Rev 6) — раздел 32.9: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-g0 v1.4.5: заголовки CMSIS stm32g031xx.h, stm32g041xx.h, stm32g051xx.h, stm32g061xx.h, stm32g071xx.h, stm32g081xx.h, stm32g0b1xx.h, stm32g0c1xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

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

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

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