Регистры 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.
| Экземпляр | Базовый адрес | Есть у |
|---|---|---|
| I2C1 | 0x4000 5400 | всех |
| I2C2 | 0x4000 5800 | всех |
| I2C3 | 0x4000 8800 | STM32G0B1, STM32G0C1 |
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| 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 | SWRST | 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 при передаче.
- 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.
| 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) — Байт для передачи.
Частые вопросы
Какое значение TIMINGR для 400 кГц?
При I2CCLK = 8 МГц — 0x0031 0309 по таблице примеров RM0444 (раздел 32.4.10): PRESC = 0, SCLL = 9, SCLH = 3, SDADEL = 1, SCLDEL = 3. При тактировании от HSI16 или SYSCLK значение другое: пересчитайте его в калькуляторе TIMINGR или в STM32CubeMX.
Источники
- STMicroelectronics. RM0444: Reference manual (Rev 6) — раздел 32.9: описание регистров, назначение полей и значения после сброса
- 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
- Все регистры STM32G0Блоки периферии и заголовки CMSIS
- RCC — тактирование и сбросRCC_CR, RCC_ICSCR, RCC_CFGR, RCC_PLLCFGR, RCC_CRRCR, RCC_CIER
- GPIO — порты ввода-выводаGPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR, GPIOx_IDR, GPIOx_ODR
- SYSCFG — системная конфигурацияSYSCFG_CFGR1, SYSCFG_CFGR2
- EXTI — внешние прерыванияEXTI_RTSR1, EXTI_FTSR1, EXTI_SWIER1, EXTI_RPR1, EXTI_FPR1, EXTI_RTSR2
- USART — последовательные порты USART и LPUARTUSART_CR1, USART_CR2, USART_CR3, USART_BRR, USART_GTPR, USART_RTOR
- SPI — интерфейсы SPI и I2SSPI_CR1, SPI_CR2, SPI_SR, SPI_DR, SPI_CRCPR, SPI_RXCRCR
- 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 — прямой доступ к памяти и DMAMUXDMA_ISR, DMA_IFCR, DMA_CCR, DMA_CNDTR, DMA_CPAR, DMA_CMAR
- ADC — аналого-цифровой преобразовательADC_ISR, ADC_IER, ADC_CR, ADC_CFGR1, ADC_CFGR2, ADC_SMPR
- 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
- DBG — блок отладкиDBG_IDCODE, DBG_CR, DBG_APB_FZ1, DBG_APB_FZ2
- PWR — управление питаниемPWR_CR1, PWR_CR2, PWR_CR3, PWR_CR4, PWR_SR1, PWR_SR2
- FLASH — интерфейс флеш-памятиFLASH_ACR, FLASH_KEYR, FLASH_OPTKEYR, FLASH_SR, FLASH_CR, FLASH_ECCR
- RTC — часы реального времени и защита от вмешательстваRTC_TR, RTC_DR, RTC_SSR, RTC_ICSR, RTC_PRER, RTC_WUTR
- DAC — цифро-аналоговый преобразовательDAC_CR, DAC_SWTRIGR, DAC_DHR12R1, DAC_DHR12L1, DAC_DHR8R1, DAC_DHR12R2
Калькуляторы и статьи
- I2C_TIMINGR STM32PRESC, SCLL, SCLH, SDADEL и SCLDEL по частоте I2CCLK и фронтам
- I²CSDA и SCL, START/STOP, ACK, адреса, скорости, расчёт подтяжек
- Подтягивающие резисторы I²CДиапазон Rp по напряжению, скорости и ёмкости шины
- STM32G0Cortex-M0+, до 64 МГц: G030–G0B0 Value line, G031–G0C1 — линейки и распиновки