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

Регистры CRC STM32G0

Регистры блока CRC STM32G0: запись данных и чтение результата, сброс, начальное значение, полином и его размер, обращение порядка битов входа и выхода.

Блок CRC STM32G0 принимает данные по 8, 16 или 32 бита и считает CRC с любым полиномом размером 7, 8, 16 или 32 бита (POL и POLYSIZE). По умолчанию — CRC-32 с полиномом 0x04C1 1DB7 и начальным значением 0xFFFF FFFF (RM0444, раздел 14.3).

REV_IN обращает биты входа по байтам, полусловам или словам, REV_OUT — биты результата. Например, CRC-16/MODBUS: POLYSIZE = 16 бит, POL = 0x8005, INIT = 0xFFFF, REV_IN = 01, REV_OUT = 1, данные — по байтам.

ЭкземплярБазовый адресЕсть у
CRC0x4002 3000всех

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

РегистрСмещениеНазначениеПосле сброса
CRC_DR0x00Данные и результат0xFFFF FFFF
CRC_IDR0x04Свободный регистр0x0000 0000
CRC_CR0x08Сброс, размер полинома и обращение битов0x0000 0000
CRC_INIT0x10Начальное значение0xFFFF FFFF
CRC_POL0x14Полином0x04C1 1DB7

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

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

Значение: 0xFFFFFFFF

1111 1111 1111 1111 1111 1111 1111 1111

CRC->DR = 0xFFFFFFFF;

CRC_DR — данные и результат

Смещение 0x00, адрес 0x4002 3000, 32 бит, после сброса 0xFFFF FFFF. В коде: CRC->DR.

31302928272625242322212019181716
DR
1514131211109876543210
DR
  • DR (биты 31:0) — Запись — следующие данные (8, 16 или 32 бита), чтение — текущий CRC.

CRC_IDR — свободный регистр

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

31302928272625242322212019181716
IDR
1514131211109876543210
IDR
  • IDR (биты 31:0) — Свободный регистр для временных данных.

CRC_CR — сброс, размер полинома и обращение битов

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

31302928272625242322212019181716
—
1514131211109876543210
—REV_OUTREV_INPOLYSIZE—RESET
  • REV_OUT (бит 7) — Обращение порядка битов результата.
  • REV_IN (биты 6:5) — Обращение порядка битов входных данных: по байтам, полусловам или словам.
  • POLYSIZE (биты 4:3) — Размер полинома: 32, 16, 8 или 7 бит.
  • RESET (бит 0) — Сброс вычислителя: DR = CRC_INIT.

CRC_INIT — начальное значение

Смещение 0x10, адрес 0x4002 3010, 32 бит, после сброса 0xFFFF FFFF. В коде: CRC->INIT.

31302928272625242322212019181716
INIT
1514131211109876543210
INIT
  • INIT (биты 31:0) — Начальное значение CRC.

CRC_POL — полином

Смещение 0x14, адрес 0x4002 3014, 32 бит, после сброса 0x04C1 1DB7. В коде: CRC->POL.

31302928272625242322212019181716
POL
1514131211109876543210
POL
  • POL (биты 31:0) — Коэффициенты полинома (по умолчанию 0x04C1 1DB7 — CRC-32).

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

Как посчитать CRC-16 Modbus на STM32G0?

CRC->POL = 0x8005; CRC->INIT = 0xFFFF; CR = POLYSIZE_0 (16 бит) | REV_IN_0 | REV_OUT | RESET; затем байты через *(volatile uint8_t *)&CRC->DR. Результат — младшие 16 бит DR.

Источники

  1. STMicroelectronics. RM0444: Reference manual (Rev 6) — раздел 14.4: описание регистров, назначение полей и значения после сброса
  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

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