From 7a0c4e111a90c7085571287cd99a05567dc6726a Mon Sep 17 00:00:00 2001 From: dynfer Date: Thu, 3 Jul 2025 01:39:13 +0200 Subject: [PATCH 1/2] Certain STM32's dont have programmable CRC registers --- os/hal/include/hal_crc.h | 4 ++++ os/hal/src/hal_crc.c | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/os/hal/include/hal_crc.h b/os/hal/include/hal_crc.h index 8290e2cd91..7d88ea8a49 100644 --- a/os/hal/include/hal_crc.h +++ b/os/hal/include/hal_crc.h @@ -135,7 +135,11 @@ extern "C" { #endif void crcInit(void); void crcObjectInit(CRCDriver *crcp); +#if (defined(STM32F1xx) || defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32L1xx)) // Those MCU dont have programmable CRC registers + void crcStart(CRCDriver *crcp); +#else void crcStart(CRCDriver *crcp, const CRCConfig *config); +#endif void crcStop(CRCDriver *crcp); void crcReset(CRCDriver *crcp); void crcResetI(CRCDriver *crcp); diff --git a/os/hal/src/hal_crc.c b/os/hal/src/hal_crc.c index 63799e4418..666152c11a 100644 --- a/os/hal/src/hal_crc.c +++ b/os/hal/src/hal_crc.c @@ -81,6 +81,19 @@ void crcObjectInit(CRCDriver *crcp) { * * @api */ + +#if (defined(STM32F1xx) || defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32L1xx)) // Those MCU dont have programmable CRC registers +void crcStart(CRCDriver *crcp) { + osalDbgCheck(crcp != NULL); + + osalSysLock(); + osalDbgAssert((crcp->state == CRC_STOP) || (crcp->state == CRC_READY), + "invalid state"); + crc_lld_start(crcp); + crcp->state = CRC_READY; + osalSysUnlock(); +} +#else void crcStart(CRCDriver *crcp, const CRCConfig *config) { osalDbgCheck(crcp != NULL); @@ -92,6 +105,7 @@ void crcStart(CRCDriver *crcp, const CRCConfig *config) { crcp->state = CRC_READY; osalSysUnlock(); } +#endif /** * @brief Deactivates the CRC peripheral. From febfb3acff3b61370c46039ebfc6718b133ae77e Mon Sep 17 00:00:00 2001 From: dynfer Date: Thu, 3 Jul 2025 01:48:24 +0200 Subject: [PATCH 2/2] forgot the F0 footnote --- os/hal/include/hal_crc.h | 6 +++++- os/hal/src/hal_crc.c | 9 ++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/os/hal/include/hal_crc.h b/os/hal/include/hal_crc.h index 7d88ea8a49..77f3ef7674 100644 --- a/os/hal/include/hal_crc.h +++ b/os/hal/include/hal_crc.h @@ -135,7 +135,11 @@ extern "C" { #endif void crcInit(void); void crcObjectInit(CRCDriver *crcp); -#if (defined(STM32F1xx) || defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32L1xx)) // Those MCU dont have programmable CRC registers +#if (defined(STM32F1xx) || defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32L1xx) || defined(STM32F07x) || \ + defined(STM32F030x4) || defined(STM32F030x6) || defined(STM32F030x8) || defined(STM32F030xC) || \ + defined(STM32F031x6) || defined(STM32F038xx) || \ + defined(STM32F042x6) || defined(STM32F048xx) || \ + defined(STM32F051x8) || defined(STM32F058xx) ) // Those MCU dont have programmable CRC registers void crcStart(CRCDriver *crcp); #else void crcStart(CRCDriver *crcp, const CRCConfig *config); diff --git a/os/hal/src/hal_crc.c b/os/hal/src/hal_crc.c index 666152c11a..f4974ab60e 100644 --- a/os/hal/src/hal_crc.c +++ b/os/hal/src/hal_crc.c @@ -80,9 +80,12 @@ void crcObjectInit(CRCDriver *crcp) { * supports a default configuration * * @api - */ - -#if (defined(STM32F1xx) || defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32L1xx)) // Those MCU dont have programmable CRC registers + */ +#if (defined(STM32F1xx) || defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32L1xx) || defined(STM32F07x) || \ + defined(STM32F030x4) || defined(STM32F030x6) || defined(STM32F030x8) || defined(STM32F030xC) || \ + defined(STM32F031x6) || defined(STM32F038xx) || \ + defined(STM32F042x6) || defined(STM32F048xx) || \ + defined(STM32F051x8) || defined(STM32F058xx) ) // Those MCU dont have programmable CRC registers void crcStart(CRCDriver *crcp) { osalDbgCheck(crcp != NULL);