Skip to content

Repository files navigation

CRC Calculation for STM32 use Python

Описание

В проекте представлены две реализации расчёта CRC32 для микроконтроллеров STM32F103 и для десктопных систем:

  • CRC_UNIT (C++/STM32)
    Шаблонный класс, использующий аппаратный блок CRC микроконтроллера STM32.
    Подходит для встроенных систем, где требуется высокая скорость и аппаратная поддержка.

  • calc_crc_stm32.py (Python)
    Чисто программная реализация CRC32, полностью повторяющая алгоритм STM32.
    Подходит для отладки, тестирования и использования на ПК или в любых системах, где доступен Python.

🔧 Особенности

  • Совместимость с полиномом 0x04C11DB7 (IEEE 802.3).
  • Поддержка обработки массивов байт (uint8_t*) и слов (uint32_t*).
  • Результат ограничен до uint8_t, как в STM32 (младший байт регистра CRC).
  • Возможность проверки входных данных на десктопе перед прошивкой в контроллер.

📂 Структура проекта

CRC_Project/
├── 
├── calc_crc_stm32.py   # Реализация CRC для Python
├── test_crc_stm32.py   # Unit-тесты для Python
├── test_crc.cpp        # Unit-тесты для STM32
├── README.md           # Документация
└── LICENSE             # Лицензия MIT

🚀 Быстрый старт

STM32 (C++)

Инициализировать CRC модуль:

#include "CRC_UNIT.h"

CRC_UNIT<uint8_t>::CRC_Init();

или HAL инициализация:

hcrc.Instance = CRC;
  if (HAL_CRC_Init(&hcrc) != HAL_OK)
  {
    Error_Handler();
  }

Использование для рачета:

uint8_t data[10] = {0,1,2,3,4,5,6,7,8,9};
uint8_t crc = CRC_UNIT<uint8_t>::calculateCRC(data, 10);
// crc == 0xD1

Python (Desktop)

from calc_crc_stm32 import calc_crc_stm32

data = bytes(range(10))
crc = calc_crc_stm32(data)
print(f"CRC uint8_t: 0x{crc:02X}")  # 0xD1

🧪 Тестирование

Python

Запустите unit‑тесты:

python3 -m unittest test_crc_stm32.py

STM32

Добавьте test_crc.cpp в проект CubeIDE и соберите.
Вывод CRC сравните с результатами Python‑версии.

📝 Примечания

  • Для STM32 используется аппаратный блок CRC, поэтому расчёт максимально быстрый.
  • Для Python — чистая эмуляция, полезна для тестов и валидации.
  • Обе реализации дают одинаковый результат при одинаковых входных данных.

About

CRC Calculation for STM32 use Python

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages