Просмотр исходного кода

Merge pull request #1 from ObKo/master

update local fork with upstream
Frank Singleton 7 лет назад
Родитель
Сommit
1b679ff7c4

+ 11 - 0
README.md

@@ -90,3 +90,14 @@ This project also supports ChibiOS v3.x.x and ChibiOS v16.x.x (both nil and rt k
 CMake modules for ChibiOS can find specified ChibiOS components using the COMPONENTS directive.
 
 See project `stm32-chibios` for example usage.
+
+# FreeRTOS Support
+
+FreeRTOS is also supported. To include it in your project you should set a variable named `FREERTOS_HEAP_IMPL` with 
+a proper number of FreeRTOS heap implementation. You can do this by invoking:
+
+```
+SET(FREERTOS_HEAP_IMPL 4)
+```
+
+before `FIND_PACKAGE` command.

+ 106 - 0
cmake/ChibiOS/18.2/ChibiOS.cmake

@@ -0,0 +1,106 @@
+IF(NOT ChibiOS_FIND_COMPONENTS)
+    SET(ChibiOS_FIND_COMPONENTS nil hal)
+    MESSAGE(STATUS "No ChibiOS components specified, using default: ${ChibiOS_FIND_COMPONENTS}")
+ENDIF()
+
+SET (CHIBIOS_COMPONENTS nil rt hal)
+
+LIST(FIND ChibiOS_FIND_COMPONENTS nil ChibiOS_FIND_COMPONENTS_nil)
+LIST(FIND ChibiOS_FIND_COMPONENTS rt ChibiOS_FIND_COMPONENTS_rt)
+LIST(FIND ChibiOS_FIND_COMPONENTS hal ChibiOS_FIND_COMPONENTS_hal)
+
+IF((${ChibiOS_FIND_COMPONENTS_nil} LESS 0) AND (${ChibiOS_FIND_COMPONENTS_rt} LESS 0))
+  MESSAGE(STATUS "No kernel component selected, using Nil kernel")
+  LIST(APPEND ChibiOS_FIND_COMPONENTS nil)
+  SET(CHIBIOS_KERNEL nil)
+ELSE()
+  IF((NOT (${ChibiOS_FIND_COMPONENTS_nil} LESS 0)) AND (NOT (${ChibiOS_FIND_COMPONENTS_rt} LESS 0)))
+    MESSAGE(FATAL_ERROR "Cannot use RT and Nil kernel at the same time")
+  ENDIF()
+  IF(NOT (${ChibiOS_FIND_COMPONENTS_nil} LESS 0))
+    SET(CHIBIOS_KERNEL nil)
+  ELSE()
+    SET(CHIBIOS_KERNEL rt)
+  ENDIF()
+ENDIF()
+
+IF(${ChibiOS_FIND_COMPONENTS_hal} LESS 0)
+  LIST(APPEND ChibiOS_FIND_COMPONENTS hal)
+ENDIF()
+
+IF(NOT CHIBIOS_HALCONF_FILE)
+    MESSAGE(STATUS "No ChibiOS halconf.h specified, trying to find it...")
+    FILE(GLOB CHIBIOS_HALCONF_FILE "halconf.h")
+    IF (CHIBIOS_HALCONF_FILE STREQUAL "")
+        MESSAGE(FATAL_ERROR "Cannot find halconf.h, please specify it using CHIBIOS_HALCONF_FILE variable")
+    ELSE()
+        MESSAGE(STATUS "Found halconf.h: ${CHIBIOS_HALCONF_FILE}")
+    ENDIF()
+ENDIF()
+    
+IF(NOT CHIBIOS_CHCONF_FILE)
+    MESSAGE(STATUS "No ChibiOS chconf.h specified, trying to find it...")
+    FILE(GLOB CHIBIOS_CHCONF_FILE "chconf.h")
+    IF (CHIBIOS_CHCONF_FILE STREQUAL "")
+        MESSAGE(FATAL_ERROR "Cannot find chconf.h, please specify it using CHIBIOS_CHCONF_FILE variable")
+    ELSE()
+        MESSAGE(STATUS "Found chconf.h: ${CHIBIOS_CHCONF_FILE}")
+    ENDIF()
+ENDIF()
+
+FILE(STRINGS ${CHIBIOS_CHCONF_FILE} CHCONF_LINES REGEX "#define CH_CFG_USE_([a-zA-Z_0-9]+) +TRUE")
+FOREACH(LINE ${CHCONF_LINES})
+    STRING(REGEX REPLACE "#define CH_CFG_USE_([a-zA-Z_0-9]+) +TRUE" "\\1" COMP ${LINE})
+    LIST(APPEND CHIBIOS_RTOS_COMPONENTS ${COMP})
+ENDFOREACH()
+
+MESSAGE(STATUS "Detected ChibiOS RTOS components:")
+FOREACH(COMP ${CHIBIOS_RTOS_COMPONENTS})
+    MESSAGE(STATUS "\t${COMP}")
+ENDFOREACH()
+
+FILE(STRINGS ${CHIBIOS_HALCONF_FILE} HALCONF_LINES REGEX "#define HAL_USE_([a-zA-Z_0-9]+) +TRUE")
+FOREACH(LINE ${HALCONF_LINES})
+    STRING(REGEX REPLACE "#define HAL_USE_([a-zA-Z_0-9]+) +TRUE" "\\1" COMP ${LINE})
+    LIST(APPEND CHIBIOS_HAL_COMPONENTS ${COMP})
+ENDFOREACH()
+
+MESSAGE(STATUS "Detected ChibiOS HAL components:")
+FOREACH(COMP ${CHIBIOS_HAL_COMPONENTS})
+    MESSAGE(STATUS "\t${COMP}")
+ENDFOREACH()
+
+INCLUDE(ChibiOS/18.2/ChibiOS_LD)
+INCLUDE(ChibiOS/18.2/ChibiOS_RTOS)
+INCLUDE(ChibiOS/18.2/ChibiOS_HAL)
+
+MESSAGE(STATUS "RTOS sources: ")
+FOREACH(SOURCE ${CHIBIOS_SOURCES_${CHIBIOS_KERNEL}})
+    MESSAGE(STATUS "\t${SOURCE}")
+ENDFOREACH()
+
+MESSAGE(STATUS "HAL sources: ")
+FOREACH(SOURCE ${CHIBIOS_SOURCES_hal})
+    MESSAGE(STATUS "\t${SOURCE}")
+ENDFOREACH()
+
+IF(NOT ChibiOS_LINKER_SCRIPT)
+    MESSAGE(STATUS "ChibiOS doesn't have linker script for your chip, please specify it directly using ChibiOS_LINKER_SCRIPT variable.")
+ENDIF()
+
+FOREACH(comp ${ChibiOS_FIND_COMPONENTS})
+    LIST(FIND CHIBIOS_COMPONENTS ${comp} INDEX)
+    IF(INDEX EQUAL -1)
+        MESSAGE(FATAL_ERROR "Unknown ChibiOS component: ${comp}\nSupported ChibiOS components: ${CHIBIOS_COMPONENTS}")
+    ENDIF()
+    FOREACH(source ${CHIBIOS_SOURCES_${comp}})
+        FIND_FILE(CHIBIOS_${comp}_${source} NAMES ${source} PATHS ${CHIBIOS_ROOT} NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH)
+        LIST(APPEND ChibiOS_SOURCES ${CHIBIOS_${comp}_${source}})
+    ENDFOREACH()
+    FOREACH(incl ${CHIBIOS_INCLUDES_${comp}})
+        LIST(APPEND ChibiOS_INCLUDE_DIRS ${CHIBIOS_ROOT}/${incl})
+    ENDFOREACH()
+ENDFOREACH()
+
+
+

+ 490 - 0
cmake/ChibiOS/18.2/ChibiOS_HAL.cmake

@@ -0,0 +1,490 @@
+SET (CHIBIOS_SOURCES_hal
+    os/hal/src/hal.c
+    os/hal/src/hal_st.c
+    os/hal/src/hal_buffers.c
+    os/hal/src/hal_queues.c
+    os/hal/src/hal_mmcsd.c
+    os/hal/ports/common/ARMCMx/nvic.c
+)
+
+SET (CHIBIOS_INCLUDES_hal
+    os/hal/include
+    os/hal/ports/common/ARMCMx
+)
+
+SET (CHIBIOS_SOURCES_hal_nil
+    os/hal/osal/nil/osal.c
+)
+
+SET (CHIBIOS_SOURCES_hal_rt
+    os/hal/osal/rt/osal.c
+)
+
+SET (CHIBIOS_INCLUDES_hal_nil
+    os/hal/osal/nil
+)
+
+SET (CHIBIOS_INCLUDES_hal_rt
+    os/hal/osal/rt
+)
+
+SET (CHIBIOS_SOURCES_hal_ADC         os/hal/src/hal_adc.c)
+SET (CHIBIOS_SOURCES_hal_CAN         os/hal/src/hal_can.c)
+SET (CHIBIOS_SOURCES_hal_CRY         os/hal/src/hal_crypto.c)
+SET (CHIBIOS_SOURCES_hal_DAC         os/hal/src/hal_dac.c)
+SET (CHIBIOS_SOURCES_hal_EXT         os/hal/src/hal_ext.c)
+SET (CHIBIOS_SOURCES_hal_GPT         os/hal/src/hal_gpt.c)
+SET (CHIBIOS_SOURCES_hal_I2C         os/hal/src/hal_i2c.c)
+SET (CHIBIOS_SOURCES_hal_I2S         os/hal/src/hal_i2s.c)
+SET (CHIBIOS_SOURCES_hal_ICU         os/hal/src/hal_icu.c)
+SET (CHIBIOS_SOURCES_hal_MAC         os/hal/src/hal_mac.c)
+SET (CHIBIOS_SOURCES_hal_MMC_SPI     os/hal/src/hal_mmc_spi.c)
+SET (CHIBIOS_SOURCES_hal_PAL         os/hal/src/hal_pal.c)
+SET (CHIBIOS_SOURCES_hal_PWM         os/hal/src/hal_pwm.c)
+SET (CHIBIOS_SOURCES_hal_QSPI        os/hal/src/hal_qspi.c)
+SET (CHIBIOS_SOURCES_hal_RTC         os/hal/src/hal_rtc.c)
+SET (CHIBIOS_SOURCES_hal_SDC         os/hal/src/hal_sdc.c)
+SET (CHIBIOS_SOURCES_hal_SERIAL      os/hal/src/hal_serial.c)
+SET (CHIBIOS_SOURCES_hal_SERIAL_USB  os/hal/src/hal_serial_usb.c)
+SET (CHIBIOS_SOURCES_hal_SPI         os/hal/src/hal_spi.c)
+SET (CHIBIOS_SOURCES_hal_UART        os/hal/src/hal_uart.c)
+SET (CHIBIOS_SOURCES_hal_USB         os/hal/src/hal_usb.c)
+SET (CHIBIOS_SOURCES_hal_WDG         os/hal/src/hal_wdg.c)
+
+
+
+SET (CHIBIOS_INCLUDES_hal_F0
+    os/hal/ports/STM32/STM32F0xx
+    os/hal/ports/STM32/LLD/DMAv1
+    os/hal/ports/STM32/LLD/TIMv1
+)
+SET (CHIBIOS_SOURCES_hal_F0
+    os/hal/ports/STM32/STM32F0xx/stm32_isr.c
+    os/hal/ports/STM32/STM32F0xx/hal_lld.c
+    os/hal/ports/STM32/LLD/DMAv1/stm32_dma.c
+    os/hal/ports/STM32/LLD/TIMv1/hal_st_lld.c
+)
+SET (CHIBIOS_SOURCES_hal_ADC_F0     os/hal/ports/STM32/LLD/ADCv1/hal_adc_lld.c)
+SET (CHIBIOS_SOURCES_hal_CAN_F0     os/hal/ports/STM32/LLD/CANv1/hal_can_lld.c)
+SET (CHIBIOS_SOURCES_hal_DAC_F0     os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.c)
+SET (CHIBIOS_SOURCES_hal_EXT_F0     os/hal/ports/STM32/LLD/EXTIv1/hal_ext_lld.c)
+SET (CHIBIOS_SOURCES_hal_PAL_F0     os/hal/ports/STM32/LLD/GPIOv2/hal_pal_lld.c)
+SET (CHIBIOS_SOURCES_hal_I2C_F0     os/hal/ports/STM32/LLD/I2Cv2/hal_i2c_lld.c)
+SET (CHIBIOS_SOURCES_hal_RTC_F0     os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.c)
+SET (CHIBIOS_SOURCES_hal_I2S_F0     os/hal/ports/STM32/LLD/SPIv2/hal_i2s_lld.c)
+SET (CHIBIOS_SOURCES_hal_SPI_F0     os/hal/ports/STM32/LLD/SPIv2/hal_spi_lld.c)
+SET (CHIBIOS_SOURCES_hal_GPT_F0     os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c)
+SET (CHIBIOS_SOURCES_hal_ICU_F0     os/hal/ports/STM32/LLD/TIMv1/hal_icu_lld.c)
+SET (CHIBIOS_SOURCES_hal_PWM_F0     os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c)
+SET (CHIBIOS_SOURCES_hal_SERIAL_F0  os/hal/ports/STM32/LLD/USARTv2/hal_serial_lld.c)
+SET (CHIBIOS_SOURCES_hal_UART_F0    os/hal/ports/STM32/LLD/USARTv2/hal_uart_lld.c)
+SET (CHIBIOS_SOURCES_hal_USB_F0     os/hal/ports/STM32/LLD/USBv1/hal_usb_lld.c)
+SET (CHIBIOS_SOURCES_hal_WDG_F0     os/hal/ports/STM32/LLD/xWDGv1/hal_wdg_lld.c)
+
+SET (CHIBIOS_INCLUDES_hal_ADC_F0    os/hal/ports/STM32/LLD/ADCv1)
+SET (CHIBIOS_INCLUDES_hal_CAN_F0    os/hal/ports/STM32/LLD/CANv1)
+SET (CHIBIOS_INCLUDES_hal_DAC_F0    os/hal/ports/STM32/LLD/DACv1)
+SET (CHIBIOS_INCLUDES_hal_EXT_F0    os/hal/ports/STM32/LLD/EXTIv1)
+SET (CHIBIOS_INCLUDES_hal_PAL_F0    os/hal/ports/STM32/LLD/GPIOv2)
+SET (CHIBIOS_INCLUDES_hal_I2C_F0    os/hal/ports/STM32/LLD/I2Cv2)
+SET (CHIBIOS_INCLUDES_hal_RTC_F0    os/hal/ports/STM32/LLD/RTCv2)
+SET (CHIBIOS_INCLUDES_hal_I2S_F0    os/hal/ports/STM32/LLD/SPIv2)
+SET (CHIBIOS_INCLUDES_hal_SPI_F0    os/hal/ports/STM32/LLD/SPIv2)
+SET (CHIBIOS_INCLUDES_hal_GPT_F0    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_ICU_F0    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_PWM_F0    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_SERIAL_F0 os/hal/ports/STM32/LLD/USARTv2)
+SET (CHIBIOS_INCLUDES_hal_UART_F0   os/hal/ports/STM32/LLD/USARTv2)
+SET (CHIBIOS_INCLUDES_hal_USB_F0    os/hal/ports/STM32/LLD/USBv1)
+SET (CHIBIOS_INCLUDES_hal_WDG_F0    os/hal/ports/STM32/LLD/xWDGv1)
+
+
+SET (CHIBIOS_INCLUDES_hal_F1
+    os/hal/ports/STM32/STM32F1xx
+    os/hal/ports/STM32/LLD/DMAv1
+    os/hal/ports/STM32/LLD/TIMv1
+)
+SET (CHIBIOS_SOURCES_hal_F1
+    os/hal/ports/STM32/STM32F1xx/stm32_isr.c
+    os/hal/ports/STM32/STM32F1xx/hal_lld.c
+    os/hal/ports/STM32/LLD/DMAv1/stm32_dma.c
+    os/hal/ports/STM32/LLD/TIMv1/hal_st_lld.c
+)
+SET (CHIBIOS_SOURCES_hal_ADC_F1     os/hal/ports/STM32/STM32F1xx/hal_adc_lld.c)
+SET (CHIBIOS_SOURCES_hal_CAN_F1     os/hal/ports/STM32/LLD/CANv1/hal_can_lld.c)
+SET (CHIBIOS_SOURCES_hal_DAC_F1     os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.c)
+SET (CHIBIOS_SOURCES_hal_EXT_F1     os/hal/ports/STM32/LLD/EXTIv1/hal_ext_lld.c)
+SET (CHIBIOS_SOURCES_hal_PAL_F1     os/hal/ports/STM32/LLD/GPIOv1/hal_pal_lld.c)
+SET (CHIBIOS_SOURCES_hal_I2C_F1     os/hal/ports/STM32/LLD/I2Cv1/hal_i2c_lld.c)
+SET (CHIBIOS_SOURCES_hal_RTC_F1     os/hal/ports/STM32/LLD/RTCv1/hal_rtc_lld.c)
+SET (CHIBIOS_SOURCES_hal_I2S_F1     os/hal/ports/STM32/LLD/SPIv1/hal_i2s_lld.c)
+SET (CHIBIOS_SOURCES_hal_SPI_F1     os/hal/ports/STM32/LLD/SPIv1/hal_spi_lld.c)
+SET (CHIBIOS_SOURCES_hal_GPT_F1     os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c)
+SET (CHIBIOS_SOURCES_hal_ICU_F1     os/hal/ports/STM32/LLD/TIMv1/hal_icu_lld.c)
+SET (CHIBIOS_SOURCES_hal_PWM_F1     os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c)
+SET (CHIBIOS_SOURCES_hal_SERIAL_F1  os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c)
+SET (CHIBIOS_SOURCES_hal_UART_F1    os/hal/ports/STM32/LLD/USARTv1/hal_uart_lld.c)
+SET (CHIBIOS_SOURCES_hal_USB_F1     os/hal/ports/STM32/LLD/USBv1/hal_usb_lld.c)
+SET (CHIBIOS_SOURCES_hal_WDG_F1     os/hal/ports/STM32/LLD/xWDGv1/hal_wdg_lld.c)
+
+SET (CHIBIOS_INCLUDES_hal_ADC_F1    os/hal/ports/STM32/STM32F1xx)
+SET (CHIBIOS_INCLUDES_hal_CAN_F1    os/hal/ports/STM32/LLD/CANv1)
+SET (CHIBIOS_INCLUDES_hal_DAC_F1    os/hal/ports/STM32/LLD/DACv1)
+SET (CHIBIOS_INCLUDES_hal_EXT_F1    os/hal/ports/STM32/LLD/EXTIv1)
+SET (CHIBIOS_INCLUDES_hal_PAL_F1    os/hal/ports/STM32/LLD/GPIOv1)
+SET (CHIBIOS_INCLUDES_hal_I2C_F1    os/hal/ports/STM32/LLD/I2Cv1)
+SET (CHIBIOS_INCLUDES_hal_RTC_F1    os/hal/ports/STM32/LLD/RTCv1)
+SET (CHIBIOS_INCLUDES_hal_I2S_F1    os/hal/ports/STM32/LLD/SPIv1)
+SET (CHIBIOS_INCLUDES_hal_SPI_F1    os/hal/ports/STM32/LLD/SPIv1)
+SET (CHIBIOS_INCLUDES_hal_GPT_F1    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_ICU_F1    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_PWM_F1    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_SERIAL_F1 os/hal/ports/STM32/LLD/USARTv1)
+SET (CHIBIOS_INCLUDES_hal_UART_F1   os/hal/ports/STM32/LLD/USARTv1)
+SET (CHIBIOS_INCLUDES_hal_USB_F1    os/hal/ports/STM32/LLD/USBv1)
+SET (CHIBIOS_INCLUDES_hal_WDG_F1    os/hal/ports/STM32/LLD/xWDGv1)
+
+SET (CHIBIOS_INCLUDES_hal_F2
+    os/hal/ports/STM32/STM32F4xx
+    os/hal/ports/STM32/LLD/DMAv2
+    os/hal/ports/STM32/LLD/TIMv1
+)
+SET (CHIBIOS_SOURCES_hal_F2
+    os/hal/ports/STM32/STM32F4xx/stm32_isr.c
+    os/hal/ports/STM32/STM32F4xx/hal_lld.c
+    os/hal/ports/STM32/LLD/DMAv2/stm32_dma.c
+    os/hal/ports/STM32/LLD/TIMv1/hal_st_lld.c
+)
+
+SET (CHIBIOS_SOURCES_hal_ADC_F2     os/hal/ports/STM32/LLD/ADCv2/hal_adc_lld.c)
+SET (CHIBIOS_SOURCES_hal_CAN_F2     os/hal/ports/STM32/LLD/CANv1/hal_can_lld.c)
+SET (CHIBIOS_SOURCES_hal_DAC_F2     os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.c)
+SET (CHIBIOS_SOURCES_hal_EXT_F2     os/hal/ports/STM32/LLD/EXTIv1/hal_ext_lld.c)
+SET (CHIBIOS_SOURCES_hal_PAL_F2     os/hal/ports/STM32/LLD/GPIOv2/hal_pal_lld.c)
+SET (CHIBIOS_SOURCES_hal_I2C_F2     os/hal/ports/STM32/LLD/I2Cv1/hal_i2c_lld.c)
+SET (CHIBIOS_SOURCES_hal_MAC_F2     os/hal/ports/STM32/LLD/MACv1/hal_mac_lld.c)
+SET (CHIBIOS_SOURCES_hal_USB_F2     os/hal/ports/STM32/LLD/OTGv1/hal_usb_lld.c)
+SET (CHIBIOS_SOURCES_hal_QSPI_F2    os/hal/ports/STM32/LLD/QUADSPIv1/hal_qspi_lld.c)
+SET (CHIBIOS_SOURCES_hal_RTC_F2     os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.c)
+SET (CHIBIOS_SOURCES_hal_I2S_F2     os/hal/ports/STM32/LLD/SPIv1/hal_i2s_lld.c)
+SET (CHIBIOS_SOURCES_hal_SPI_F2     os/hal/ports/STM32/LLD/SPIv1/hal_spi_lld.c)
+SET (CHIBIOS_SOURCES_hal_SDC_F2     os/hal/ports/STM32/LLD/SDIOv1/hal_sdc_lld.c)
+SET (CHIBIOS_SOURCES_hal_GPT_F2     os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c)
+SET (CHIBIOS_SOURCES_hal_ICU_F2     os/hal/ports/STM32/LLD/TIMv1/hal_icu_lld.c)
+SET (CHIBIOS_SOURCES_hal_PWM_F2     os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c)
+SET (CHIBIOS_SOURCES_hal_SERIAL_F2  os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c)
+SET (CHIBIOS_SOURCES_hal_UART_F2    os/hal/ports/STM32/LLD/USARTv1/hal_uart_lld.c)
+SET (CHIBIOS_SOURCES_hal_WDG_F2     os/hal/ports/STM32/LLD/xWDGv1/hal_wdg_lld.c)
+
+SET (CHIBIOS_INCLUDES_hal_ADC_F2    os/hal/ports/STM32/LLD/ADCv2)
+SET (CHIBIOS_INCLUDES_hal_CAN_F2    os/hal/ports/STM32/LLD/CANv1)
+SET (CHIBIOS_INCLUDES_hal_DAC_F2    os/hal/ports/STM32/LLD/DACv1)
+SET (CHIBIOS_INCLUDES_hal_EXT_F2    os/hal/ports/STM32/LLD/EXTIv1)
+SET (CHIBIOS_INCLUDES_hal_PAL_F2    os/hal/ports/STM32/LLD/GPIOv2)
+SET (CHIBIOS_INCLUDES_hal_I2C_F2    os/hal/ports/STM32/LLD/I2Cv1)
+SET (CHIBIOS_INCLUDES_hal_MAC_F2    os/hal/ports/STM32/LLD/MACv1)
+SET (CHIBIOS_INCLUDES_hal_USB_F2    os/hal/ports/STM32/LLD/OTGv1)
+SET (CHIBIOS_INCLUDES_hal_QSPI_F2   os/hal/ports/STM32/LLD/QUADSPIv1)
+SET (CHIBIOS_INCLUDES_hal_RTC_F2    os/hal/ports/STM32/LLD/RTCv2)
+SET (CHIBIOS_INCLUDES_hal_I2S_F2    os/hal/ports/STM32/LLD/SPIv1)
+SET (CHIBIOS_INCLUDES_hal_SPI_F2    os/hal/ports/STM32/LLD/SPIv1)
+SET (CHIBIOS_INCLUDES_hal_SDC_F2    os/hal/ports/STM32/LLD/SDIOv1)
+SET (CHIBIOS_INCLUDES_hal_GPT_F2    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_ICU_F2    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_PWM_F2    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_SERIAL_F2 os/hal/ports/STM32/LLD/USARTv1)
+SET (CHIBIOS_INCLUDES_hal_UART_F2   os/hal/ports/STM32/LLD/USARTv1)
+SET (CHIBIOS_INCLUDES_hal_WDG_F2    os/hal/ports/STM32/LLD/xWDGv1)
+
+
+SET (CHIBIOS_INCLUDES_hal_F3
+    os/hal/ports/STM32/STM32F3xx
+    os/hal/ports/STM32/LLD/DMAv1
+    os/hal/ports/STM32/LLD/TIMv1
+)
+SET (CHIBIOS_SOURCES_hal_F3
+    os/hal/ports/STM32/STM32F3xx/stm32_isr.c
+    os/hal/ports/STM32/STM32F3xx/hal_lld.c
+    os/hal/ports/STM32/LLD/DMAv1/stm32_dma.c
+    os/hal/ports/STM32/LLD/TIMv1/hal_st_lld.c
+)
+
+SET (CHIBIOS_SOURCES_hal_ADC_F3     os/hal/ports/STM32/LLD/ADCv3/hal_adc_lld.c)
+SET (CHIBIOS_SOURCES_hal_CAN_F3     os/hal/ports/STM32/LLD/CANv1/hal_can_lld.c)
+SET (CHIBIOS_SOURCES_hal_DAC_F3     os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.c)
+SET (CHIBIOS_SOURCES_hal_EXT_F3     os/hal/ports/STM32/LLD/EXTIv1/hal_ext_lld.c)
+SET (CHIBIOS_SOURCES_hal_PAL_F3     os/hal/ports/STM32/LLD/GPIOv2/hal_pal_lld.c)
+SET (CHIBIOS_SOURCES_hal_I2C_F3     os/hal/ports/STM32/LLD/I2Cv2/hal_i2c_lld.c)
+SET (CHIBIOS_SOURCES_hal_RTC_F3     os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.c)
+SET (CHIBIOS_SOURCES_hal_I2S_F3     os/hal/ports/STM32/LLD/SPIv2/hal_i2s_lld.c)
+SET (CHIBIOS_SOURCES_hal_SPI_F3     os/hal/ports/STM32/LLD/SPIv2/hal_spi_lld.c)
+SET (CHIBIOS_SOURCES_hal_GPT_F3     os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c)
+SET (CHIBIOS_SOURCES_hal_ICU_F3     os/hal/ports/STM32/LLD/TIMv1/hal_icu_lld.c)
+SET (CHIBIOS_SOURCES_hal_PWM_F3     os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c)
+SET (CHIBIOS_SOURCES_hal_SERIAL_F3  os/hal/ports/STM32/LLD/USARTv2/hal_serial_lld.c)
+SET (CHIBIOS_SOURCES_hal_UART_F3    os/hal/ports/STM32/LLD/USARTv2/hal_uart_lld.c)
+SET (CHIBIOS_SOURCES_hal_USB_F3     os/hal/ports/STM32/LLD/USBv1/hal_usb_lld.c)
+SET (CHIBIOS_SOURCES_hal_WDG_F3     os/hal/ports/STM32/LLD/xWDGv1/hal_wdg_lld.c)
+
+SET (CHIBIOS_INCLUDES_hal_ADC_F3    os/hal/ports/STM32/LLD/ADCv3)
+SET (CHIBIOS_INCLUDES_hal_CAN_F3    os/hal/ports/STM32/LLD/CANv1)
+SET (CHIBIOS_INCLUDES_hal_DAC_F3    os/hal/ports/STM32/LLD/DACv1)
+SET (CHIBIOS_INCLUDES_hal_EXT_F3    os/hal/ports/STM32/LLD/EXTIv1)
+SET (CHIBIOS_INCLUDES_hal_PAL_F3    os/hal/ports/STM32/LLD/GPIOv2)
+SET (CHIBIOS_INCLUDES_hal_I2C_F3    os/hal/ports/STM32/LLD/I2Cv2)
+SET (CHIBIOS_INCLUDES_hal_RTC_F3    os/hal/ports/STM32/LLD/RTCv2)
+SET (CHIBIOS_INCLUDES_hal_I2S_F3    os/hal/ports/STM32/LLD/SPIv2)
+SET (CHIBIOS_INCLUDES_hal_SPI_F3    os/hal/ports/STM32/LLD/SPIv2)
+SET (CHIBIOS_INCLUDES_hal_GPT_F3    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_ICU_F3    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_PWM_F3    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_SERIAL_F3 os/hal/ports/STM32/LLD/USARTv2)
+SET (CHIBIOS_INCLUDES_hal_UART_F3   os/hal/ports/STM32/LLD/USARTv2)
+SET (CHIBIOS_INCLUDES_hal_USB_F3    os/hal/ports/STM32/LLD/USBv1)
+SET (CHIBIOS_INCLUDES_hal_WDG_F3    os/hal/ports/STM32/LLD/xWDGv1)
+
+
+
+SET (CHIBIOS_INCLUDES_hal_F4
+    os/hal/ports/STM32/STM32F4xx
+    os/hal/ports/STM32/LLD/DMAv2
+    os/hal/ports/STM32/LLD/TIMv1
+)
+SET (CHIBIOS_SOURCES_hal_F4
+    os/hal/ports/STM32/STM32F4xx/stm32_isr.c
+    os/hal/ports/STM32/STM32F4xx/hal_lld.c
+    os/hal/ports/STM32/LLD/DMAv2/stm32_dma.c
+    os/hal/ports/STM32/LLD/TIMv1/hal_st_lld.c
+)
+
+SET (CHIBIOS_SOURCES_hal_ADC_F4     os/hal/ports/STM32/LLD/ADCv2/hal_adc_lld.c)
+SET (CHIBIOS_SOURCES_hal_CAN_F4     os/hal/ports/STM32/LLD/CANv1/hal_can_lld.c)
+SET (CHIBIOS_SOURCES_hal_DAC_F4     os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.c)
+SET (CHIBIOS_SOURCES_hal_EXT_F4     os/hal/ports/STM32/LLD/EXTIv1/hal_ext_lld.c)
+SET (CHIBIOS_SOURCES_hal_PAL_F4     os/hal/ports/STM32/LLD/GPIOv2/hal_pal_lld.c)
+SET (CHIBIOS_SOURCES_hal_I2C_F4     os/hal/ports/STM32/LLD/I2Cv1/hal_i2c_lld.c)
+SET (CHIBIOS_SOURCES_hal_MAC_F4     os/hal/ports/STM32/LLD/MACv1/hal_mac_lld.c)
+SET (CHIBIOS_SOURCES_hal_USB_F4     os/hal/ports/STM32/LLD/OTGv1/hal_usb_lld.c)
+SET (CHIBIOS_SOURCES_hal_QSPI_F4    os/hal/ports/STM32/LLD/QUADSPIv1/hal_qspi_lld.c)
+SET (CHIBIOS_SOURCES_hal_RTC_F4     os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.c)
+SET (CHIBIOS_SOURCES_hal_I2S_F4     os/hal/ports/STM32/LLD/SPIv1/hal_i2s_lld.c)
+SET (CHIBIOS_SOURCES_hal_SPI_F4     os/hal/ports/STM32/LLD/SPIv1/hal_spi_lld.c)
+SET (CHIBIOS_SOURCES_hal_SDC_F4     os/hal/ports/STM32/LLD/SDIOv1/hal_sdc_lld.c)
+SET (CHIBIOS_SOURCES_hal_GPT_F4     os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c)
+SET (CHIBIOS_SOURCES_hal_ICU_F4     os/hal/ports/STM32/LLD/TIMv1/hal_icu_lld.c)
+SET (CHIBIOS_SOURCES_hal_PWM_F4     os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c)
+SET (CHIBIOS_SOURCES_hal_SERIAL_F4  os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c)
+SET (CHIBIOS_SOURCES_hal_UART_F4    os/hal/ports/STM32/LLD/USARTv1/hal_uart_lld.c)
+SET (CHIBIOS_SOURCES_hal_WDG_F4     os/hal/ports/STM32/LLD/xWDGv1/hal_wdg_lld.c)
+
+SET (CHIBIOS_INCLUDES_hal_ADC_F4    os/hal/ports/STM32/LLD/ADCv2)
+SET (CHIBIOS_INCLUDES_hal_CAN_F4    os/hal/ports/STM32/LLD/CANv1)
+SET (CHIBIOS_INCLUDES_hal_DAC_F4    os/hal/ports/STM32/LLD/DACv1)
+SET (CHIBIOS_INCLUDES_hal_EXT_F4    os/hal/ports/STM32/LLD/EXTIv1)
+SET (CHIBIOS_INCLUDES_hal_PAL_F4    os/hal/ports/STM32/LLD/GPIOv2)
+SET (CHIBIOS_INCLUDES_hal_I2C_F4    os/hal/ports/STM32/LLD/I2Cv1)
+SET (CHIBIOS_INCLUDES_hal_MAC_F4    os/hal/ports/STM32/LLD/MACv1)
+SET (CHIBIOS_INCLUDES_hal_USB_F4    os/hal/ports/STM32/LLD/OTGv1)
+SET (CHIBIOS_INCLUDES_hal_QSPI_F4   os/hal/ports/STM32/LLD/QUADSPIv1)
+SET (CHIBIOS_INCLUDES_hal_RTC_F4    os/hal/ports/STM32/LLD/RTCv2)
+SET (CHIBIOS_INCLUDES_hal_I2S_F4    os/hal/ports/STM32/LLD/SPIv1)
+SET (CHIBIOS_INCLUDES_hal_SPI_F4    os/hal/ports/STM32/LLD/SPIv1)
+SET (CHIBIOS_INCLUDES_hal_SDC_F4    os/hal/ports/STM32/LLD/SDIOv1)
+SET (CHIBIOS_INCLUDES_hal_GPT_F4    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_ICU_F4    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_PWM_F4    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_SERIAL_F4 os/hal/ports/STM32/LLD/USARTv1)
+SET (CHIBIOS_INCLUDES_hal_UART_F4   os/hal/ports/STM32/LLD/USARTv1)
+SET (CHIBIOS_INCLUDES_hal_WDG_F4    os/hal/ports/STM32/LLD/xWDGv1)
+
+
+
+SET (CHIBIOS_INCLUDES_hal_F7
+    os/hal/ports/STM32/STM32F7xx
+    os/hal/ports/STM32/LLD/DMAv2
+    os/hal/ports/STM32/LLD/TIMv1
+)
+SET (CHIBIOS_SOURCES_hal_F7
+    os/hal/ports/STM32/STM32F7xx/stm32_isr.c
+    os/hal/ports/STM32/STM32F7xx/hal_lld.c
+    os/hal/ports/STM32/LLD/DMAv2/stm32_dma.c
+    os/hal/ports/STM32/LLD/TIMv1/hal_st_lld.c
+)
+
+SET (CHIBIOS_SOURCES_hal_ADC_F7     os/hal/ports/STM32/LLD/ADCv2/hal_adc_lld.c)
+SET (CHIBIOS_SOURCES_hal_CAN_F7     os/hal/ports/STM32/LLD/CANv1/hal_can_lld.c)
+SET (CHIBIOS_SOURCES_hal_CRY_F7     os/hal/ports/STM32/LLD/CRYPv1/hal_crypto_lld.c)
+SET (CHIBIOS_SOURCES_hal_DAC_F7     os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.c)
+SET (CHIBIOS_SOURCES_hal_EXT_F7     os/hal/ports/STM32/LLD/EXTIv1/hal_ext_lld.c)
+SET (CHIBIOS_SOURCES_hal_PAL_F7     os/hal/ports/STM32/LLD/GPIOv2/hal_pal_lld.c)
+SET (CHIBIOS_SOURCES_hal_I2C_F7     os/hal/ports/STM32/LLD/I2Cv2/hal_i2c_lld.c)
+SET (CHIBIOS_SOURCES_hal_MAC_F7     os/hal/ports/STM32/LLD/MACv1/hal_mac_lld.c)
+SET (CHIBIOS_SOURCES_hal_USB_F7     os/hal/ports/STM32/LLD/OTGv1/hal_usb_lld.c)
+SET (CHIBIOS_SOURCES_hal_QSPI_F7    os/hal/ports/STM32/LLD/QUADSPIv1/hal_qspi_lld.c)
+SET (CHIBIOS_SOURCES_hal_RTC_F7     os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.c)
+SET (CHIBIOS_SOURCES_hal_I2S_F7     os/hal/ports/STM32/LLD/SPIv2/hal_i2s_lld.c)
+SET (CHIBIOS_SOURCES_hal_SPI_F7     os/hal/ports/STM32/LLD/SPIv2/hal_spi_lld.c)
+SET (CHIBIOS_SOURCES_hal_SDC_F7     os/hal/ports/STM32/LLD/SDMMCv1/hal_sdc_lld.c)
+SET (CHIBIOS_SOURCES_hal_GPT_F7     os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c)
+SET (CHIBIOS_SOURCES_hal_ICU_F7     os/hal/ports/STM32/LLD/TIMv1/hal_icu_lld.c)
+SET (CHIBIOS_SOURCES_hal_PWM_F7     os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c)
+SET (CHIBIOS_SOURCES_hal_SERIAL_F7  os/hal/ports/STM32/LLD/USARTv2/hal_serial_lld.c)
+SET (CHIBIOS_SOURCES_hal_UART_F7    os/hal/ports/STM32/LLD/USARTv2/hal_uart_lld.c)
+SET (CHIBIOS_SOURCES_hal_WDG_F7     os/hal/ports/STM32/LLD/xWDGv1/hal_wdg_lld.c)
+
+SET (CHIBIOS_INCLUDES_hal_ADC_F7    os/hal/ports/STM32/LLD/ADCv2)
+SET (CHIBIOS_INCLUDES_hal_CAN_F7    os/hal/ports/STM32/LLD/CANv1)
+SET (CHIBIOS_INCLUDES_hal_CRY_F7    os/hal/ports/STM32/LLD/CRYPv1)
+SET (CHIBIOS_INCLUDES_hal_DAC_F7    os/hal/ports/STM32/LLD/DACv1)
+SET (CHIBIOS_INCLUDES_hal_EXT_F7    os/hal/ports/STM32/LLD/EXTIv1)
+SET (CHIBIOS_INCLUDES_hal_PAL_F7    os/hal/ports/STM32/LLD/GPIOv2)
+SET (CHIBIOS_INCLUDES_hal_I2C_F7    os/hal/ports/STM32/LLD/I2Cv2)
+SET (CHIBIOS_INCLUDES_hal_MAC_F7    os/hal/ports/STM32/LLD/MACv1)
+SET (CHIBIOS_INCLUDES_hal_USB_F7    os/hal/ports/STM32/LLD/OTGv1)
+SET (CHIBIOS_INCLUDES_hal_QSPI_F7   os/hal/ports/STM32/LLD/QUADSPIv1)
+SET (CHIBIOS_INCLUDES_hal_RTC_F7    os/hal/ports/STM32/LLD/RTCv2)
+SET (CHIBIOS_INCLUDES_hal_I2S_F7    os/hal/ports/STM32/LLD/SPIv2)
+SET (CHIBIOS_INCLUDES_hal_SPI_F7    os/hal/ports/STM32/LLD/SPIv2)
+SET (CHIBIOS_INCLUDES_hal_SDC_F7    os/hal/ports/STM32/LLD/SDMMCv1)
+SET (CHIBIOS_INCLUDES_hal_GPT_F7    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_ICU_F7    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_PWM_F7    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_SERIAL_F7 os/hal/ports/STM32/LLD/USARTv2)
+SET (CHIBIOS_INCLUDES_hal_UART_F7   os/hal/ports/STM32/LLD/USARTv2)
+SET (CHIBIOS_INCLUDES_hal_WDG_F7    os/hal/ports/STM32/LLD/xWDGv1)
+
+
+
+SET (CHIBIOS_INCLUDES_hal_L0
+    os/hal/ports/STM32/STM32L0xx
+    os/hal/ports/STM32/LLD/DMAv1
+    os/hal/ports/STM32/LLD/TIMv1
+)
+SET (CHIBIOS_SOURCES_hal_L0
+    os/hal/ports/STM32/STM32L0xx/stm32_isr.c
+    os/hal/ports/STM32/STM32L0xx/hal_lld.c
+    os/hal/ports/STM32/LLD/DMAv1/stm32_dma.c
+    os/hal/ports/STM32/LLD/TIMv1/hal_st_lld.c
+)
+
+SET (CHIBIOS_SOURCES_hal_ADC_L0     os/hal/ports/STM32/LLD/ADCv1/hal_adc_lld.c)
+SET (CHIBIOS_SOURCES_hal_CAN_L0     os/hal/ports/STM32/LLD/CANv1/hal_can_lld.c)
+SET (CHIBIOS_SOURCES_hal_DAC_L0     os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.c)
+SET (CHIBIOS_SOURCES_hal_EXT_L0     os/hal/ports/STM32/LLD/EXTIv1/hal_ext_lld.c)
+SET (CHIBIOS_SOURCES_hal_PAL_L0     os/hal/ports/STM32/LLD/GPIOv2/hal_pal_lld.c)
+SET (CHIBIOS_SOURCES_hal_I2C_L0     os/hal/ports/STM32/LLD/I2Cv2/hal_i2c_lld.c)
+SET (CHIBIOS_SOURCES_hal_RTC_L0     os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.c)
+SET (CHIBIOS_SOURCES_hal_I2S_L0     os/hal/ports/STM32/LLD/SPIv1/hal_i2s_lld.c)
+SET (CHIBIOS_SOURCES_hal_SPI_L0     os/hal/ports/STM32/LLD/SPIv1/hal_spi_lld.c)
+SET (CHIBIOS_SOURCES_hal_GPT_L0     os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c)
+SET (CHIBIOS_SOURCES_hal_ICU_L0     os/hal/ports/STM32/LLD/TIMv1/hal_icu_lld.c)
+SET (CHIBIOS_SOURCES_hal_PWM_L0     os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c)
+SET (CHIBIOS_SOURCES_hal_SERIAL_L0  os/hal/ports/STM32/LLD/USARTv2/hal_serial_lld.c)
+SET (CHIBIOS_SOURCES_hal_UART_L0    os/hal/ports/STM32/LLD/USARTv2/hal_uart_lld.c)
+SET (CHIBIOS_SOURCES_hal_USB_L0     os/hal/ports/STM32/LLD/USBv1/hal_usb_lld.c)
+SET (CHIBIOS_SOURCES_hal_WDG_L0     os/hal/ports/STM32/LLD/xWDGv1/hal_wdg_lld.c)
+
+SET (CHIBIOS_INCLUDES_hal_ADC_L0    os/hal/ports/STM32/LLD/ADCv1)
+SET (CHIBIOS_INCLUDES_hal_CAN_L0    os/hal/ports/STM32/LLD/CANv1)
+SET (CHIBIOS_INCLUDES_hal_DAC_L0    os/hal/ports/STM32/LLD/DACv1)
+SET (CHIBIOS_INCLUDES_hal_EXT_L0    os/hal/ports/STM32/LLD/EXTIv1)
+SET (CHIBIOS_INCLUDES_hal_PAL_L0    os/hal/ports/STM32/LLD/GPIOv2)
+SET (CHIBIOS_INCLUDES_hal_I2C_L0    os/hal/ports/STM32/LLD/I2Cv2)
+SET (CHIBIOS_INCLUDES_hal_RTC_L0    os/hal/ports/STM32/LLD/RTCv2)
+SET (CHIBIOS_INCLUDES_hal_I2S_L0    os/hal/ports/STM32/LLD/SPIv1)
+SET (CHIBIOS_INCLUDES_hal_SPI_L0    os/hal/ports/STM32/LLD/SPIv1)
+SET (CHIBIOS_INCLUDES_hal_GPT_L0    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_ICU_L0    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_PWM_L0    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_SERIAL_L0 os/hal/ports/STM32/LLD/USARTv2)
+SET (CHIBIOS_INCLUDES_hal_UART_L0   os/hal/ports/STM32/LLD/USARTv2)
+SET (CHIBIOS_INCLUDES_hal_USB_L0    os/hal/ports/STM32/LLD/USBv1)
+SET (CHIBIOS_INCLUDES_hal_WDG_L0    os/hal/ports/STM32/LLD/xWDGv1)
+
+
+
+SET (CHIBIOS_INCLUDES_hal_L4
+    os/hal/ports/STM32/STM32L4xx
+    os/hal/ports/STM32/LLD/DMAv1
+    os/hal/ports/STM32/LLD/TIMv1
+)
+SET (CHIBIOS_SOURCES_hal_L4
+    os/hal/ports/STM32/STM32L4xx/stm32_isr.c
+    os/hal/ports/STM32/STM32L4xx/hal_lld.c
+    os/hal/ports/STM32/LLD/DMAv1/stm32_dma.c
+    os/hal/ports/STM32/LLD/TIMv1/hal_st_lld.c
+)
+
+SET (CHIBIOS_SOURCES_hal_ADC_L4     os/hal/ports/STM32/LLD/ADCv3/hal_adc_lld.c)
+SET (CHIBIOS_SOURCES_hal_CAN_L4     os/hal/ports/STM32/LLD/CANv1/hal_can_lld.c)
+SET (CHIBIOS_SOURCES_hal_DAC_L4     os/hal/ports/STM32/LLD/DACv1/hal_dac_lld.c)
+SET (CHIBIOS_SOURCES_hal_EXT_L4     os/hal/ports/STM32/LLD/EXTIv1/hal_ext_lld.c)
+SET (CHIBIOS_SOURCES_hal_PAL_L4     os/hal/ports/STM32/LLD/GPIOv3/hal_pal_lld.c)
+SET (CHIBIOS_SOURCES_hal_I2C_L4     os/hal/ports/STM32/LLD/I2Cv2/hal_i2c_lld.c)
+SET (CHIBIOS_SOURCES_hal_USB_L4     os/hal/ports/STM32/LLD/OTGv1/hal_usb_lld.c)
+SET (CHIBIOS_SOURCES_hal_QSPI_L4    os/hal/ports/STM32/LLD/QUADSPIv1/hal_qspi_lld.c)
+SET (CHIBIOS_SOURCES_hal_RTC_L4     os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.c)
+SET (CHIBIOS_SOURCES_hal_I2S_L4     os/hal/ports/STM32/LLD/SPIv2/hal_i2s_lld.c)
+SET (CHIBIOS_SOURCES_hal_SPI_L4     os/hal/ports/STM32/LLD/SPIv2/hal_spi_lld.c)
+SET (CHIBIOS_SOURCES_hal_SDC_L4     os/hal/ports/STM32/LLD/SDMMCv1/hal_sdc_lld.c)
+SET (CHIBIOS_SOURCES_hal_GPT_L4     os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c)
+SET (CHIBIOS_SOURCES_hal_ICU_L4     os/hal/ports/STM32/LLD/TIMv1/hal_icu_lld.c)
+SET (CHIBIOS_SOURCES_hal_PWM_L4     os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c)
+SET (CHIBIOS_SOURCES_hal_SERIAL_L4  os/hal/ports/STM32/LLD/USARTv2/hal_serial_lld.c)
+SET (CHIBIOS_SOURCES_hal_UART_L4    os/hal/ports/STM32/LLD/USARTv2/hal_uart_lld.c)
+SET (CHIBIOS_SOURCES_hal_WDG_L4     os/hal/ports/STM32/LLD/xWDGv1/hal_wdg_lld.c)
+
+SET (CHIBIOS_INCLUDES_hal_ADC_L4    os/hal/ports/STM32/LLD/ADCv3)
+SET (CHIBIOS_INCLUDES_hal_CAN_L4    os/hal/ports/STM32/LLD/CANv1)
+SET (CHIBIOS_INCLUDES_hal_DAC_L4    os/hal/ports/STM32/LLD/DACv1)
+SET (CHIBIOS_INCLUDES_hal_EXT_L4    os/hal/ports/STM32/LLD/EXTIv1)
+SET (CHIBIOS_INCLUDES_hal_PAL_L4    os/hal/ports/STM32/LLD/GPIOv3)
+SET (CHIBIOS_INCLUDES_hal_I2C_L4    os/hal/ports/STM32/LLD/I2Cv2)
+SET (CHIBIOS_INCLUDES_hal_USB_L4    os/hal/ports/STM32/LLD/OTGv1)
+SET (CHIBIOS_INCLUDES_hal_QSPI_L4   os/hal/ports/STM32/LLD/QUADSPIv1)
+SET (CHIBIOS_INCLUDES_hal_RTC_L4    os/hal/ports/STM32/LLD/RTCv2)
+SET (CHIBIOS_INCLUDES_hal_I2S_L4    os/hal/ports/STM32/LLD/SPIv2)
+SET (CHIBIOS_INCLUDES_hal_SPI_L4    os/hal/ports/STM32/LLD/SPIv2)
+SET (CHIBIOS_INCLUDES_hal_SDC_L4    os/hal/ports/STM32/LLD/SDMMCv1)
+SET (CHIBIOS_INCLUDES_hal_GPT_L4    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_ICU_L4    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_PWM_L4    os/hal/ports/STM32/LLD/TIMv1)
+SET (CHIBIOS_INCLUDES_hal_SERIAL_L4 os/hal/ports/STM32/LLD/USARTv2)
+SET (CHIBIOS_INCLUDES_hal_UART_L4   os/hal/ports/STM32/LLD/USARTv2)
+SET (CHIBIOS_INCLUDES_hal_WDG_L4    os/hal/ports/STM32/LLD/xWDGv1)
+
+
+
+IF (CHIBIOS_SOURCES_hal_${CHIBIOS_KERNEL})
+    LIST(APPEND CHIBIOS_SOURCES_hal ${CHIBIOS_SOURCES_hal_${CHIBIOS_KERNEL}})
+ENDIF()
+    
+IF (CHIBIOS_INCLUDES_hal_${CHIBIOS_KERNEL})
+    LIST(APPEND CHIBIOS_INCLUDES_hal ${CHIBIOS_INCLUDES_hal_${CHIBIOS_KERNEL}})
+ENDIF()
+
+IF (CHIBIOS_SOURCES_hal_${STM32_FAMILY})
+    LIST(APPEND CHIBIOS_SOURCES_hal ${CHIBIOS_SOURCES_hal_${STM32_FAMILY}})
+ENDIF()
+    
+IF (CHIBIOS_INCLUDES_hal_${STM32_FAMILY})
+    LIST(APPEND CHIBIOS_INCLUDES_hal ${CHIBIOS_INCLUDES_hal_${STM32_FAMILY}})
+ENDIF()
+
+FOREACH (COMP ${CHIBIOS_HAL_COMPONENTS})
+    IF (CHIBIOS_SOURCES_hal_${COMP})
+        LIST(APPEND CHIBIOS_SOURCES_hal ${CHIBIOS_SOURCES_hal_${COMP}})
+    ENDIF()
+    IF (CHIBIOS_INCLUDES_hal_${COMP})
+        LIST(APPEND CHIBIOS_INCLUDES_hal ${CHIBIOS_INCLUDES_hal_${COMP}})
+    ENDIF()
+    
+    IF (CHIBIOS_SOURCES_hal_${COMP}_${STM32_FAMILY})
+        LIST(APPEND CHIBIOS_SOURCES_hal ${CHIBIOS_SOURCES_hal_${COMP}_${STM32_FAMILY}})
+    ENDIF()
+    IF (CHIBIOS_INCLUDES_hal_${COMP}_${STM32_FAMILY})
+        LIST(APPEND CHIBIOS_INCLUDES_hal ${CHIBIOS_INCLUDES_hal_${COMP}_${STM32_FAMILY}})
+    ENDIF()
+ENDFOREACH()
+
+

+ 57 - 0
cmake/ChibiOS/18.2/ChibiOS_LD.cmake

@@ -0,0 +1,57 @@
+IF(NOT CHIBIOS_PROCESS_STACK_SIZE)
+    SET(CHIBIOS_PROCESS_STACK_SIZE 0x200)
+    MESSAGE(STATUS "No CHIBIOS_PROCESS_STACK_SIZE specified, using default: ${CHIBIOS_PROCESS_STACK_SIZE}")
+ENDIF()
+
+IF(NOT CHIBIOS_MAIN_STACK_SIZE)
+    SET(CHIBIOS_MAIN_STACK_SIZE 0x200)
+    MESSAGE(STATUS "No CHIBIOS_MAIN_STACK_SIZE specified, using default: ${CHIBIOS_MAIN_STACK_SIZE}")
+ENDIF()
+
+SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L\"${CHIBIOS_ROOT}/os/common/startup/ARMCMx/compilers/GCC/ld\"")
+SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--defsym=__process_stack_size__=${CHIBIOS_PROCESS_STACK_SIZE}")
+SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--defsym=__main_stack_size__=${CHIBIOS_MAIN_STACK_SIZE}")
+
+# Auto-generate linker script
+IF(NOT ChibiOS_LINKER_SCRIPT)
+    FILE(WRITE ${CMAKE_BINARY_DIR}/chibios_link.ld.in
+        "MEMORY\n"
+        "{\n"
+            "flash0  : org = 0x08000000, len = \${STM32_FLASH_SIZE}\n"
+            "flash1  : org = 0x00000000, len = 0\n"
+            "flash2  : org = 0x00000000, len = 0\n"
+            "flash3  : org = 0x00000000, len = 0\n"
+            "flash4  : org = 0x00000000, len = 0\n"
+            "flash5  : org = 0x00000000, len = 0\n"
+            "flash6  : org = 0x00000000, len = 0\n"
+            "flash7  : org = 0x00000000, len = 0\n"
+            "ram0    : org = 0x20000000, len = \${STM32_RAM_SIZE}\n"
+            "ram1    : org = 0x00000000, len = 0\n"
+            "ram2    : org = 0x00000000, len = 0\n"
+            "ram3    : org = 0x00000000, len = 0\n"
+            "ram4    : org = \${STM32_CCRAM_ORIGIN}, len = \${STM32_CCRAM_SIZE}\n"
+            "ram5    : org = 0x00000000, len = 0\n"
+            "ram6    : org = 0x00000000, len = 0\n"
+            "ram7    : org = 0x00000000, len = 0\n"
+        "}\n"
+        "REGION_ALIAS(\"VECTORS_FLASH\", flash0);\n"
+        "REGION_ALIAS(\"VECTORS_FLASH_LMA\", flash0);\n"
+        "REGION_ALIAS(\"XTORS_FLASH\", flash0);\n"
+        "REGION_ALIAS(\"XTORS_FLASH_LMA\", flash0);\n"
+        "REGION_ALIAS(\"TEXT_FLASH\", flash0);\n"
+        "REGION_ALIAS(\"TEXT_FLASH_LMA\", flash0);\n"
+        "REGION_ALIAS(\"RODATA_FLASH\", flash0);\n"
+        "REGION_ALIAS(\"RODATA_FLASH_LMA\", flash0);\n"
+        "REGION_ALIAS(\"VARIOUS_FLASH\", flash0);\n"
+        "REGION_ALIAS(\"VARIOUS_FLASH_LMA\", flash0);\n"
+        "REGION_ALIAS(\"RAM_INIT_FLASH_LMA\", flash0);\n"
+        "REGION_ALIAS(\"MAIN_STACK_RAM\", ram0);\n"
+        "REGION_ALIAS(\"PROCESS_STACK_RAM\", ram0);\n"
+        "REGION_ALIAS(\"DATA_RAM\", ram0);\n"
+        "REGION_ALIAS(\"DATA_RAM_LMA\", flash0);\n"
+        "REGION_ALIAS(\"BSS_RAM\", ram0);\n"
+        "REGION_ALIAS(\"HEAP_RAM\", ram0);\n"
+        "INCLUDE rules.ld\n"
+    )
+    SET(ChibiOS_LINKER_SCRIPT ${CMAKE_BINARY_DIR}/chibios_link.ld.in)
+ENDIF()

