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

Регистры CRC STM32G4

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

Блок CRC STM32G4 такой же, как у STM32F0, F3 и G0: полином POL, размер POLYSIZE, начальное значение INIT; данные пишут в DR словами, полусловами или байтами, результат читают оттуда же (RM0440, раздел 16.4).

После сброса — CRC-32 с полиномом 0x04C1 1DB7 и начальным 0xFFFF FFFF без обращения битов. Блок тактируется битом CRCEN в RCC_AHB1ENR.

ЭкземплярБазовый адресЕсть у
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-32 как в zlib?

REV_IN = 11 (по словам), REV_OUT = 1, полином и начальное значение по умолчанию; результат инвертируйте: crc = ~CRC->DR.

Как сбросить вычислитель?

Запишите 1 в бит RESET регистра CR — в DR загрузится INIT.

Источники

  1. STMicroelectronics. RM0440: Reference manual (Rev 9) — раздел 16.4: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-g4 v1.2.6: заголовки CMSIS stm32g431xx.h, stm32g441xx.h, stm32g471xx.h, stm32g473xx.h, stm32g474xx.h, stm32g483xx.h, stm32g484xx.h, stm32g491xx.h, stm32g4a1xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

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

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

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