Перейти до основного вмісту

Модуль CRC MCAL

Підтримувані родини STM32: U5
Не підтримуються: G4, H5, H7, L4

Модуль CRC (Cyclic Redundancy Check) MCAL надає абстракцію для налаштування та використання периферії CRC в мікроконтролерах STM32.
Цей модуль є частиною рівня MCAL і забезпечує уніфікований API для різних родин STM32.
Різні родини STM32 підтримуються в окремих гілках; перейдіть на правильну гілку для вашого MCU.


🚀 Можливості​

  • Ініціалізація та деініціалізація периферії CRC
  • Налаштовувані поліном і початкове значення
  • Керування порядком вхідних/вихідних даних
  • Активація/деактивація периферії
  • Підтримка неблокуючої передачі з перериваннями завершення та половини передачі
  • Отримання конфігурації за замовчуванням
  • Обробник періодичних завдань

Публічний API​

Інформація про модуль​

  • crc_ModuleVersion_t Crc_Get_ModuleVersion ( void );
    Повертає поточну версію модуля CRC.

Ініціалізація​

  • crc_RequestState_t Crc_Init ( crc_Config_t * const crcConfig );
    Ініціалізує периферію CRC із заданою конфігурацією.

  • void Crc_Deinit ( void );
    Деініціалізує периферію CRC і скидає конфігурацію.

  • void Crc_Task ( void );
    Обробляє фонові завдання (якщо цього вимагає реалізація).

  • crc_RequestState_t Crc_Get_DefaultConfig ( crc_Config_t * const crcConfig );
    Отримує структуру конфігурації за замовчуванням для безпечної ініціалізації.


Керування периферією​

  • crc_RequestState_t Crc_Set_PeriphActive ( crc_PeriphId_t crcId );
    Активує периферію CRC.

  • crc_RequestState_t Crc_Set_PeriphInactive ( crc_PeriphId_t crcId );
    Деактивує периферію CRC.

  • crc_Data_t Crc_Get_Data ( crc_PeriphId_t crcId );
    Зчитує останній обчислений результат CRC.


Конфігурація​

  • crc_RequestState_t Crc_Set_OutputDataOrder ( crc_PeriphId_t crcId, crc_DataOrder_t dataOrder );

  • crc_RequestState_t Crc_Get_OutputDataOrder ( crc_PeriphId_t crcId, crc_DataOrder_t * const dataOrder );
    Налаштовують або отримують порядок вихідних даних.

  • crc_RequestState_t Crc_Set_InputDataOrder ( crc_PeriphId_t crcId, crc_DataOrder_t dataOrder );

  • crc_RequestState_t Crc_Get_InputDataOrder ( crc_PeriphId_t crcId, crc_DataOrder_t * const dataOrder );
    Налаштовують або отримують порядок вхідних даних.

  • crc_RequestState_t Crc_Set_Polynomial ( crc_PeriphId_t crcId, crc_Data_t polynomial, crc_DataSize_t polySize );

  • crc_RequestState_t Crc_Get_Polynomial ( crc_PeriphId_t crcId, crc_Data_t * const polynomial, crc_DataSize_t * const polySize );
    Задають або отримують поліном CRC.

  • crc_RequestState_t Crc_Set_InitValue ( crc_PeriphId_t crcId, crc_Data_t initValue );

  • crc_RequestState_t Crc_Get_InitValue ( crc_PeriphId_t crcId, crc_Data_t * const initValue );
    Налаштовують або отримують початкове значення CRC.


Підтримка неблокуючої передачі​

  • crc_RequestState_t Crc_Set_TransferCpltActive ( crc_PeriphId_t crcId );

  • crc_RequestState_t Crc_Set_TransferCpltInactive ( crc_PeriphId_t crcId );

  • crc_RequestState_t Crc_Get_TransferCpltState ( crc_PeriphId_t crcId );
    Керують станом завершення передачі або перевіряють його.

  • crc_RequestState_t Crc_Set_TransferCpltIsr ( crc_PeriphId_t crcId, crc_CalcCompleteIsr_t const * const callback );

  • crc_RequestState_t Crc_Get_TransferCpltIsr ( crc_PeriphId_t crcId, crc_CalcCompleteIsr_t const * const callback );
    Налаштовують або отримують callback ISR завершення передачі.

  • crc_RequestState_t Crc_Set_HalfTransferActive ( crc_PeriphId_t crcId );

  • crc_RequestState_t Crc_Set_HalfTransferInactive ( crc_PeriphId_t crcId );

  • crc_RequestState_t Crc_Get_HalfTransferState ( crc_PeriphId_t crcId );
    Керують станом половини передачі або перевіряють його.

  • crc_RequestState_t Crc_Set_HalfTransferIsr ( crc_PeriphId_t crcId, crc_CalcCompleteIsr_t const * const callback );

  • crc_RequestState_t Crc_Get_HalfTransferIsr ( crc_PeriphId_t crcId, crc_CalcCompleteIsr_t const * const callback );
    Налаштовують або отримують callback ISR половини передачі.


Примітки щодо використання​

  • Завжди ініціалізуйте модуль за допомогою Crc_Init перед викликом інших функцій.
  • API конфігурації за замовчуванням надає безпечну відправну точку.
  • Неблокуючий режим дає змогу обробляти операції CRC асинхронно за допомогою callback-ів ISR.
  • Поліном і порядок вхідних/вихідних даних слід налаштовувати відповідно до формату даних, очікуваного у застосунку.

🛠 Інтеграція з CMake​

Додайте це до CMakeLists.txt вашого модуля:

target_link_libraries(User_Lib PRIVATE Crc_Lib)

Ліцензія​

Цей проєкт ліцензовано за Creative Commons Attribution–NonCommercial 4.0 International (CC BY-NC 4.0).

Ви вільні використовувати, змінювати та поширювати цю роботу в некомерційних цілях за умови належного зазначення авторства.

Повні умови дивіться у LICENSE.md або на creativecommons.org/licenses/by-nc/4.0.


Автори​

Внески вітаються! Будь ласка, відкрийте pull request.