+ 92 - 0
cmake/ChibiOS/18.2/ChibiOS_RTOS.cmake

@@ -0,0 +1,92 @@
+FOREACH (FAMILY F0 L0 L4)
+    SET (CHIBIOS_SOURCES_${CHIBIOS_KERNEL}_${FAMILY}
+        os/common/startup/ARMCMx/compilers/GCC/crt0_v6m.S
+        os/common/ports/ARMCMx/chcore.c
+        os/common/ports/ARMCMx/chcore_v6m.c
+        os/common/ports/ARMCMx/compilers/GCC/chcoreasm_v6m.S
+    )
+ENDFOREACH()
+
+FOREACH (FAMILY F1 F2 F3 F4 F7)
+    SET (CHIBIOS_SOURCES_${CHIBIOS_KERNEL}_${FAMILY}
+        os/common/startup/ARMCMx/compilers/GCC/crt0_v7m.S
+        os/common/ports/ARMCMx/chcore.c
+        os/common/ports/ARMCMx/chcore_v7m.c
+        os/common/ports/ARMCMx/compilers/GCC/chcoreasm_v7m.S
+    )
+ENDFOREACH()
+
+FOREACH (FAMILY F0 F1 F2 F3 F4 F7 L0 L1)
+    SET (CHIBIOS_INCLUDES_${CHIBIOS_KERNEL}_${FAMILY}
+        os/common/startup/ARMCMx/devices/STM32${FAMILY}xx
+        os/common/ext/ST/STM32${FAMILY}xx
+        os/common/oslib/include
+        os/common/ports/ARMCMx
+        os/common/ports/ARMCMx/compilers/GCC
+    )
+ENDFOREACH()
+
+SET (CHIBIOS_SOURCES_${CHIBIOS_KERNEL}
+    os/common/startup/ARMCMx/compilers/GCC/crt1.c
+    os/common/startup/ARMCMx/compilers/GCC/vectors.S
+)
+
+SET (CHIBIOS_INCLUDES_${CHIBIOS_KERNEL}
+    os/license
+    os/common/portability/GCC
+    os/common/startup/ARMCMx/compilers/GCC
+    os/common/ext/ARM/CMSIS/Core/Include
+)
+
+SET (CHIBIOS_SOURCES_${CHIBIOS_KERNEL}_MAILBOXES  os/common/oslib/src/chmboxes.c)
+SET (CHIBIOS_SOURCES_${CHIBIOS_KERNEL}_MEMCORE    os/common/oslib/src/chmemcore.c)
+SET (CHIBIOS_SOURCES_${CHIBIOS_KERNEL}_HEAP       os/common/oslib/src/chheap.c)
+SET (CHIBIOS_SOURCES_${CHIBIOS_KERNEL}_MEMPOOLS   os/common/oslib/src/chmempools.c)
+SET (CHIBIOS_SOURCES_${CHIBIOS_KERNEL}_FACTORY    os/common/oslib/src/chfactory.c)
+
+SET (CHIBIOS_SOURCES_rt_TM          os/rt/src/chtm.c)
+SET (CHIBIOS_SOURCES_rt_REGISTRY    os/rt/src/chregistry.c)
+SET (CHIBIOS_SOURCES_rt_SEMAPHORES  os/rt/src/chsem.c)
+SET (CHIBIOS_SOURCES_rt_MUTEXES     os/rt/src/chmtx.c)
+SET (CHIBIOS_SOURCES_rt_CONDVARS    os/rt/src/chcond.c)
+SET (CHIBIOS_SOURCES_rt_EVENTS      os/rt/src/chevents.c)
+SET (CHIBIOS_SOURCES_rt_MESSAGES    os/rt/src/chmsg.c)
+SET (CHIBIOS_SOURCES_rt_DYNAMIC     os/rt/src/chdynamic.c)
+
+LIST (APPEND CHIBIOS_SOURCES_nil     os/nil/src/ch.c)
+LIST (APPEND CHIBIOS_INCLUDES_nil    os/nil/include)
+
+LIST (APPEND CHIBIOS_SOURCES_rt
+    os/rt/src/chsys.c
+    os/rt/src/chdebug.c
+    os/rt/src/chtrace.c
+    os/rt/src/chvt.c
+    os/rt/src/chschd.c
+    os/rt/src/chthreads.c
+)
+
+LIST (APPEND CHIBIOS_INCLUDES_rt     os/rt/include)
+
+IF (CHIBIOS_SOURCES_${CHIBIOS_KERNEL}_${STM32_FAMILY})
+    LIST(APPEND CHIBIOS_SOURCES_${CHIBIOS_KERNEL} ${CHIBIOS_SOURCES_${CHIBIOS_KERNEL}_${STM32_FAMILY}})
+ENDIF()
+
+IF (CHIBIOS_INCLUDES_${CHIBIOS_KERNEL}_${STM32_FAMILY})
+    LIST(APPEND CHIBIOS_INCLUDES_${CHIBIOS_KERNEL} ${CHIBIOS_INCLUDES_${CHIBIOS_KERNEL}_${STM32_FAMILY}})
+ENDIF()
+
+FOREACH (COMP ${CHIBIOS_RTOS_COMPONENTS})
+    IF (CHIBIOS_SOURCES_${CHIBIOS_KERNEL}_${COMP})
+        LIST(APPEND CHIBIOS_SOURCES_${CHIBIOS_KERNEL} ${CHIBIOS_SOURCES_${CHIBIOS_KERNEL}_${COMP}})
+    ENDIF()
+    IF (CHIBIOS_INCLUDES_${CHIBIOS_KERNEL}_${COMP})
+        LIST(APPEND CHIBIOS_INCLUDES_${CHIBIOS_KERNEL} ${CHIBIOS_INCLUDES_${CHIBIOS_KERNEL}_${COMP}})
+    ENDIF()
+
+    IF (CHIBIOS_SOURCES_${CHIBIOS_KERNEL}_${COMP}_${STM32_FAMILY})
+        LIST(APPEND CHIBIOS_SOURCES_${CHIBIOS_KERNEL} ${CHIBIOS_SOURCES_${CHIBIOS_KERNEL}_${COMP}_${STM32_FAMILY}})
+    ENDIF()
+    IF (CHIBIOS_INCLUDES_${CHIBIOS_KERNEL}_${COMP}_${STM32_FAMILY})
+        LIST(APPEND CHIBIOS_INCLUDES_${CHIBIOS_KERNEL} ${CHIBIOS_INCLUDES_${CHIBIOS_KERNEL}_${COMP}_${STM32_FAMILY}})
+    ENDIF()
+ENDFOREACH()

