Регистры 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).
| Экземпляр | Базовый адрес | Есть у |
|---|---|---|
| I2C1 | 0x4000 5400 | всех |
| I2C2 | 0x4000 5800 | всех |
| I2C3 | 0x4000 5C00 | всех |
| I2C4 | 0x5800 1C00 | всех |
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| I2C_CR1 | 0x00 | Включение, фильтры, прерывания и DMA | 0x0000 0000 |
| I2C_CR2 | 0x04 | Адрес ведомого, число байт, START и STOP | 0x0000 0000 |
| I2C_OAR1 | 0x08 | Собственный адрес 1 | 0x0000 0000 |
| I2C_OAR2 | 0x0C | Собственный адрес 2 с маской | 0x0000 0000 |
| I2C_TIMINGR | 0x10 | Временные параметры шины | 0x0000 0000 |
| I2C_TIMEOUTR | 0x14 | Тайм-ауты SMBus | 0x0000 0000 |
| I2C_ISR | 0x18 | Флаги состояния и прерываний | 0x0000 0001 |
| I2C_ICR | 0x1C | Сброс флагов | 0x0000 0000 |
| I2C_PECR | 0x20 | Контрольный байт PEC | 0x0000 0000 |
| I2C_RXDR | 0x24 | Принятый байт | 0x0000 0000 |
| I2C_TXDR | 0x28 | Байт для передачи | 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | PECEN | ALERTEN | SMBDEN | SMBHEN | GCEN | WUPEN | NOSTRETCH | SBC | |||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RXDMAEN | TXDMAEN | — | ANFOFF | DNF | ERRIE | TCIE | STOPIE | NACKIE | ADDRIE | RXIE | TXIE | PE | |||
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | PECBYTE | AUTOEND | RELOAD | NBYTES | |||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| NACK | STOP | START | HEAD10R | ADD10 | RD_WRN | SADD | |||||||||
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| OA1EN | — | OA1MODE | OA1 | ||||||||||||
- OA1EN (бит 15) — Включение собственного адреса 1.
- OA1MODE (бит 10) — Собственный адрес 1 — 10-битный.
- OA1 (биты 9:0) — Собственный адрес 1; 7-битный — в битах 7:1.
I2C_OAR2 — собственный адрес 2 с маской
Смещение 0x0C, 32 бит, после сброса 0x0000 0000. В коде: I2C1->OAR2.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| OA2EN | — | OA2MSK | OA2 | — | |||||||||||
- 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 111 OA2[7:1] не сравниваются: подтверждаются все 7-битные адреса, кроме зарезервированных I2C_OAR2_OA2MASK07 - OA2 (биты 7:1) — Собственный адрес 2 (7 бит).
I2C_TIMINGR — временные параметры шины
Смещение 0x10, 32 бит, после сброса 0x0000 0000. В коде: I2C1->TIMINGR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| PRESC | — | SCLDEL | SDADEL | ||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| SCLH | SCLL | ||||||||||||||
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| TEXTEN | — | TIMEOUTB | |||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| TIMOUTEN | — | TIDLE | TIMEOUTA | ||||||||||||
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | ADDCODE | DIR | |||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| BUSY | — | ALERT | TIMEOUT | PECERR | OVR | ARLO | BERR | TCR | TC | STOPF | NACKF | ADDR | RXNE | TXIS | TXE |
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | ALERTCF | TIMOUTCF | PECCF | OVRCF | ARLOCF | BERRCF | — | STOPCF | NACKCF | ADDRCF | — | ||||
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | PEC | ||||||||||||||
- PEC (биты 7:0) — Вычисленный байт PEC.
I2C_RXDR — принятый байт
Смещение 0x24, 32 бит, после сброса 0x0000 0000. В коде: I2C1->RXDR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | RXDATA | ||||||||||||||
- RXDATA (биты 7:0) — Принятый байт.
I2C_TXDR — байт для передачи
Смещение 0x28, 32 бит, после сброса 0x0000 0000. В коде: I2C1->TXDR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | TXDATA | ||||||||||||||
- TXDATA (биты 7:0) — Байт для передачи.
Частые вопросы
Почему I2C STM32H7 не стартует после смены системной частоты?
Значение TIMINGR рассчитано для такта ядра I2C. Если такт берётся от шины APB (PCLK1), смена частоты меняет и тайминги — выберите для I2C в D2CCIP2R независимый источник (HSI или CSI) или пересчитайте TIMINGR.
Источники
- STMicroelectronics. RM0433: Reference manual (Rev 9) — раздел 47.9: описание регистров, назначение полей и значения после сброса
- STMicroelectronics. cmsis-device-h7 v1.10.7: заголовки CMSIS stm32h742xx.h, stm32h743xx.h, stm32h750xx.h, stm32h753xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0
Нашли ошибку в регистрах?
Другие регистры STM32H7
- Все регистры STM32H7Блоки периферии и заголовки CMSIS
- RCC — тактирование и сбросRCC_CR, RCC_HSICFGR, RCC_CRRCR, RCC_CSICFGR, RCC_CFGR, RCC_D1CFGR
- GPIO — порты ввода-выводаGPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR, GPIOx_IDR, GPIOx_ODR
- SYSCFG — системная конфигурацияSYSCFG_PMCR, SYSCFG_EXTICR1, SYSCFG_EXTICR2, SYSCFG_EXTICR3, SYSCFG_EXTICR4, SYSCFG_CFGR
- EXTI — контроллер внешних прерываний и событийEXTI_RTSR1, EXTI_FTSR1, EXTI_SWIER1, EXTI_D3PMR1, EXTI_D3PCR1L, EXTI_D3PCR1H
- USART — последовательные порты USART и LPUARTUSART_CR1, USART_CR2, USART_CR3, USART_BRR, USART_GTPR, USART_RTOR
- SPI — интерфейсы SPI и I2SSPI_CR1, SPI_CR2, SPI_CFG1, SPI_CFG2, SPI_IER, SPI_SR
- TIM — таймерыTIMx_CR1, TIMx_CR2, TIMx_SMCR, TIMx_DIER, TIMx_SR, TIMx_EGR
- LPTIM — малопотребляющие таймерыLPTIM_ISR, LPTIM_ICR, LPTIM_IER, LPTIM_CFGR, LPTIM_CR, LPTIM_CMP
- DMA — контроллеры DMA и мультиплексор запросовDMA_LISR, DMA_HISR, DMA_LIFCR, DMA_HIFCR, DMA_SxCR, DMA_SxNDT
- АЦП — аналого-цифровые преобразователиADC_ISR, ADC_IER, ADC_CR, ADC_CFGR, ADC_CFGR2, ADC_SMPR1
- IWDG — независимый сторожевой таймерIWDG_KR, IWDG_PR, IWDG_RLR, IWDG_SR, IWDG_WINR
- WWDG — оконный сторожевой таймерWWDG_CR, WWDG_CFR, WWDG_SR
- CRC — блок вычисления CRCCRC_DR, CRC_IDR, CRC_CR, CRC_INIT, CRC_POL
- DBGMCU — поддержка отладкиDBGMCU_IDC, DBGMCU_CR, DBGMCU_APB3FZ1, DBGMCU_APB1LFZ1, DBGMCU_APB2FZ1, DBGMCU_APB4FZ1
- PWR — управление питаниемPWR_CR1, PWR_CSR1, PWR_CR2, PWR_CR3, PWR_CPUCR, PWR_D3CR
- RTC — часы реального времениRTC_TR, RTC_DR, RTC_CR, RTC_ISR, RTC_PRER, RTC_WUTR
- ЦАП — цифро-аналоговый преобразовательDAC_CR, DAC_SWTRGR, DAC_DHR12R1, DAC_DHR12L1, DAC_DHR8R1, DAC_DHR12R2
Калькуляторы и статьи
- I2C_TIMINGR STM32PRESC, SCLL, SCLH, SDADEL и SCLDEL по частоте I2CCLK и фронтам
- Подтягивающие резисторы I²CДиапазон Rp по напряжению, скорости и ёмкости шины
- I²CSDA и SCL, START/STOP, ACK, адреса, скорости, расчёт подтяжек
- STM32H7Cortex-M7 от 280 до 600 МГц, двухъядерные H745/H747 — линейки, память, загрузка и распиновки