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

Регистры CRC STM32H7

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

Блок CRC STM32H7 — тот же, что у STM32F7 и STM32G4: программируемый полином длиной 7, 8, 16 или 32 бита, начальное значение CRC_INIT, после сброса — CRC-32 Ethernet. Тактирование — бит CRCEN регистра RCC_AHB4ENR (RM0433, раздел 21.4).

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

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

РегистрСмещениеНазначениеПосле сброса
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, адрес 0x5802 4C00, 32 бит, после сброса 0xFFFF FFFF. В коде: CRC->DR.

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

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

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

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

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

Смещение 0x08, адрес 0x5802 4C08, 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, адрес 0x5802 4C10, 32 бит, после сброса 0xFFFF FFFF. В коде: CRC->INIT.

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

CRC_POL — полином

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

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

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

Как посчитать CRC-16/CCITT на STM32H7?

POLYSIZE = 01 (16 бит), CRC_POL = 0x1021, CRC_INIT = 0xFFFF, без обращения битов; пишите данные байтами и берите младшие 16 бит CRC_DR.

Источники

  1. STMicroelectronics. RM0433: Reference manual (Rev 9) — раздел 21.4: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-h7 v1.10.7: заголовки CMSIS stm32h742xx.h, stm32h743xx.h, stm32h750xx.h, stm32h753xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

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

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

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