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

Регистры CRC STM32F0

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

Блок CRC STM32F0 принимает данные по 8, 16 или 32 бита — по размеру записи в DR. По умолчанию это CRC-32 с полиномом 0x04C1 1DB7 и начальным значением 0xFFFF FFFF. Биты REV_IN и REV_OUT обращают порядок битов входа и результата: с REV_IN = 11, REV_OUT = 1 и инверсией результата получается CRC-32 как у Ethernet и zlib (RM0091, раздел 12.3).

Свой полином (регистр POL) и размер 7, 8, 16 или 32 бита (POLYSIZE) есть только у STM32F07x и F09x; у остальных линеек POL только для чтения.

ЭкземплярБазовый адресЕсть у
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, 8 бит, после сброса 0x0000 0000. В коде: CRC->IDR.

76543210
IDR
  • IDR (биты 7: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 бит (только у STM32F071, STM32F072, STM32F078, STM32F091, STM32F098).
  • 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; регистр есть только у STM32F071, STM32F072, STM32F078, STM32F091, STM32F098. В коде: CRC->POL.

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

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

Как получить CRC-32 как у zlib?

CR = REV_IN = 11 (по словам) и REV_OUT = 1, INIT = 0xFFFF FFFF, данные по байтам или словам в DR, результат — ~CRC->DR.

Источники

  1. STMicroelectronics. RM0091: Reference manual (Rev 10) — раздел 12.5: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-f0 v2.3.8: заголовки CMSIS stm32f031x6.h, stm32f038xx.h, stm32f042x6.h, stm32f048xx.h, stm32f051x8.h, stm32f058xx.h, stm32f071xb.h, stm32f072xb.h, stm32f078xx.h, stm32f091xc.h, stm32f098xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

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

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

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