+ 2 - 0
cmake/FindChibiOS.cmake

@@ -8,6 +8,8 @@ MESSAGE(STATUS "Chibios version:" ${ChibiOS_FIND_VERSION_MAJOR})
 
 IF(ChibiOS_FIND_VERSION_MAJOR EQUAL 2)
   MESSAGE(FATAL_ERROR "ChibiOS v2.x.x is not supported. Use older version of stm32-cmake")
+ELSEIF((ChibiOS_FIND_VERSION_MAJOR EQUAL 18))
+  INCLUDE(ChibiOS/18.2/ChibiOS)
 ELSEIF((ChibiOS_FIND_VERSION_MAJOR EQUAL 17))
   INCLUDE(ChibiOS/ChibiOS17)
 ELSEIF((ChibiOS_FIND_VERSION_MAJOR EQUAL 16))

+ 118 - 0
cmake/FindFreeRTOS.cmake

@@ -0,0 +1,118 @@
+IF(STM32_FAMILY STREQUAL "F0")
+	SET(PORT_GCC_DIR_SUFFIX "CM0")
+ELSEIF(STM32_FAMILY STREQUAL "F1")
+	SET(PORT_GCC_DIR_SUFFIX "CM3")
+ELSEIF(STM32_FAMILY STREQUAL "F2")
+	SET(PORT_GCC_DIR_SUFFIX "CM3")
+ELSEIF(STM32_FAMILY STREQUAL "F3")
+	SET(PORT_GCC_DIR_SUFFIX "CM4F")
+ELSEIF(STM32_FAMILY STREQUAL "F4")
+	SET(PORT_GCC_DIR_SUFFIX "CM4F")
+ELSEIF(STM32_FAMILY STREQUAL "F7")
+	SET(PORT_GCC_DIR_SUFFIX "CM7")
+ELSEIF(STM32_FAMILY STREQUAL "L0")
+	SET(PORT_GCC_DIR_SUFFIX "CM0")
+ELSEIF(STM32_FAMILY STREQUAL "L1")
+	SET(PORT_GCC_DIR_SUFFIX "CM4F")
+ENDIF()
+
+SET(FREERTOS_SRC_FILES
+	croutine.c
+	event_groups.c
+	list.c
+	queue.c
+	tasks.c
+	timers.c
+)
+
+SET(FREERTOS_HEADERS
+	croutine.h
+	deprecated_definitions.h
+	event_groups.h
+	FreeRTOS.h
+	list.h
+	mpu_prototypes.h
+	mpu_wrappers.h
+	portable.h
+	projdefs.h
+	queue.h
+	semphr.h
+	StackMacros.h
+	task.h
+	timers.h
+)
+
+SET(CMSIS_OS_SRC_FILE cmsis_os.c)
+SET(CMSIS_OS_INC_FILE cmsis_os.h)
+
+SET(PORT_ARM_SRC_FILE port.c)
+SET(PORTMACRO_ARM_HEADER portmacro.h)
+
+IF(NOT FREERTOS_HEAP_IMPL)
+	MESSAGE(FATAL_ERROR "FREERTOS_HEAP_IMPL not defined. Define it to include proper heap implementation file.")
+ELSE()
+	SET(HEAP_IMP_FILE heap_${FREERTOS_HEAP_IMPL}.c)
+ENDIF()
+
+FIND_PATH(FREERTOS_COMMON_INC_DIR ${FREERTOS_HEADERS}
+	PATH_SUFFIXES include
+	HINTS ${STM32Cube_DIR}/Middlewares/Third_Party/FreeRTOS/Source
+	CMAKE_FIND_ROOT_PATH_BOTH
+)
+
+FIND_PATH(CMSIS_OS_INC_DIR ${CMSIS_OS_INC_FILE}
+	PATH_SUFFIXES CMSIS_RTOS
+	HINTS ${STM32Cube_DIR}/Middlewares/Third_Party/FreeRTOS/Source
+	CMAKE_FIND_ROOT_PATH_BOTH
+)
+
+FIND_PATH(PORTMACRO_INC_DIR ${PORTMACRO_ARM_HEADER}
+	PATH_SUFFIXES ARM_${PORT_GCC_DIR_SUFFIX}
+	HINTS ${STM32Cube_DIR}/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC
+	CMAKE_FIND_ROOT_PATH_BOTH
+)
+
+FOREACH(SRC ${FREERTOS_SRC_FILES})
+    STRING(MAKE_C_IDENTIFIER "${SRC}" SRC_CLEAN)
+	SET(FREERTOS_${SRC_CLEAN}_FILE FREERTOS_SRC_FILE-NOTFOUND)
+	FIND_FILE(FREERTOS_${SRC_CLEAN}_FILE ${SRC}
+		HINTS ${STM32Cube_DIR}/Middlewares/Third_Party/FreeRTOS/Source
+		CMAKE_FIND_ROOT_PATH_BOTH
+	)
+	LIST(APPEND FREERTOS_SOURCES ${FREERTOS_${SRC_CLEAN}_FILE})
+ENDFOREACH()
+
+FIND_FILE(CMSIS_OS_SOURCE ${CMSIS_OS_SRC_FILE}
+	PATH_SUFFIXES CMSIS_RTOS
+	HINTS ${STM32Cube_DIR}/Middlewares/Third_Party/FreeRTOS/Source
+	CMAKE_FIND_ROOT_PATH_BOTH
+)
+
+FIND_FILE(PORT_ARM_SOURCE ${PORT_ARM_SRC_FILE}
+	PATH_SUFFIXES ARM_${PORT_GCC_DIR_SUFFIX}
+	HINTS ${STM32Cube_DIR}/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC
+	CMAKE_FIND_ROOT_PATH_BOTH
+)
+
+FIND_FILE(HEAP_IMP_SOURCE ${HEAP_IMP_FILE}
+	PATH_SUFFIXES MemMang
+	HINTS ${STM32Cube_DIR}/Middlewares/Third_Party/FreeRTOS/Source/portable
+	CMAKE_FIND_ROOT_PATH_BOTH
+)
+
+SET(FreeRTOS_INCLUDE_DIRS
+	${FREERTOS_COMMON_INC_DIR}
+	${CMSIS_OS_INC_DIR}
+	${PORTMACRO_INC_DIR}
+)
+
+SET(FreeRTOS_SOURCES
+	${FREERTOS_SOURCES}
+	${CMSIS_OS_SOURCE}
+	${PORT_ARM_SOURCE}
+	${HEAP_IMP_SOURCE}
+)
+
+INCLUDE(FindPackageHandleStandardArgs)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(FreeRTOS DEFAULT_MSG FreeRTOS_INCLUDE_DIRS FreeRTOS_SOURCES)

+ 10 - 91
cmake/FindSTM32HAL.cmake

@@ -8,18 +8,8 @@ IF(STM32_FAMILY STREQUAL "F0")
     # Components that have _ex sources
     SET(HAL_EX_COMPONENTS adc crc dac flash i2c pcd pwr rcc rtc smartcard spi tim uart)
 
-    # Components that have ll_ in names instead of hal_
-    SET(HAL_LL_COMPONENTS "")
-
     SET(HAL_PREFIX stm32f0xx_)
 
-    SET(HAL_HEADERS
-        stm32f0xx_hal.h
-        stm32f0xx_hal_def.h
-    )
-    SET(HAL_SRCS
-        stm32f0xx_hal.c
-    )
 ELSEIF(STM32_FAMILY STREQUAL "F1")
     SET(HAL_COMPONENTS adc can cec cortex crc dac dma eth flash gpio hcd i2c
                        i2s irda iwdg nand nor pccard pcd pwr rcc rtc sd smartcard
@@ -30,18 +20,8 @@ ELSEIF(STM32_FAMILY STREQUAL "F1")
     # Components that have _ex sources
     SET(HAL_EX_COMPONENTS adc dac flash gpio pcd rcc rtc tim)
 
-    # Components that have ll_ in names instead of hal_
-    SET(HAL_LL_COMPONENTS fsmc sdmmc usb)
-
     SET(HAL_PREFIX stm32f1xx_)
 
-    SET(HAL_HEADERS
-        stm32f1xx_hal.h
-        stm32f1xx_hal_def.h
-    )
-    SET(HAL_SRCS
-        stm32f1xx_hal.c
-    )
 ELSEIF(STM32_FAMILY STREQUAL "F2")
     SET(HAL_COMPONENTS adc can cortex crc cryp dac dcmi dma eth flash
                        gpio hash hcd i2c i2s irda iwdg nand nor pccard
@@ -53,19 +33,8 @@ ELSEIF(STM32_FAMILY STREQUAL "F2")
     # Components that have _ex sources
     SET(HAL_EX_COMPONENTS adc dac dma flash pwr rcc rtc tim)
 
-    # Components that have ll_ in names instead of hal_
-    SET(HAL_LL_COMPONENTS fsmc sdmmc usb)
-
     SET(HAL_PREFIX stm32f2xx_)
 
-    SET(HAL_HEADERS
-        stm32f2xx_hal.h
-        stm32f2xx_hal_def.h
-    )
-
-    SET(HAL_SRCS
-        stm32f2xx_hal.c
-    )
 ELSEIF(STM32_FAMILY STREQUAL "F3")
     SET(HAL_COMPONENTS adc can cec comp cortex crc dac dma flash gpio i2c i2s
                        irda nand nor opamp pccard pcd pwr rcc rtc sdadc
@@ -78,14 +47,6 @@ ELSEIF(STM32_FAMILY STREQUAL "F3")
 
     SET(HAL_PREFIX stm32f3xx_)
 
-    SET(HAL_HEADERS
-        stm32f3xx_hal.h
-        stm32f3xx_hal_def.h
-    )
-
-    SET(HAL_SRCS
-        stm32f3xx_hal.c
-    )
 ELSEIF(STM32_FAMILY STREQUAL "F4")
     SET(HAL_COMPONENTS adc can cec cortex crc cryp dac dcmi dma dma2d eth flash
                        flash_ramfunc fmpi2c gpio hash hcd i2c i2s irda iwdg ltdc
@@ -99,19 +60,8 @@ ELSEIF(STM32_FAMILY STREQUAL "F4")
     SET(HAL_EX_COMPONENTS adc cryp dac dcmi dma flash fmpi2c hash i2c i2s pcd
                           pwr rcc rtc sai tim)
 
-    # Components that have ll_ in names instead of hal_
-    SET(HAL_LL_COMPONENTS fmc fsmc sdmmc usb)
-
     SET(HAL_PREFIX stm32f4xx_)
 
-    SET(HAL_HEADERS
-        stm32f4xx_hal.h
-        stm32f4xx_hal_def.h
-    )
-
-    SET(HAL_SRCS
-        stm32f4xx_hal.c
-    )
 ELSEIF(STM32_FAMILY STREQUAL "F7")
     SET(HAL_COMPONENTS adc can cec cortex crc cryp dac dcmi dma dma2d eth flash
                        gpio hash hcd i2c i2s irda iwdg lptim ltdc nand nor pcd
@@ -124,19 +74,8 @@ ELSEIF(STM32_FAMILY STREQUAL "F7")
     SET(HAL_EX_COMPONENTS adc crc cryp dac dcmi dma flash hash i2c pcd
                           pwr rcc rtc sai tim)
 
-    # Components that have ll_ in names instead of hal_
-    SET(HAL_LL_COMPONENTS fmc sdmmc usb)
-
     SET(HAL_PREFIX stm32f7xx_)
 
-    SET(HAL_HEADERS
-        stm32f7xx_hal.h
-        stm32f7xx_hal_def.h
-    )
-
-    SET(HAL_SRCS
-        stm32f7xx_hal.c
-    )
 ELSEIF(STM32_FAMILY STREQUAL "L0")
     SET(HAL_COMPONENTS adc comp cortex crc crs cryp dac dma exti firewall flash gpio i2c
                        i2s irda iwdg lcd lptim lpuart pcd pwr rcc rng rtc smartcard
@@ -147,21 +86,11 @@ ELSEIF(STM32_FAMILY STREQUAL "L0")
     # Components that have _ex sources
     SET(HAL_EX_COMPONENTS adc comp crc cryp dac flash i2c pcd pwr rcc rtc smartcard tim uart usart)
 
-    # Components that have ll_ in names instead of hal_
-    SET(HAL_LL_COMPONENTS crs exti lpuart utils)
-
     SET(HAL_PREFIX stm32l0xx_)
 
-    SET(HAL_HEADERS
-        stm32l0xx_hal.h
-        stm32l0xx_hal_def.h
-    )
-    SET(HAL_SRCS
-        stm32l0xx_hal.c
-    )
 ELSEIF(STM32_FAMILY STREQUAL "L4")
     SET(HAL_COMPONENTS adc can comp cortex crc cryp dac dcmi dfsdm dma dma2d dsi 
-                       firewall flash flash_ramfunc gfxmmu gpio hash hcd i2c irda iwdg 
+                       firewall flash flash_ramfunc gfxmmu gpio hash hcd i2c irda iwdg
                        lcd lptim ltdc nand nor opamp ospi pcd pwr qspi rcc rng rtc sai
                        sd smartcard smbus spi sram swpmi tim tsc uart usart wwdg)
 
@@ -171,23 +100,18 @@ ELSEIF(STM32_FAMILY STREQUAL "L4")
     SET(HAL_EX_COMPONENTS adc crc cryp dac dfsdm dma flash hash i2c ltdc 
                           opamp pcd pwr rcc rtc sai sd smartcard spi tim uart usart)
                           
-
-    # Components that have ll_ in names instead of hal_
-    SET(HAL_LL_COMPONENTS adc comp crc crs dac dma dma2d exti fmc gpio i2c lptim lpuart
-                          opamp pwr rcc rng rtc sdmmc spi swpmi tim usart usb utils)
-
     SET(HAL_PREFIX stm32l4xx_)
 
-    SET(HAL_HEADERS
-        stm32l4xx_hal.h
-        stm32l4xx_hal_def.h
-    )
-
-    SET(HAL_SRCS
-        stm32l4xx_hal.c
-    )    
 ENDIF()
 
+SET(HAL_HEADERS
+	${HAL_PREFIX}hal.h
+	${HAL_PREFIX}hal_def.h
+)
+
+SET(HAL_SRCS
+	${HAL_PREFIX}hal.c
+)
 IF(NOT STM32HAL_FIND_COMPONENTS)
     SET(STM32HAL_FIND_COMPONENTS ${HAL_COMPONENTS})
     MESSAGE(STATUS "No STM32HAL components selected, using all: ${STM32HAL_FIND_COMPONENTS}")
@@ -204,14 +128,9 @@ FOREACH(cmp ${STM32HAL_FIND_COMPONENTS})
     LIST(FIND HAL_COMPONENTS ${cmp} STM32HAL_FOUND_INDEX)
     IF(${STM32HAL_FOUND_INDEX} LESS 0)
         MESSAGE(FATAL_ERROR "Unknown STM32HAL component: ${cmp}. Available components: ${HAL_COMPONENTS}")
-    ENDIF()
-    LIST(FIND HAL_LL_COMPONENTS ${cmp} STM32HAL_FOUND_INDEX)
-    IF(${STM32HAL_FOUND_INDEX} LESS 0)
+	ELSE()
         LIST(APPEND HAL_HEADERS ${HAL_PREFIX}hal_${cmp}.h)
         LIST(APPEND HAL_SRCS ${HAL_PREFIX}hal_${cmp}.c)
-    ELSE()
-        LIST(APPEND HAL_HEADERS ${HAL_PREFIX}ll_${cmp}.h)
-        LIST(APPEND HAL_SRCS ${HAL_PREFIX}ll_${cmp}.c)
     ENDIF()
     LIST(FIND HAL_EX_COMPONENTS ${cmp} STM32HAL_FOUND_INDEX)
     IF(NOT (${STM32HAL_FOUND_INDEX} LESS 0))

+ 117 - 0
cmake/FindSTM32LL.cmake

@@ -0,0 +1,117 @@
+SET(STM32LL_HEADER_ONLY_COMPONENTS	bus cortex iwdg system wwdg dmamux)
+
+IF(STM32_FAMILY STREQUAL "F0")
+    SET(LL_COMPONENTS	adc bus comp cortex crc crs dac dma exti gpio i2c
+						i2s iwdg pwr rcc rtc spi system tim usart utils wwdg)
+
+    SET(LL_REQUIRED_COMPONENTS bus cortex pwr rcc system utils)
+
+    SET(LL_PREFIX stm32f0xx_)
+
+ELSEIF(STM32_FAMILY STREQUAL "F1")
+    SET(LL_COMPONENTS	adc bus cortex crc dac dma exti gpio i2c i2s
+						iwdg pwr rcc rtc spi system tim usart usb utils wwdg)
+
+    SET(LL_REQUIRED_COMPONENTS bus cortex pwr rcc system utils)
+
+    SET(LL_PREFIX stm32f1xx_)
+
+ELSEIF(STM32_FAMILY STREQUAL "F2")
+    SET(LL_COMPONENTS	adc bus cortex crc dac dma exti gpio i2c i2s iwdg pwr 
+						rcc rng rtc spi system tim usart usb utils wwdg)
+
+    SET(LL_REQUIRED_COMPONENTS bus cortex pwr rcc system utils)
+
+    SET(LL_PREFIX stm32f2xx_)
+
+ELSEIF(STM32_FAMILY STREQUAL "F3")
+    SET(LL_COMPONENTS	adc bus comp cortex crc dac dma exti gpio hrtim i2c i2s
+						iwdg opamp pwr rcc rtc spi system tim usart utils wwdg)
+
+    SET(LL_REQUIRED_COMPONENTS bus cortex pwr rcc system utils)
+
+    SET(LL_PREFIX stm32f3xx_)
+
+ELSEIF(STM32_FAMILY STREQUAL "F4")
+    SET(LL_COMPONENTS	adc bus cortex crc dac dma2d dma exti gpio i2c i2s iwdg
+						lptim pwr rcc rng rtc spi system tim usart usb utils wwdg)
+
+    SET(LL_REQUIRED_COMPONENTS bus cortex pwr rcc system utils)
+
+    SET(LL_PREFIX stm32f4xx_)
+
+ELSEIF(STM32_FAMILY STREQUAL "F7")
+    SET(LL_COMPONENTS	adc bus cortex crc dac dma2d dma exti gpio i2c i2s iwdg
+						lptim pwr rcc rng rtc spi system tim usart usb utils wwdg)
+
+    SET(LL_REQUIRED_COMPONENTS bus cortex pwr rcc system utils)
+
+    SET(LL_PREFIX stm32f7xx_)
+
+ELSEIF(STM32_FAMILY STREQUAL "L0")
+    SET(LL_COMPONENTS	adc bus comp cortex crc crs dac dma exti gpio i2c i2s
+						iwdg lptim lpuart pwr rcc rng rtc spi system tim usart
+						utils wwdg)
+
+    SET(LL_REQUIRED_COMPONENTS bus cortex pwr rcc system utils)
+
+    SET(LL_PREFIX stm32l0xx_)
+
+ELSEIF(STM32_FAMILY STREQUAL "L4")
+    SET(LL_COMPONENTS	adc bus comp cortex crc crs dac dma2d dmamux dma exti 
+						gpio i2c iwdg lptim lpuart opamp pwr rcc rng rtc spi 
+						system tim usart usb utils wwdg)
+
+    SET(LL_REQUIRED_COMPONENTS bus cortex pwr rcc system utils)
+
+    SET(LL_PREFIX stm32l4xx_)
+
+ENDIF()
+
+ADD_DEFINITIONS(-DUSE_FULL_LL_DRIVER)
+
+FOREACH(cmp ${LL_REQUIRED_COMPONENTS})
+	LIST(FIND STM32LL_FIND_COMPONENTS ${cmp} STM32LL_FOUND_INDEX)
+	IF(${STM32LL_FOUND_INDEX} LESS 0)
+		LIST(APPEND STM32LL_FIND_COMPONENTS ${cmp})
+	ENDIF()
+ENDFOREACH()
+
+FOREACH(cmp ${STM32LL_FIND_COMPONENTS})
+	LIST(FIND LL_COMPONENTS ${cmp} STM32LL_FOUND_INDEX)
+	IF(${STM32LL_FOUND_INDEX} LESS 0)
+		MESSAGE(FATAL_ERROR "Unknown STM32LL component: ${cmp}. Available components: ${LL_COMPONENTS}")
+	ELSE()
+		LIST(FIND STM32LL_HEADER_ONLY_COMPONENTS ${cmp} HEADER_ONLY_FOUND_INDEX)
+		IF(${HEADER_ONLY_FOUND_INDEX} LESS 0)
+			LIST(APPEND LL_SRCS ${LL_PREFIX}ll_${cmp}.c)
+		ENDIF()
+		LIST(APPEND LL_HEADERS ${LL_PREFIX}ll_${cmp}.h)
+	ENDIF()
+ENDFOREACH()
+
+LIST(REMOVE_DUPLICATES LL_HEADERS)
+LIST(REMOVE_DUPLICATES LL_SRCS)
+
+STRING(TOLOWER ${STM32_FAMILY} STM32_FAMILY_LOWER)
+
+FIND_PATH(STM32LL_INCLUDE_DIR ${LL_HEADERS}
+	PATH_SUFFIXES include stm32${STM32_FAMILY_LOWER}
+	HINTS ${STM32Cube_DIR}/Drivers/STM32${STM32_FAMILY}xx_HAL_Driver/Inc
+	CMAKE_FIND_ROOT_PATH_BOTH
+)
+
+FOREACH(LL_SRC ${LL_SRCS})
+	STRING(MAKE_C_IDENTIFIER "${LL_SRC}" LL_SRC_CLEAN)
+	SET(LL_${LL_SRC_CLEAN}_FILE LL_SRC_FILE-NOTFOUND)
+	FIND_FILE(LL_${LL_SRC_CLEAN}_FILE ${LL_SRC}
+		PATH_SUFFIXES src stm32${STM32_FAMILY_LOWER}
+		HINTS ${STM32Cube_DIR}/Drivers/STM32${STM32_FAMILY}xx_HAL_Driver/Src
+		CMAKE_FIND_ROOT_PATH_BOTH
+	)
+	LIST(APPEND STM32LL_SOURCES ${LL_${LL_SRC_CLEAN}_FILE})
+ENDFOREACH()
+
+INCLUDE(FindPackageHandleStandardArgs)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(STM32LL DEFAULT_MSG STM32LL_INCLUDE_DIR STM32LL_SOURCES)