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

Port to STM32CubeMX HAL.
Only F4 for now.

Konstantin Oblaukhov 10 лет назад
Родитель
Сommit
f5acb3b5ef

+ 8 - 24
cmake/Modules/FindCMSIS.cmake

@@ -8,18 +8,11 @@ IF(STM32_FAMILY STREQUAL "F1")
 ELSEIF(STM32_FAMILY STREQUAL "F4")
 ELSEIF(STM32_FAMILY STREQUAL "F4")
     SET(CMSIS_STARTUP_PREFIX startup_stm32f)
     SET(CMSIS_STARTUP_PREFIX startup_stm32f)
     SET(CMSIS_HEADERS system_stm32f4xx.h core_cm4.h stm32f4xx.h)
     SET(CMSIS_HEADERS system_stm32f4xx.h core_cm4.h stm32f4xx.h)
-    SET(CMSIS_LINKER_SCRIPT_NAME stm32f4_flash.ld.in)
+    SET(CMSIS_LINKER_SCRIPT_NAME stm32f4.ld.in)
     SET(CMSIS_SRCS system_stm32f4xx.c)
     SET(CMSIS_SRCS system_stm32f4xx.c)
 ENDIF()
 ENDIF()
 
 
-IF((NOT STM32_CHIP_TYPE) AND (NOT STM32_CHIP))
-    UNSET(CMSIS_STARTUP_NAME)
-    UNSET(CMSIS_STARTUP_SOURCE)
-    FOREACH(CHIP_TYPE ${STM32_CHIP_TYPES})
-        STRING(TOLOWER ${CHIP_TYPE} CHIP_TYPE_LOWER)
-        LIST(APPEND CMSIS_FIND_LIBS cmsis_${STM32_FAMILY_LOWER}_${CHIP_TYPE_LOWER})
-    ENDFOREACH()    
-ELSE()
+IF(STM32_CHIP_TYPE OR STM32_CHIP)
     IF(NOT STM32_CHIP_TYPE)
     IF(NOT STM32_CHIP_TYPE)
         STM32_GET_CHIP_TYPE(${STM32_CHIP} STM32_CHIP_TYPE)
         STM32_GET_CHIP_TYPE(${STM32_CHIP} STM32_CHIP_TYPE)
         IF(NOT STM32_CHIP_TYPE)
         IF(NOT STM32_CHIP_TYPE)
@@ -29,7 +22,6 @@ ELSE()
     ENDIF()
     ENDIF()
     STRING(TOLOWER ${STM32_CHIP_TYPE} STM32_CHIP_TYPE_LOWER)
     STRING(TOLOWER ${STM32_CHIP_TYPE} STM32_CHIP_TYPE_LOWER)
     
     
-    SET(CMSIS_FIND_LIBS cmsis_${STM32_FAMILY_LOWER}_${STM32_CHIP_TYPE_LOWER})
     SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_PREFIX}${STM32_CHIP_TYPE_LOWER}.s)
     SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_PREFIX}${STM32_CHIP_TYPE_LOWER}.s)
 ENDIF()
 ENDIF()
 
 
@@ -37,15 +29,6 @@ FIND_PATH(CMSIS_INCLUDE_DIR ${CMSIS_HEADERS}
     PATH_SUFFIXES include stm32${STM32_FAMILY_LOWER}
     PATH_SUFFIXES include stm32${STM32_FAMILY_LOWER}
 )
 )
 
 
-FOREACH(CMSIS_LIB_NAME ${CMSIS_FIND_LIBS})
-    SET(CMSIS_LIBRARY CMSIS_LIBRARY-NOTFOUND)
-    FIND_LIBRARY(CMSIS_LIBRARY
-        NAMES ${CMSIS_LIB_NAME}
-        PATH_SUFFIXES lib
-    )
-    LIST(APPEND CMSIS_LIBRARIES ${CMSIS_LIBRARY})
-ENDFOREACH()
-
 FIND_FILE(CMSIS_LINKER_SCRIPT ${CMSIS_LINKER_SCRIPT_NAME} 
 FIND_FILE(CMSIS_LINKER_SCRIPT ${CMSIS_LINKER_SCRIPT_NAME} 
     PATHS ${CMAKE_FIND_ROOT_PATH}
     PATHS ${CMAKE_FIND_ROOT_PATH}
     PATH_SUFFIXES share/cmsis cmsis
     PATH_SUFFIXES share/cmsis cmsis
@@ -56,13 +39,14 @@ FOREACH(CMSIS_SRC ${CMSIS_SRCS})
     LIST(APPEND CMSIS_SOURCES ${CMSIS_SRC_FILE})
     LIST(APPEND CMSIS_SOURCES ${CMSIS_SRC_FILE})
 ENDFOREACH()
 ENDFOREACH()
 
 
-INCLUDE(FindPackageHandleStandardArgs)
-IF(NOT STM32_CHIP_TYPE)
-    FIND_PACKAGE_HANDLE_STANDARD_ARGS(CMSIS DEFAULT_MSG CMSIS_LIBRARIES CMSIS_INCLUDE_DIR CMSIS_LINKER_SCRIPT CMSIS_SOURCES) 
-ELSE()
+IF(STM32_CHIP_TYPE)
     FIND_FILE(CMSIS_STARTUP_SOURCE
     FIND_FILE(CMSIS_STARTUP_SOURCE
         ${CMSIS_STARTUP_NAME}
         ${CMSIS_STARTUP_NAME}
         PATHS ${CMAKE_FIND_ROOT_PATH}/share/cmsis/
         PATHS ${CMAKE_FIND_ROOT_PATH}/share/cmsis/
     )
     )
-    FIND_PACKAGE_HANDLE_STANDARD_ARGS(CMSIS DEFAULT_MSG CMSIS_LIBRARIES CMSIS_INCLUDE_DIR CMSIS_STARTUP_SOURCE CMSIS_LINKER_SCRIPT CMSIS_SOURCES) 
+    LIST(APPEND CMSIS_SOURCES ${CMSIS_STARTUP_SOURCE})
 ENDIF()
 ENDIF()
+
+INCLUDE(FindPackageHandleStandardArgs)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(CMSIS DEFAULT_MSG CMSIS_INCLUDE_DIR CMSIS_LINKER_SCRIPT CMSIS_SOURCES)

+ 244 - 0
cmake/Modules/FindSTM32HAL.cmake

@@ -0,0 +1,244 @@
+IF(STM32_FAMILY STREQUAL "F1")
+    SET(STDPERIPH_HEADERS
+        stm32f10x_adc.h
+        stm32f10x_bkp.h
+        stm32f10x_can.h
+        stm32f10x_cec.h
+        stm32f10x_crc.h
+        stm32f10x_dac.h
+        stm32f10x_dbgmcu.h
+        stm32f10x_dma.h
+        stm32f10x_exti.h
+        stm32f10x_flash.h
+        stm32f10x_fsmc.h
+        stm32f10x_gpio.h
+        stm32f10x_i2c.h
+        stm32f10x_iwdg.h
+        stm32f10x_pwr.h
+        stm32f10x_rcc.h
+        stm32f10x_rtc.h
+        stm32f10x_sdio.h
+        stm32f10x_spi.h
+        stm32f10x_tim.h
+        stm32f10x_usart.h
+        stm32f10x_wwdg.h
+        stm32f10x_misc.h
+    )
+    SET(STDPERIPH_SRCS
+        misc.c
+        stm32f10x_adc.c
+        stm32f10x_bkp.c
+        stm32f10x_can.c
+        stm32f10x_cec.c
+        stm32f10x_crc.c
+        stm32f10x_dac.c
+        stm32f10x_dbgmcu.c
+        stm32f10x_dma.c
+        stm32f10x_exti.c
+        stm32f10x_flash.c
+        stm32f10x_fsmc.c
+        stm32f10x_gpio.c
+        stm32f10x_i2c.c
+        stm32f10x_iwdg.c
+        stm32f10x_pwr.c
+        stm32f10x_rcc.c
+        stm32f10x_rtc.c
+        stm32f10x_sdio.c
+        stm32f10x_spi.c
+        stm32f10x_tim.c
+        stm32f10x_usart.c
+        stm32f10x_wwdg.c
+    )
+ELSEIF(STM32_FAMILY STREQUAL "F4")
+    SET(HAL_HEADERS
+        stm32f4xx_hal.h
+        stm32f4xx_hal_adc.h
+        stm32f4xx_hal_adc_ex.h
+        stm32f4xx_hal_can.h
+        stm32f4xx_hal_cec.h
+        stm32f4xx_hal_conf_template.h
+        stm32f4xx_hal_cortex.h
+        stm32f4xx_hal_crc.h
+        stm32f4xx_hal_cryp.h
+        stm32f4xx_hal_cryp_ex.h
+        stm32f4xx_hal_dac.h
+        stm32f4xx_hal_dac_ex.h
+        stm32f4xx_hal_dcmi.h
+        stm32f4xx_hal_dcmi_ex.h
+        stm32f4xx_hal_def.h
+        stm32f4xx_hal_dma.h
+        stm32f4xx_hal_dma2d.h
+        stm32f4xx_hal_dma_ex.h
+        stm32f4xx_hal_eth.h
+        stm32f4xx_hal_flash.h
+        stm32f4xx_hal_flash_ex.h
+        stm32f4xx_hal_flash_ramfunc.h
+        stm32f4xx_hal_fmpi2c.h
+        stm32f4xx_hal_fmpi2c_ex.h
+        stm32f4xx_hal_gpio.h
+        stm32f4xx_hal_gpio_ex.h
+        stm32f4xx_hal_hash.h
+        stm32f4xx_hal_hash_ex.h
+        stm32f4xx_hal_hcd.h
+        stm32f4xx_hal_i2c.h
+        stm32f4xx_hal_i2c_ex.h
+        stm32f4xx_hal_i2s.h
+        stm32f4xx_hal_i2s_ex.h
+        stm32f4xx_hal_irda.h
+        stm32f4xx_hal_iwdg.h
+        stm32f4xx_hal_ltdc.h
+        stm32f4xx_hal_nand.h
+        stm32f4xx_hal_nor.h
+        stm32f4xx_hal_pccard.h
+        stm32f4xx_hal_pcd.h
+        stm32f4xx_hal_pcd_ex.h
+        stm32f4xx_hal_pwr.h
+        stm32f4xx_hal_pwr_ex.h
+        stm32f4xx_hal_qspi.h
+        stm32f4xx_hal_rcc.h
+        stm32f4xx_hal_rcc_ex.h
+        stm32f4xx_hal_rng.h
+        stm32f4xx_hal_rtc.h
+        stm32f4xx_hal_rtc_ex.h
+        stm32f4xx_hal_sai.h
+        stm32f4xx_hal_sai_ex.h
+        stm32f4xx_hal_sd.h
+        stm32f4xx_hal_sdram.h
+        stm32f4xx_hal_smartcard.h
+        stm32f4xx_hal_spdifrx.h
+        stm32f4xx_hal_spi.h
+        stm32f4xx_hal_sram.h
+        stm32f4xx_hal_tim.h
+        stm32f4xx_hal_tim_ex.h
+        stm32f4xx_hal_uart.h
+        stm32f4xx_hal_usart.h
+        stm32f4xx_hal_wwdg.h
+        stm32f4xx_ll_fmc.h
+        stm32f4xx_ll_fsmc.h
+        stm32f4xx_ll_sdmmc.h
+        stm32f4xx_ll_usb.h
+    )
+    
+    SET(HAL_SRCS
+        stm32f4xx_hal.c
+        stm32f4xx_hal_adc.c
+        stm32f4xx_hal_adc_ex.c
+        stm32f4xx_hal_can.c
+        stm32f4xx_hal_cec.c
+        stm32f4xx_hal_cortex.c
+        stm32f4xx_hal_crc.c
+        stm32f4xx_hal_cryp.c
+        stm32f4xx_hal_cryp_ex.c
+        stm32f4xx_hal_dac.c
+        stm32f4xx_hal_dac_ex.c
+        stm32f4xx_hal_dcmi.c
+        stm32f4xx_hal_dcmi_ex.c
+        stm32f4xx_hal_dma.c
+        stm32f4xx_hal_dma2d.c
+        stm32f4xx_hal_dma_ex.c
+        stm32f4xx_hal_eth.c
+        stm32f4xx_hal_flash.c
+        stm32f4xx_hal_flash_ex.c
+        stm32f4xx_hal_flash_ramfunc.c
+        stm32f4xx_hal_fmpi2c.c
+        stm32f4xx_hal_fmpi2c_ex.c
+        stm32f4xx_hal_gpio.c
+        stm32f4xx_hal_hash.c
+        stm32f4xx_hal_hash_ex.c
+        stm32f4xx_hal_hcd.c
+        stm32f4xx_hal_i2c.c
+        stm32f4xx_hal_i2c_ex.c
+        stm32f4xx_hal_i2s.c
+        stm32f4xx_hal_i2s_ex.c
+        stm32f4xx_hal_irda.c
+        stm32f4xx_hal_iwdg.c
+        stm32f4xx_hal_ltdc.c
+        stm32f4xx_hal_msp_template.c
+        stm32f4xx_hal_nand.c
+        stm32f4xx_hal_nor.c
+        stm32f4xx_hal_pccard.c
+        stm32f4xx_hal_pcd.c
+        stm32f4xx_hal_pcd_ex.c
+        stm32f4xx_hal_pwr.c
+        stm32f4xx_hal_pwr_ex.c
+        stm32f4xx_hal_qspi.c
+        stm32f4xx_hal_rcc.c
+        stm32f4xx_hal_rcc_ex.c
+        stm32f4xx_hal_rng.c
+        stm32f4xx_hal_rtc.c
+        stm32f4xx_hal_rtc_ex.c
+        stm32f4xx_hal_sai.c
+        stm32f4xx_hal_sai_ex.c
+        stm32f4xx_hal_sd.c
+        stm32f4xx_hal_sdram.c
+        stm32f4xx_hal_smartcard.c
+        stm32f4xx_hal_spdifrx.c
+        stm32f4xx_hal_spi.c
+        stm32f4xx_hal_sram.c
+        stm32f4xx_hal_tim.c
+        stm32f4xx_hal_tim_ex.c
+        stm32f4xx_hal_uart.c
+        stm32f4xx_hal_usart.c
+        stm32f4xx_hal_wwdg.c
+        stm32f4xx_ll_fmc.c
+        stm32f4xx_ll_fsmc.c
+        stm32f4xx_ll_sdmmc.c
+        stm32f4xx_ll_usb.c
+    )
+    
+#     SET(STDPERIPH_SRCS_40_41xxx
+#         stm32f4xx_fsmc.c
+#     )
+#     SET(STDPERIPH_SRCS_427_437xx
+#         stm32f4xx_fmc.c
+#     )
+#     SET(STDPERIPH_SRCS_429_439xx
+#         stm32f4xx_fmc.c
+#     )
+ENDIF()
+
+STRING(TOLOWER ${STM32_FAMILY} STM32_FAMILY_LOWER)
+
+FIND_PATH(STM32HAL_INCLUDE_DIR ${HAL_HEADERS}
+    PATH_SUFFIXES include stm32${STM32_FAMILY_LOWER}
+)
+
+FOREACH(HAL_SRC ${HAL_SRCS})
+    SET(HAL_SRC_FILE HAL_SRC_FILE-NOTFOUND)
+    FIND_FILE(HAL_SRC_FILE NAMES ${HAL_SRC} PATHS ${CMAKE_FIND_ROOT_PATH} PATH_SUFFIXES share/stm32hal/${STM32_FAMILY_LOWER} stm32hal/${STM32_FAMILY_LOWER})
+    LIST(APPEND STM32HAL_SOURCES ${HAL_SRC_FILE})
+ENDFOREACH()
+
+# IF(NOT STM32_CHIP_TYPE)
+#     FOREACH(CHIP_TYPE ${STM32_CHIP_TYPES})
+#         IF(STDPERIPH_SRCS_${CHIP_TYPE})
+#             FOREACH(STDPERIPH_SRC ${STDPERIPH_SRCS_${CHIP_TYPE}})
+#                 SET(STDPERIPH_SRC_FILE STDPERIPH_SRC_FILE-NOTFOUND)
+#                 FIND_FILE(STDPERIPH_SRC_FILE NAMES ${STDPERIPH_SRC} PATHS ${CMAKE_FIND_ROOT_PATH} PATH_SUFFIXES share/stdperiph/stm32${STM32_FAMILY_LOWER} stdperiph/stm32${STM32_FAMILY_LOWER})
+#                 LIST(APPEND StdPeriphLib_SOURCES_${CHIP_TYPE} ${STDPERIPH_SRC_FILE})
+#                 LIST(APPEND STDPERIPH_SRCSRC StdPeriphLib_SOURCES_${CHIP_TYPE})
+#             ENDFOREACH()
+#         ENDIF()
+#     ENDFOREACH()    
+# ELSE()
+#     IF(STDPERIPH_SRCS_${STM32_CHIP_TYPE})
+#         FOREACH(STDPERIPH_SRC ${STDPERIPH_SRCS_${STM32_CHIP_TYPE}})
+#             SET(STDPERIPH_SRC_FILE STDPERIPH_SRC_FILE-NOTFOUND)
+#             FIND_FILE(STDPERIPH_SRC_FILE NAMES ${STDPERIPH_SRC} PATHS ${CMAKE_FIND_ROOT_PATH} PATH_SUFFIXES share/stdperiph/stm32${STM32_FAMILY_LOWER} stdperiph/stm32${STM32_FAMILY_LOWER})
+#             LIST(APPEND StdPeriphLib_SOURCES ${STDPERIPH_SRC_FILE})
+#         ENDFOREACH()
+#     ENDIF()
+# ENDIF()
+
+# IF(STDPERIPH_USE_ASSERT)
+#     ADD_DEFINITIONS("-D\"assert_param(expr)\"=\"((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))\"")
+# ELSE()
+#     ADD_DEFINITIONS("-D\"assert_param(expr)\"=\"((void)0)\"")
+# ENDIF()
+
+INCLUDE(FindPackageHandleStandardArgs)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(STM32HAL DEFAULT_MSG STM32HAL_INCLUDE_DIR STM32HAL_SOURCES) 
+
+#SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_STDPERIPH_DRIVER")
+#SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_STDPERIPH_DRIVER")

+ 0 - 200
cmake/Modules/FindStdPeriphLib.cmake

@@ -1,200 +0,0 @@
-IF(STM32_FAMILY STREQUAL "F1")
-    SET(STDPERIPH_HEADERS
-        stm32f10x_adc.h
-        stm32f10x_bkp.h
-        stm32f10x_can.h
-        stm32f10x_cec.h
-        stm32f10x_crc.h
-        stm32f10x_dac.h
-        stm32f10x_dbgmcu.h
-        stm32f10x_dma.h
-        stm32f10x_exti.h
-        stm32f10x_flash.h
-        stm32f10x_fsmc.h
-        stm32f10x_gpio.h
-        stm32f10x_i2c.h
-        stm32f10x_iwdg.h
-        stm32f10x_pwr.h
-        stm32f10x_rcc.h
-        stm32f10x_rtc.h
-        stm32f10x_sdio.h
-        stm32f10x_spi.h
-        stm32f10x_tim.h
-        stm32f10x_usart.h
-        stm32f10x_wwdg.h
-        stm32f10x_misc.h
-    )
-    SET(STDPERIPH_SRCS
-        misc.c
-        stm32f10x_adc.c
-        stm32f10x_bkp.c
-        stm32f10x_can.c
-        stm32f10x_cec.c
-        stm32f10x_crc.c
-        stm32f10x_dac.c
-        stm32f10x_dbgmcu.c
-        stm32f10x_dma.c
-        stm32f10x_exti.c
-        stm32f10x_flash.c
-        stm32f10x_fsmc.c
-        stm32f10x_gpio.c
-        stm32f10x_i2c.c
-        stm32f10x_iwdg.c
-        stm32f10x_pwr.c
-        stm32f10x_rcc.c
-        stm32f10x_rtc.c
-        stm32f10x_sdio.c
-        stm32f10x_spi.c
-        stm32f10x_tim.c
-        stm32f10x_usart.c
-        stm32f10x_wwdg.c
-    )
-ELSEIF(STM32_FAMILY STREQUAL "F4")
-    SET(STDPERIPH_HEADERS
-        stm32f4xx_adc.h
-        stm32f4xx_can.h
-        stm32f4xx_crc.h
-        stm32f4xx_cryp.h
-        stm32f4xx_dac.h
-        stm32f4xx_dbgmcu.h
-        stm32f4xx_dcmi.h
-        stm32f4xx_dma.h
-        stm32f4xx_dma2d.h
-        stm32f4xx_exti.h
-        stm32f4xx_flash.h
-        stm32f4xx_fmc.h
-        stm32f4xx_fsmc.h
-        stm32f4xx_gpio.h
-        stm32f4xx_hash.h
-        stm32f4xx_i2c.h
-        stm32f4xx_iwdg.h
-        stm32f4xx_ltdc.h
-        stm32f4xx_pwr.h
-        stm32f4xx_rcc.h
-        stm32f4xx_rng.h
-        stm32f4xx_rtc.h
-        stm32f4xx_sai.h
-        stm32f4xx_sdio.h
-        stm32f4xx_spi.h
-        stm32f4xx_syscfg.h
-        stm32f4xx_tim.h
-        stm32f4xx_usart.h
-        stm32f4xx_wwdg.h
-    )
-    
-    SET(STDPERIPH_SRCS
-        misc.c
-        stm32f4xx_adc.c
-        stm32f4xx_can.c
-        stm32f4xx_crc.c
-        stm32f4xx_cryp.c
-        stm32f4xx_cryp_aes.c
-        stm32f4xx_cryp_des.c
-        stm32f4xx_cryp_tdes.c
-        stm32f4xx_dac.c
-        stm32f4xx_dbgmcu.c
-        stm32f4xx_dcmi.c
-        stm32f4xx_dma.c
-        stm32f4xx_dma2d.c
-        stm32f4xx_exti.c
-        stm32f4xx_flash.c
-        stm32f4xx_gpio.c
-        stm32f4xx_hash.c
-        stm32f4xx_hash_md5.c
-        stm32f4xx_hash_sha1.c
-        stm32f4xx_i2c.c
-        stm32f4xx_iwdg.c
-        stm32f4xx_ltdc.c
-        stm32f4xx_pwr.c
-        stm32f4xx_rcc.c
-        stm32f4xx_rng.c
-        stm32f4xx_rtc.c
-        stm32f4xx_sai.c
-        stm32f4xx_sdio.c
-        stm32f4xx_spi.c
-        stm32f4xx_syscfg.c
-        stm32f4xx_tim.c
-        stm32f4xx_usart.c
-        stm32f4xx_wwdg.c
-    )
-    
-    SET(STDPERIPH_SRCS_40_41xxx
-        stm32f4xx_fsmc.c
-    )
-    SET(STDPERIPH_SRCS_427_437xx
-        stm32f4xx_fmc.c
-    )
-    SET(STDPERIPH_SRCS_429_439xx
-        stm32f4xx_fmc.c
-    )
-ENDIF()
-
-STRING(TOLOWER ${STM32_FAMILY} STM32_FAMILY_LOWER)
-IF(NOT STM32_CHIP_TYPE)
-    FOREACH(CHIP_TYPE ${STM32_CHIP_TYPES})
-        STRING(TOLOWER ${CHIP_TYPE} CHIP_TYPE_LOWER)
-        LIST(APPEND STDPERIPH_FIND_LIBS stdperiph_${STM32_FAMILY_LOWER}_${CHIP_TYPE_LOWER})
-    ENDFOREACH()    
-ELSE()
-    STRING(TOLOWER ${STM32_CHIP_TYPE} STM32_CHIP_TYPE_LOWER)
-    SET(STDPERIPH_FIND_LIBS stdperiph_${STM32_FAMILY_LOWER}_${STM32_CHIP_TYPE_LOWER})
-ENDIF()
-
-FIND_PATH(StdPeriphLib_INCLUDE_DIR ${STDPERIPH_HEADERS}
-    PATH_SUFFIXES include stm32${STM32_FAMILY_LOWER}
-)
-
-FOREACH(STDPERIPH_LIB_NAME ${STDPERIPH_FIND_LIBS})
-    SET(StdPeriphLib_LIBRARY STDPERIPH_LIBRARY-NOTFOUND)
-    FIND_LIBRARY(StdPeriphLib_LIBRARY
-        NAMES ${STDPERIPH_LIB_NAME}
-        PATH_SUFFIXES lib
-    )
-    LIST(APPEND StdPeriphLib_LIBRARIES ${StdPeriphLib_LIBRARY})
-ENDFOREACH()
-
-STRING(TOLOWER ${STM32_FAMILY} STM32_FAMILY_LOWER)
-
-FOREACH(STDPERIPH_SRC ${STDPERIPH_SRCS})
-    SET(STDPERIPH_SRC_FILE STDPERIPH_SRC_FILE-NOTFOUND)
-    FIND_FILE(STDPERIPH_SRC_FILE NAMES ${STDPERIPH_SRC} PATHS ${CMAKE_FIND_ROOT_PATH} PATH_SUFFIXES share/stdperiph/stm32${STM32_FAMILY_LOWER} stdperiph/stm32${STM32_FAMILY_LOWER})
-    LIST(APPEND StdPeriphLib_SOURCES ${STDPERIPH_SRC_FILE})
-ENDFOREACH()
-
-IF(NOT STM32_CHIP_TYPE)
-    FOREACH(CHIP_TYPE ${STM32_CHIP_TYPES})
-        IF(STDPERIPH_SRCS_${CHIP_TYPE})
-            FOREACH(STDPERIPH_SRC ${STDPERIPH_SRCS_${CHIP_TYPE}})
-                SET(STDPERIPH_SRC_FILE STDPERIPH_SRC_FILE-NOTFOUND)
-                FIND_FILE(STDPERIPH_SRC_FILE NAMES ${STDPERIPH_SRC} PATHS ${CMAKE_FIND_ROOT_PATH} PATH_SUFFIXES share/stdperiph/stm32${STM32_FAMILY_LOWER} stdperiph/stm32${STM32_FAMILY_LOWER})
-                LIST(APPEND StdPeriphLib_SOURCES_${CHIP_TYPE} ${STDPERIPH_SRC_FILE})
-                LIST(APPEND STDPERIPH_SRCSRC StdPeriphLib_SOURCES_${CHIP_TYPE})
-            ENDFOREACH()
-        ENDIF()
-    ENDFOREACH()    
-ELSE()
-    IF(STDPERIPH_SRCS_${STM32_CHIP_TYPE})
-        FOREACH(STDPERIPH_SRC ${STDPERIPH_SRCS_${STM32_CHIP_TYPE}})
-            SET(STDPERIPH_SRC_FILE STDPERIPH_SRC_FILE-NOTFOUND)
-            FIND_FILE(STDPERIPH_SRC_FILE NAMES ${STDPERIPH_SRC} PATHS ${CMAKE_FIND_ROOT_PATH} PATH_SUFFIXES share/stdperiph/stm32${STM32_FAMILY_LOWER} stdperiph/stm32${STM32_FAMILY_LOWER})
-            LIST(APPEND StdPeriphLib_SOURCES ${STDPERIPH_SRC_FILE})
-        ENDFOREACH()
-    ENDIF()
-ENDIF()
-
-IF(STDPERIPH_USE_ASSERT)
-    ADD_DEFINITIONS("-D\"assert_param(expr)\"=\"((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))\"")
-ELSE()
-    ADD_DEFINITIONS("-D\"assert_param(expr)\"=\"((void)0)\"")
-ENDIF()
-
-INCLUDE(FindPackageHandleStandardArgs)
-
-IF(NOT STM32_CHIP_TYPE)
-    FIND_PACKAGE_HANDLE_STANDARD_ARGS(StdPeriphLib DEFAULT_MSG StdPeriphLib_LIBRARIES StdPeriphLib_INCLUDE_DIR StdPeriphLib_SOURCES ${STDPERIPH_SRCSRC}) 
-ELSE()
-    FIND_PACKAGE_HANDLE_STANDARD_ARGS(StdPeriphLib DEFAULT_MSG StdPeriphLib_LIBRARIES StdPeriphLib_INCLUDE_DIR StdPeriphLib_SOURCES) 
-ENDIF()
-
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_STDPERIPH_DRIVER")
-SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_STDPERIPH_DRIVER")

+ 30 - 28
cmsis/CMakeLists.txt

@@ -27,52 +27,54 @@ IF(${STM32_FAMILY} STREQUAL "F1")
     SET(CMSIS_LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/stm32f1_flash.ld.in)
     SET(CMSIS_LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/stm32f1_flash.ld.in)
     SET(STARTUP_PREFIX ${STM32F1_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_)
     SET(STARTUP_PREFIX ${STM32F1_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_)
 ELSEIF(${STM32_FAMILY} STREQUAL "F4")
 ELSEIF(${STM32_FAMILY} STREQUAL "F4")
-    IF(NOT STM32F4_StdPeriphLib_DIR)
-        SET(STM32F4_StdPeriphLib_DIR "/opt/STM32F4xx_DSP_StdPeriph_Lib_V1.3.0")
-        MESSAGE(STATUS "No STM32F4_StdPeriphLib_DIR specified, using default: " ${STM32F4_StdPeriphLib_DIR})
+    IF(NOT STM32Cube_DIR)
+        SET(STM32Cube_DIR "/opt/STM32Cube_FW_F4_V1.6.0")
+        MESSAGE(STATUS "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
     ENDIF()
     ENDIF()
 
 
     INCLUDE_DIRECTORIES(
     INCLUDE_DIRECTORIES(
-        ${STM32F4_StdPeriphLib_DIR}/Libraries/CMSIS/Device/ST/STM32F4xx/Include/
-        ${STM32F4_StdPeriphLib_DIR}/Libraries/CMSIS/Include/
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include
+        ${STM32Cube_DIR}/Drivers/CMSIS/Include
     )
     )
     
     
     SET(CMSIS_HEADERS 
     SET(CMSIS_HEADERS 
-        ${STM32F4_StdPeriphLib_DIR}/Libraries/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h
-        ${STM32F4_StdPeriphLib_DIR}/Libraries/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
-        ${STM32F4_StdPeriphLib_DIR}/Libraries/CMSIS/Include/core_cm4.h
-        ${STM32F4_StdPeriphLib_DIR}/Libraries/CMSIS/Include/core_cm4_simd.h
-        ${STM32F4_StdPeriphLib_DIR}/Libraries/CMSIS/Include/core_cmFunc.h
-        ${STM32F4_StdPeriphLib_DIR}/Libraries/CMSIS/Include/core_cmInstr.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f401xc.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f401xe.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f405xx.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f407xx.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f415xx.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f417xx.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f427xx.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f429xx.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f437xx.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f439xx.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h
+        
+        ${STM32Cube_DIR}/Drivers/CMSIS/Include/arm_common_tables.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Include/arm_const_structs.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Include/arm_math.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Include/core_cm4.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Include/core_cmFunc.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Include/core_cmInstr.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Include/core_cmSimd.h
     )
     )
     
     
     SET(CMSIS_SOURCES 
     SET(CMSIS_SOURCES 
-        ${STM32F4_StdPeriphLib_DIR}/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c
     )
     )
     
     
-    SET(CMSIS_LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/stm32f4_flash.ld.in)
-    SET(STARTUP_PREFIX ${STM32F4_StdPeriphLib_DIR}/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc_ride7/startup_stm32f)
+    SET(CMSIS_LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/stm32f4.ld.in)
+    SET(STARTUP_PREFIX ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc/startup_stm32f)
 ENDIF()
 ENDIF()
 
 
-INCLUDE_DIRECTORIES(
-    ${CMAKE_CURRENT_SOURCE_DIR}
-)
-
-STRING(TOLOWER ${STM32_FAMILY} STM32_FAMILY_LOWER)
-ADD_CUSTOM_TARGET(cmsis_${STM32_FAMILY_LOWER})
-
 FOREACH(CHIP_TYPE ${STM32_CHIP_TYPES})
 FOREACH(CHIP_TYPE ${STM32_CHIP_TYPES})
     STRING(TOLOWER ${CHIP_TYPE} CHIP_TYPE_LOWER)
     STRING(TOLOWER ${CHIP_TYPE} CHIP_TYPE_LOWER)
-    
     LIST(APPEND CMSIS_STARTUP_FILES ${STARTUP_PREFIX}${CHIP_TYPE_LOWER}.s)
     LIST(APPEND CMSIS_STARTUP_FILES ${STARTUP_PREFIX}${CHIP_TYPE_LOWER}.s)
-    LIST(APPEND CMSIS_LIBRARIES cmsis_${STM32_FAMILY_LOWER}_${CHIP_TYPE_LOWER})
-    SET(TARGET_NAME cmsis_${STM32_FAMILY_LOWER}_${CHIP_TYPE_LOWER})
-    ADD_LIBRARY(${TARGET_NAME} ${CMSIS_SOURCES})
-    STM32_SET_CHIP_DEFINITIONS(${TARGET_NAME} ${CHIP_TYPE})
-    ADD_DEPENDENCIES(cmsis_${STM32_FAMILY_LOWER} ${TARGET_NAME})
 ENDFOREACH()
 ENDFOREACH()
 
 
-INSTALL(TARGETS ${CMSIS_LIBRARIES} RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
 INSTALL(FILES ${CMSIS_HEADERS} DESTINATION include/stm32${STM32_FAMILY_LOWER})
 INSTALL(FILES ${CMSIS_HEADERS} DESTINATION include/stm32${STM32_FAMILY_LOWER})
 INSTALL(FILES ${CMSIS_STARTUP_FILES} ${CMSIS_LINKER_SCRIPT} DESTINATION share/cmsis/)
 INSTALL(FILES ${CMSIS_STARTUP_FILES} ${CMSIS_LINKER_SCRIPT} DESTINATION share/cmsis/)
 INSTALL(FILES ${CMSIS_SOURCES} DESTINATION share/cmsis/)
 INSTALL(FILES ${CMSIS_SOURCES} DESTINATION share/cmsis/)

+ 186 - 0
cmsis/stm32f4.ld.in

@@ -0,0 +1,186 @@
+/*
+*****************************************************************************
+**
+**  File        : stm32_flash.ld
+**
+**  Abstract    : Linker script for STM32F407VG Device with
+**                1024KByte FLASH, 128KByte RAM
+**
+**                Set heap size, stack size and stack location according
+**                to application requirements.
+**
+**                Set memory bank area and size if external memory is used.
+**
+**  Target      : STMicroelectronics STM32
+**
+**  Environment : Atollic TrueSTUDIO(R)
+**
+**  Distribution: The file is distributed “as is,” without any warranty
+**                of any kind.
+**
+**  (c)Copyright Atollic AB.
+**  You may use this file as-is or modify it according to the needs of your
+**  project. This file may only be built (assembled or compiled and linked)
+**  using the Atollic TrueSTUDIO(R) product. The use of this file together
+**  with other tools than Atollic TrueSTUDIO(R) is not permitted.
+**
+*****************************************************************************
+*/
+
+/* Entry Point */
+ENTRY(Reset_Handler)
+
+/* Highest address of the user mode stack */
+_estack = ${STM32_STACK_ADDRESS};    /* end of RAM */
+
+/* Generate a link error if heap and stack don't fit into RAM */
+_Min_Heap_Size = ${STM32_MIN_HEAP_SIZE};      /* required amount of heap  */
+_Min_Stack_Size = ${STM32_MIN_STACK_SIZE}; /* required amount of stack */
+
+/* Specify the memory areas */
+MEMORY
+{
+FLASH (rx)      : ORIGIN = ${STM32_FLASH_ORIGIN}, LENGTH = ${STM32_FLASH_SIZE}
+RAM (xrw)      : ORIGIN = ${STM32_RAM_ORIGIN}, LENGTH = ${STM32_RAM_SIZE}
+CCMRAM (rw)      : ORIGIN = 0x10000000, LENGTH = 64K
+}
+
+/* Define output sections */
+SECTIONS
+{
+  /* The startup code goes first into FLASH */
+  .isr_vector :
+  {
+    . = ALIGN(4);
+    KEEP(*(.isr_vector)) /* Startup code */
+    . = ALIGN(4);
+  } >FLASH
+
+  /* The program code and other data goes into FLASH */
+  .text :
+  {
+    . = ALIGN(4);
+    *(.text)           /* .text sections (code) */
+    *(.text*)          /* .text* sections (code) */
+    *(.glue_7)         /* glue arm to thumb code */
+    *(.glue_7t)        /* glue thumb to arm code */
+    *(.eh_frame)
+
+    KEEP (*(.init))
+    KEEP (*(.fini))
+
+    . = ALIGN(4);
+    _etext = .;        /* define a global symbols at end of code */
+  } >FLASH
+
+  /* Constant data goes into FLASH */
+  .rodata :
+  {
+    . = ALIGN(4);
+    *(.rodata)         /* .rodata sections (constants, strings, etc.) */
+    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
+    . = ALIGN(4);
+  } >FLASH
+
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
+  .ARM : {
+    __exidx_start = .;
+    *(.ARM.exidx*)
+    __exidx_end = .;
+  } >FLASH
+
+  .preinit_array     :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array*))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  } >FLASH
+  .init_array :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT(.init_array.*)))
+    KEEP (*(.init_array*))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  } >FLASH
+  .fini_array :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT(.fini_array.*)))
+    KEEP (*(.fini_array*))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  } >FLASH
+
+  /* used by the startup to initialize data */
+  _sidata = LOADADDR(.data);
+
+  /* Initialized data sections goes into RAM, load LMA copy after code */
+  .data : 
+  {
+    . = ALIGN(4);
+    _sdata = .;        /* create a global symbol at data start */
+    *(.data)           /* .data sections */
+    *(.data*)          /* .data* sections */
+
+    . = ALIGN(4);
+    _edata = .;        /* define a global symbol at data end */
+  } >RAM AT> FLASH
+
+  _siccmram = LOADADDR(.ccmram);
+
+  /* CCM-RAM section 
+  * 
+  * IMPORTANT NOTE! 
+  * If initialized variables will be placed in this section, 
+  * the startup code needs to be modified to copy the init-values.  
+  */
+  .ccmram :
+  {
+    . = ALIGN(4);
+    _sccmram = .;       /* create a global symbol at ccmram start */
+    *(.ccmram)
+    *(.ccmram*)
+    
+    . = ALIGN(4);
+    _eccmram = .;       /* create a global symbol at ccmram end */
+  } >CCMRAM AT> FLASH
+
+  
+  /* Uninitialized data section */
+  . = ALIGN(4);
+  .bss :
+  {
+    /* This is used by the startup in order to initialize the .bss secion */
+    _sbss = .;         /* define a global symbol at bss start */
+    __bss_start__ = _sbss;
+    *(.bss)
+    *(.bss*)
+    *(COMMON)
+
+    . = ALIGN(4);
+    _ebss = .;         /* define a global symbol at bss end */
+    __bss_end__ = _ebss;
+  } >RAM
+
+  /* User_heap_stack section, used to check that there is enough RAM left */
+  ._user_heap_stack :
+  {
+    . = ALIGN(4);
+    PROVIDE ( end = . );
+    PROVIDE ( _end = . );
+    . = . + _Min_Heap_Size;
+    . = . + _Min_Stack_Size;
+    . = ALIGN(4);
+  } >RAM
+
+  
+
+  /* Remove information from the standard libraries */
+  /DISCARD/ :
+  {
+    libc.a ( * )
+    libm.a ( * )
+    libgcc.a ( * )
+  }
+
+  .ARM.attributes 0 : { *(.ARM.attributes) }
+}

+ 0 - 195
cmsis/stm32f4_flash.ld.in

@@ -1,195 +0,0 @@
-/*
-Default linker script for STM32F4xx_1024K_192K
-*/
-
-/* include the common STM32F4xx  sub-script */
-
-/* Common part of the linker scripts for STM32F devices*/
-
-
-/* default stack sizes. 
-
-These are used by the startup in order to allocate stacks for the different modes.
-*/
-
-__Stack_Size = 1024 ;
-
-PROVIDE ( _Stack_Size = __Stack_Size ) ;
-
-__Stack_Init = _estack  - __Stack_Size ;
-
-/*"PROVIDE" allows to easily override these values from an object file or the commmand line.*/
-PROVIDE ( _Stack_Init = __Stack_Init ) ;
-
-/*
-There will be a link error if there is not this amount of RAM free at the end.
-*/
-_Minimum_Stack_Size = ${STM32_MIN_STACK_SIZE} ;
-
-
-/* include the memory spaces definitions sub-script */
-/*
-Linker subscript for STM32F4xx definitions with 1024 Flash and 192 Onchip SRAM */
-
-/* Memory Spaces Definitions */
-
-MEMORY
-{
-  RAM (xrw) : ORIGIN = ${STM32_RAM_ORIGIN}, LENGTH = ${STM32_RAM_SIZE}
-  CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 64K
-  FLASH (rx) : ORIGIN = ${STM32_FLASH_ORIGIN}, LENGTH = ${STM32_FLASH_SIZE}
-  MEMORY_ARRAY (xrw)  : ORIGIN = 0x20002000, LENGTH = 32
-}
-
-/* higher address of the user mode stack (end of 128K RAM on AHB bus)*/
-_estack = ${STM32_STACK_ADDRESS};
-
-
-
-/* include the sections management sub-script for FLASH mode */
-
-/* Sections Definitions */
-
-SECTIONS
-{
-    /* for Cortex devices, the beginning of the startup code is stored in the .isr_vector section, which goes to FLASH */
-    .isr_vector :
-    {
-	. = ALIGN(4);
-        KEEP(*(.isr_vector))            /* Startup code */
-	. = ALIGN(4);
-    } >FLASH
- 
-    /* for some STRx devices, the beginning of the startup code is stored in the .flashtext section, which goes to FLASH */
-    .flashtext :
-    {
-	. = ALIGN(4);
-        *(.flashtext)            /* Startup code */
-	. = ALIGN(4);
-    } >FLASH
- 
-    
-    /* the program code is stored in the .text section, which goes to Flash */
-    .text :
-    {
-	    . = ALIGN(4);
-	    
-        *(.text)                   /* remaining code */
-        *(.text.*)                 /* remaining code */
-        *(.rodata)                 /* read-only data (constants) */
-        *(.rodata*)
-        *(.glue_7)
-        *(.glue_7t)
-
-	    . = ALIGN(4);
-   	 _etext = .;
-	    /* This is used by the startup in order to initialize the .data secion */
-   	 _sidata = _etext;
-    } >FLASH
-    
-    /* MEMORY_ARRAY */
-    .ROarraySection :
-    {
-            *(.ROarraySection)                          
-    } >MEMORY_ARRAY
-     
-
-    /* This is the initialized data section
-    The program executes knowing that the data is in the RAM
-    but the loader puts the initial values in the FLASH (inidata).
-    It is one task of the startup to copy the initial values from FLASH to RAM. */
-    .data  : AT ( _sidata )
-    {
-	    . = ALIGN(4);
-        /* This is used by the startup in order to initialize the .data secion */
-        _sdata = . ;
-        
-        *(.data)
-        *(.data.*)
-
-	    . = ALIGN(4);
-	    /* This is used by the startup in order to initialize the .data secion */
-   	 _edata = . ;
-    } >RAM
-    
-    
-
-    /* This is the uninitialized data section */
-    .bss :
-    {
-	    . = ALIGN(4);
-        /* This is used by the startup in order to initialize the .bss secion */
-        _sbss = .;
-        
-        *(.bss)
-        *(COMMON)
-        
-	    . = ALIGN(4);
-	    /* This is used by the startup in order to initialize the .bss secion */
-   	 _ebss = . ;
-    } >RAM
-    
-    PROVIDE ( end = _ebss );
-    PROVIDE ( _end = _ebss );
-    
-    /* This is the user stack section 
-    This is just to check that there is enough RAM left for the User mode stack
-    It should generate an error if it's full.
-     */
-    ._usrstack :
-    {
-	    . = ALIGN(4);
-        _susrstack = . ;
-        
-        . = . + _Minimum_Stack_Size ;
-        
-	    . = ALIGN(4);
-        _eusrstack = . ;
-    } >RAM
-    
-    /* after that it's only debugging information. */
-    
-    /* remove the debugging information from the standard libraries */
-    DISCARD :
-    {
-     libc.a ( * )
-     libm.a ( * )
-     libgcc.a ( * )
-     }
-  
-  
-    /* Stabs debugging sections.  */
-    .stab          0 : { *(.stab) }
-    .stabstr       0 : { *(.stabstr) }
-    .stab.excl     0 : { *(.stab.excl) }
-    .stab.exclstr  0 : { *(.stab.exclstr) }
-    .stab.index    0 : { *(.stab.index) }
-    .stab.indexstr 0 : { *(.stab.indexstr) }
-    .comment       0 : { *(.comment) }
-    /* DWARF debug sections.
-       Symbols in the DWARF debugging sections are relative to the beginning
-       of the section so we begin them at 0.  */
-    /* DWARF 1 */
-    .debug          0 : { *(.debug) }
-    .line           0 : { *(.line) }
-    /* GNU DWARF 1 extensions */
-    .debug_srcinfo  0 : { *(.debug_srcinfo) }
-    .debug_sfnames  0 : { *(.debug_sfnames) }
-    /* DWARF 1.1 and DWARF 2 */
-    .debug_aranges  0 : { *(.debug_aranges) }
-    .debug_pubnames 0 : { *(.debug_pubnames) }
-    /* DWARF 2 */
-    .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
-    .debug_abbrev   0 : { *(.debug_abbrev) }
-    .debug_line     0 : { *(.debug_line) }
-    .debug_frame    0 : { *(.debug_frame) }
-    .debug_str      0 : { *(.debug_str) }
-    .debug_loc      0 : { *(.debug_loc) }
-    .debug_macinfo  0 : { *(.debug_macinfo) }
-    /* SGI/MIPS DWARF 2 extensions */
-    .debug_weaknames 0 : { *(.debug_weaknames) }
-    .debug_funcnames 0 : { *(.debug_funcnames) }
-    .debug_typenames 0 : { *(.debug_typenames) }
-    .debug_varnames  0 : { *(.debug_varnames) }    
-    
-}

+ 16 - 14
gcc_stm32f4.cmake

@@ -2,14 +2,14 @@ SET(CMAKE_C_FLAGS "-mthumb -fno-builtin -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloa
 SET(CMAKE_CXX_FLAGS "-mthumb -fno-builtin -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -Wall -std=c++11 -ffunction-sections -fdata-sections -fomit-frame-pointer -mabi=aapcs -fno-unroll-loops -ffast-math -ftree-vectorize" CACHE INTERNAL "cxx compiler flags")
 SET(CMAKE_CXX_FLAGS "-mthumb -fno-builtin -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -Wall -std=c++11 -ffunction-sections -fdata-sections -fomit-frame-pointer -mabi=aapcs -fno-unroll-loops -ffast-math -ftree-vectorize" CACHE INTERNAL "cxx compiler flags")
 SET(CMAKE_ASM_FLAGS "-mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -x assembler-with-cpp" CACHE INTERNAL "asm compiler flags")
 SET(CMAKE_ASM_FLAGS "-mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -x assembler-with-cpp" CACHE INTERNAL "asm compiler flags")
 
 
-SET(CMAKE_EXE_LINKER_FLAGS "-nostartfiles -Wl,--gc-sections -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -mabi=aapcs" CACHE INTERNAL "executable linker flags")
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--gc-sections -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -mabi=aapcs" CACHE INTERNAL "executable linker flags")
 SET(CMAKE_MODULE_LINKER_FLAGS "-mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -mabi=aapcs" CACHE INTERNAL "module linker flags")
 SET(CMAKE_MODULE_LINKER_FLAGS "-mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -mabi=aapcs" CACHE INTERNAL "module linker flags")
 SET(CMAKE_SHARED_LINKER_FLAGS "-mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -mabi=aapcs" CACHE INTERNAL "shared linker flags")
 SET(CMAKE_SHARED_LINKER_FLAGS "-mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -mabi=aapcs" CACHE INTERNAL "shared linker flags")
-SET(STM32_CHIP_TYPES 405xx 415xx 407xx 417xx 427xx 437xx 429xx 439xx 401xC 401xE 411xE CACHE INTERNAL "stm32f4 chip types")
-SET(STM32_CODES "405.." "415.." "407.." "417.." "427.." "437.." "429.." "439.." "401.[CB]" "401.[ED]" "411.[ED]")
+SET(STM32_CHIP_TYPES 405xx 415xx 407xx 417xx 427xx 437xx 429xx 439xx 446xx 401xC 401xE 411xE CACHE INTERNAL "stm32f4 chip types")
+SET(STM32_CODES "405.." "415.." "407.." "417.." "427.." "437.." "429.." "439.." "446.." "401.[CB]" "401.[ED]" "411.[ED]")
 
 
 MACRO(STM32_GET_CHIP_TYPE CHIP CHIP_TYPE)
 MACRO(STM32_GET_CHIP_TYPE CHIP CHIP_TYPE)
-    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF](4[0123][1579].[BCEGI]).+$" "\\1" STM32_CODE ${CHIP})
+    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF](4[01234][15679].[BCEGI]).*$" "\\1" STM32_CODE ${CHIP})
     SET(INDEX 0)
     SET(INDEX 0)
     FOREACH(C_TYPE ${STM32_CHIP_TYPES})
     FOREACH(C_TYPE ${STM32_CHIP_TYPES})
         LIST(GET STM32_CODES ${INDEX} CHIP_TYPE_REGEXP)
         LIST(GET STM32_CODES ${INDEX} CHIP_TYPE_REGEXP)
@@ -22,8 +22,8 @@ MACRO(STM32_GET_CHIP_TYPE CHIP CHIP_TYPE)
 ENDMACRO()
 ENDMACRO()
 
 
 MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE)
 MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE)
-    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF](4[0123][1579].[BCEGI])" "\\1" STM32_CODE ${CHIP})
-    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF]4[0123][1579].([BCEGI])" "\\1" STM32_SIZE_CODE ${CHIP})
+    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF](4[01234][15679].[BCEGI]).*$" "\\1" STM32_CODE ${CHIP})
+    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF]4[01234][15679].([BCEGI]).*$" "\\1" STM32_SIZE_CODE ${CHIP})
     
     
     IF(STM32_SIZE_CODE STREQUAL "B")
     IF(STM32_SIZE_CODE STREQUAL "B")
         SET(FLASH "128K")
         SET(FLASH "128K")
@@ -46,21 +46,23 @@ MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE)
     ELSEIF(${TYPE} STREQUAL "411xE")
     ELSEIF(${TYPE} STREQUAL "411xE")
         SET(RAM "128K")
         SET(RAM "128K")
     ELSEIF(${TYPE} STREQUAL "405xx")
     ELSEIF(${TYPE} STREQUAL "405xx")
-        SET(RAM "192K")
+        SET(RAM "128K")
     ELSEIF(${TYPE} STREQUAL "415xx")
     ELSEIF(${TYPE} STREQUAL "415xx")
-        SET(RAM "192K")
+        SET(RAM "128K")
     ELSEIF(${TYPE} STREQUAL "407xx")
     ELSEIF(${TYPE} STREQUAL "407xx")
-        SET(RAM "192K")
+        SET(RAM "128K")
     ELSEIF(${TYPE} STREQUAL "417xx")
     ELSEIF(${TYPE} STREQUAL "417xx")
-        SET(RAM "192K")
+        SET(RAM "128K")
     ELSEIF(${TYPE} STREQUAL "427xx")
     ELSEIF(${TYPE} STREQUAL "427xx")
-        SET(RAM "256K")
+        SET(RAM "192K")
     ELSEIF(${TYPE} STREQUAL "437xx")
     ELSEIF(${TYPE} STREQUAL "437xx")
-        SET(RAM "256K")
+        SET(RAM "192K")
     ELSEIF(${TYPE} STREQUAL "429xx")
     ELSEIF(${TYPE} STREQUAL "429xx")
-        SET(RAM "256K")
+        SET(RAM "192K")
     ELSEIF(${TYPE} STREQUAL "439xx")
     ELSEIF(${TYPE} STREQUAL "439xx")
-        SET(RAM "256K")
+        SET(RAM "192K")
+    ELSEIF(${TYPE} STREQUAL "446xx")
+        SET(RAM "128K")
     ENDIF()
     ENDIF()
     
     
     SET(${FLASH_SIZE} ${FLASH})
     SET(${FLASH_SIZE} ${FLASH})

+ 153 - 113
stdperiph/CMakeLists.txt

@@ -1,4 +1,4 @@
-PROJECT(stm32stdperiph)
+PROJECT(stm32hal)
 
 
 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 ENABLE_LANGUAGE(ASM)
 ENABLE_LANGUAGE(ASM)
@@ -75,126 +75,166 @@ IF(${STM32_FAMILY} STREQUAL "F1")
     INSTALL(FILES ${STDPERIPH_HEADER_DIR}/misc.h RENAME stm32f10x_misc.h DESTINATION include/stm32f1)
     INSTALL(FILES ${STDPERIPH_HEADER_DIR}/misc.h RENAME stm32f10x_misc.h DESTINATION include/stm32f1)
     INSTALL(FILES ${STDPERIPH_SOURCES} DESTINATION share/stdperiph/stm32f1)
     INSTALL(FILES ${STDPERIPH_SOURCES} DESTINATION share/stdperiph/stm32f1)
 ELSEIF(${STM32_FAMILY} STREQUAL "F4")
 ELSEIF(${STM32_FAMILY} STREQUAL "F4")
-    IF(NOT STM32F4_StdPeriphLib_DIR)
-        SET(STM32F4_StdPeriphLib_DIR "/opt/STM32F4xx_DSP_StdPeriph_Lib_V1.3.0")
-        MESSAGE(STATUS "No STM32F4_StdPeriphLib_DIR specified, using default: " ${STM32F4_StdPeriphLib_DIR})
+    IF(NOT STM32Cube_DIR)
+        SET(STM32Cube_DIR "/opt/STM32Cube_FW_F4_V1.6.0")
+        MESSAGE(STATUS "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
     ENDIF()
     ENDIF()
-
-    INCLUDE_DIRECTORIES(
-        ${STM32F4_StdPeriphLib_DIR}/Libraries/STM32F4xx_StdPeriph_Driver/inc/
-    )
     
     
-    SET(STDPERIPH_SOURCE_DIR ${STM32F4_StdPeriphLib_DIR}/Libraries/STM32F4xx_StdPeriph_Driver/src)
-    SET(STDPERIPH_HEADER_DIR ${STM32F4_StdPeriphLib_DIR}/Libraries/STM32F4xx_StdPeriph_Driver/inc)
+    SET(HAL_HEADER_DIR ${STM32Cube_DIR}/Drivers/STM32F4xx_HAL_Driver/Inc)
+    SET(HAL_SOURCE_DIR ${STM32Cube_DIR}/Drivers/STM32F4xx_HAL_Driver/Src)
     
     
-    SET(STDPERIPH_HEADERS         
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_adc.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_can.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_crc.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_cryp.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_dac.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_dbgmcu.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_dcmi.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_dma.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_dma2d.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_exti.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_flash.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_fmc.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_fsmc.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_gpio.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_hash.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_i2c.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_iwdg.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_ltdc.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_pwr.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_rcc.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_rng.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_rtc.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_sai.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_sdio.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_spi.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_syscfg.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_tim.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_usart.h
-        ${STDPERIPH_HEADER_DIR}/stm32f4xx_wwdg.h
-        ${STDPERIPH_HEADER_DIR}/misc.h
-    )
+    INCLUDE_DIRECTORIES(${HAL_HEADER_DIR})
     
     
-    SET(STDPERIPH_SOURCES
-        ${STDPERIPH_SOURCE_DIR}/misc.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_adc.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_can.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_crc.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_cryp.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_cryp_aes.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_cryp_des.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_cryp_tdes.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_dac.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_dbgmcu.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_dcmi.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_dma.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_dma2d.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_exti.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_flash.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_gpio.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_hash.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_hash_md5.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_hash_sha1.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_i2c.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_iwdg.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_ltdc.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_pwr.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_rcc.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_rng.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_rtc.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_sai.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_sdio.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_spi.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_syscfg.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_tim.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_usart.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_wwdg.c
+    SET(HAL_HEADERS         
+        ${HAL_HEADER_DIR}/stm32f4xx_hal.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_adc.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_adc_ex.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_can.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_cec.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_conf_template.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_cortex.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_crc.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_cryp.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_cryp_ex.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_dac.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_dac_ex.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_dcmi.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_dcmi_ex.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_def.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_dma.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_dma2d.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_dma_ex.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_eth.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_flash.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_flash_ex.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_flash_ramfunc.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_fmpi2c.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_fmpi2c_ex.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_gpio.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_gpio_ex.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_hash.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_hash_ex.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_hcd.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_i2c.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_i2c_ex.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_i2s.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_i2s_ex.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_irda.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_iwdg.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_ltdc.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_nand.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_nor.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_pccard.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_pcd.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_pcd_ex.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_pwr.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_pwr_ex.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_qspi.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_rcc.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_rcc_ex.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_rng.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_rtc.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_rtc_ex.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_sai.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_sai_ex.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_sd.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_sdram.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_smartcard.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_spdifrx.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_spi.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_sram.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_tim.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_tim_ex.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_uart.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_usart.h
+        ${HAL_HEADER_DIR}/stm32f4xx_hal_wwdg.h
+        ${HAL_HEADER_DIR}/stm32f4xx_ll_fmc.h
+        ${HAL_HEADER_DIR}/stm32f4xx_ll_fsmc.h
+        ${HAL_HEADER_DIR}/stm32f4xx_ll_sdmmc.h
+        ${HAL_HEADER_DIR}/stm32f4xx_ll_usb.h
     )
     )
     
     
-    SET(STDPERIPH_SOURCES_40_41xxx
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_fsmc.c
-    )
-    SET(STDPERIPH_SOURCES_427_437xx
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_fmc.c
-    )
-    SET(STDPERIPH_SOURCES_429_439xx
-        ${STDPERIPH_SOURCE_DIR}/stm32f4xx_fmc.c
+    SET(HAL_SOURCES
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_adc.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_adc_ex.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_can.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_cec.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_cortex.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_crc.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_cryp.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_cryp_ex.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_dac.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_dac_ex.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_dcmi.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_dcmi_ex.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_dma.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_dma2d.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_dma_ex.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_eth.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_flash.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_flash_ex.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_flash_ramfunc.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_fmpi2c.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_fmpi2c_ex.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_gpio.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_hash.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_hash_ex.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_hcd.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_i2c.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_i2c_ex.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_i2s.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_i2s_ex.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_irda.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_iwdg.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_ltdc.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_msp_template.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_nand.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_nor.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_pccard.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_pcd.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_pcd_ex.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_pwr.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_pwr_ex.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_qspi.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_rcc.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_rcc_ex.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_rng.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_rtc.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_rtc_ex.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_sai.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_sai_ex.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_sd.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_sdram.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_smartcard.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_spdifrx.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_spi.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_sram.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_tim.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_tim_ex.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_uart.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_usart.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_hal_wwdg.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_ll_fmc.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_ll_fsmc.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_ll_sdmmc.c
+        ${HAL_SOURCE_DIR}/stm32f4xx_ll_usb.c
     )
     )
-        
-    INSTALL(FILES ${STDPERIPH_HEADER_DIR}/misc.h RENAME stm32f4xx_misc.h DESTINATION include/stm32f4)
-    INSTALL(FILES ${STDPERIPH_SOURCES} ${STDPERIPH_SOURCES_40_41xxx} ${STDPERIPH_SOURCES_427_437xx}
-            DESTINATION share/stdperiph/stm32f4)
-ENDIF()
-
-INCLUDE_DIRECTORIES(
-    ${CMAKE_CURRENT_SOURCE_DIR}
-    ${CMSIS_INCLUDE_DIR}
-)
-
-IF(STDPERIPH_USE_ASSERT)
-    ADD_DEFINITIONS("-D\"assert_param(expr)\"=\"((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))\"")
-ELSE()
-    ADD_DEFINITIONS("-D\"assert_param(expr)\"=\"((void)0)\"")
+    
+    INSTALL(FILES ${HAL_HEADER_DIR}/Legacy/stm32_hal_legacy.h DESTINATION include/stm32f4/Legacy)
+    
+#     SET(STDPERIPH_SOURCES_40_41xxx
+#         ${STDPERIPH_SOURCE_DIR}/stm32f4xx_fsmc.c
+#     )
+#     SET(STDPERIPH_SOURCES_427_437xx
+#         ${STDPERIPH_SOURCE_DIR}/stm32f4xx_fmc.c
+#     )
+#     SET(STDPERIPH_SOURCES_429_439xx
+#         ${STDPERIPH_SOURCE_DIR}/stm32f4xx_fmc.c
+#     )
 ENDIF()
 ENDIF()
 
 
 STRING(TOLOWER ${STM32_FAMILY} STM32_FAMILY_LOWER)
 STRING(TOLOWER ${STM32_FAMILY} STM32_FAMILY_LOWER)
-ADD_CUSTOM_TARGET(stdperiph_${STM32_FAMILY_LOWER})
-
-FOREACH(CHIP_TYPE ${STM32_CHIP_TYPES})
-    STRING(TOLOWER ${CHIP_TYPE} CHIP_TYPE_LOWER)
-    
-    LIST(APPEND STDPERIPH_LIBRARIES stdperiph_${STM32_FAMILY_LOWER}_${CHIP_TYPE_LOWER})
-    SET(TARGET_NAME stdperiph_${STM32_FAMILY_LOWER}_${CHIP_TYPE_LOWER})
-    ADD_LIBRARY(${TARGET_NAME} ${STDPERIPH_SOURCES} ${STDPERIPH_SOURCES_${CHIP_TYPE}})
-    STM32_SET_CHIP_DEFINITIONS(${TARGET_NAME} ${CHIP_TYPE})
-    ADD_DEPENDENCIES(stdperiph_${STM32_FAMILY_LOWER} ${TARGET_NAME})
-ENDFOREACH()
-
-INSTALL(TARGETS ${STDPERIPH_LIBRARIES} RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
 
 
-INSTALL(FILES ${STDPERIPH_HEADERS} DESTINATION include/stm32${STM32_FAMILY_LOWER})
+INSTALL(FILES ${HAL_HEADERS} DESTINATION include/stm32${STM32_FAMILY_LOWER})
+INSTALL(FILES ${HAL_SOURCES} DESTINATION share/stm32hal/${STM32_FAMILY_LOWER})

+ 3 - 4
stm32-blinky/CMakeLists.txt

@@ -4,12 +4,12 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
 ENABLE_LANGUAGE(ASM)
 ENABLE_LANGUAGE(ASM)
 
 
 FIND_PACKAGE(CMSIS REQUIRED)
 FIND_PACKAGE(CMSIS REQUIRED)
-FIND_PACKAGE(StdPeriphLib REQUIRED)
+FIND_PACKAGE(STM32HAL REQUIRED)
 
 
 INCLUDE_DIRECTORIES(
 INCLUDE_DIRECTORIES(
     ${CMAKE_CURRENT_SOURCE_DIR}
     ${CMAKE_CURRENT_SOURCE_DIR}
     ${CMSIS_INCLUDE_DIR}
     ${CMSIS_INCLUDE_DIR}
-    ${StdPeriphLib_INCLUDE_DIR}
+    ${STM32HAL_INCLUDE_DIR}
 )
 )
 
 
 SET(PROJECT_SOURCES
 SET(PROJECT_SOURCES
@@ -18,8 +18,7 @@ SET(PROJECT_SOURCES
 
 
 SET(STM32_LINKER_SCRIPT ${CMSIS_LINKER_SCRIPT})
 SET(STM32_LINKER_SCRIPT ${CMSIS_LINKER_SCRIPT})
 
 
-ADD_EXECUTABLE(${CMAKE_PROJECT_NAME} ${PROJECT_SOURCES} ${CMSIS_STARTUP_SOURCE})
-TARGET_LINK_LIBRARIES(${CMAKE_PROJECT_NAME} ${CMSIS_LIBRARIES} ${StdPeriphLib_LIBRARIES})
+ADD_EXECUTABLE(${CMAKE_PROJECT_NAME} ${PROJECT_SOURCES} ${CMSIS_SOURCES} ${STM32HAL_SOURCES})
 
 
 STM32_SET_TARGET_PROPERTIES(${CMAKE_PROJECT_NAME})
 STM32_SET_TARGET_PROPERTIES(${CMAKE_PROJECT_NAME})
 STM32_ADD_HEX_BIN_TARGETS(${CMAKE_PROJECT_NAME})
 STM32_ADD_HEX_BIN_TARGETS(${CMAKE_PROJECT_NAME})

+ 59 - 44
stm32-blinky/main.c

@@ -1,73 +1,88 @@
 #if defined STM32F1
 #if defined STM32F1
 # include <stm32f10x.h>
 # include <stm32f10x.h>
 #elif defined STM32F4
 #elif defined STM32F4
-# include <stm32f4xx.h>
+# include <stm32f4xx_hal.h>
 #endif
 #endif
 
 
 void initGPIO()
 void initGPIO()
 {
 {
-    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
-
     GPIO_InitTypeDef GPIO_Config;
     GPIO_InitTypeDef GPIO_Config;
-#if defined STM32F1
-    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
-
-    GPIO_Config.GPIO_Pin =  GPIO_Pin_8;
-    GPIO_Config.GPIO_Mode = GPIO_Mode_AF_PP;
-    GPIO_Config.GPIO_Speed = GPIO_Speed_50MHz;
-
-    GPIO_Init(GPIOC, &GPIO_Config);
-    GPIO_PinRemapConfig( GPIO_FullRemap_TIM3, ENABLE );
-#elif defined STM32F4
-    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
+    __GPIOA_CLK_ENABLE();
 
 
-    GPIO_Config.GPIO_Mode = GPIO_Mode_AF;
-    GPIO_Config.GPIO_OType = GPIO_OType_PP;
-    GPIO_Config.GPIO_Pin = GPIO_Pin_6;
-    GPIO_Config.GPIO_PuPd = GPIO_PuPd_NOPULL;
-    GPIO_Config.GPIO_Speed = GPIO_Speed_2MHz;
+    GPIO_Config.Alternate = GPIO_AF2_TIM3;
+    GPIO_Config.Mode = GPIO_MODE_AF_PP;
+    GPIO_Config.Pin = GPIO_PIN_6;
+    GPIO_Config.Pull = GPIO_NOPULL;
+    GPIO_Config.Speed = GPIO_SPEED_FAST;
 
 
-    GPIO_Init(GPIOA, &GPIO_Config);
-    GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_TIM3);
-#endif
+    HAL_GPIO_Init(GPIOA, &GPIO_Config);
 }
 }
 
 
 void initTimers()
 void initTimers()
 {
 {
-	SystemCoreClockUpdate();
+    __TIM3_CLK_ENABLE();
 
 
-    TIM_TimeBaseInitTypeDef TIM_BaseConfig;
-    TIM_OCInitTypeDef TIM_OCConfig;
+    TIM_HandleTypeDef TIM_Handle;
 
 
+    TIM_Handle.Instance = TIM3;
     // 10 kHz timer.
     // 10 kHz timer.
-    TIM_BaseConfig.TIM_Prescaler = (uint16_t)(SystemCoreClock / 10000) - 1;
+    TIM_Handle.Init.Prescaler = (uint16_t)(2 * HAL_RCC_GetSysClockFreq() / 10000) - 1;
     // 10000 / 5000 = 1 Hz blinking.
     // 10000 / 5000 = 1 Hz blinking.
-    TIM_BaseConfig.TIM_Period = 5000;
-    TIM_BaseConfig.TIM_ClockDivision = 0;
-    TIM_BaseConfig.TIM_CounterMode = TIM_CounterMode_Up;
+    TIM_Handle.Init.Period = 5000;
+    TIM_Handle.Init.ClockDivision = 0;
+    TIM_Handle.Init.CounterMode = TIM_COUNTERMODE_UP;
+
+    HAL_TIM_Base_Init(&TIM_Handle);
+    HAL_TIM_PWM_Init(&TIM_Handle);
 
 
-    TIM_OCConfig.TIM_OCMode = TIM_OCMode_PWM1;
-    TIM_OCConfig.TIM_OutputState = TIM_OutputState_Enable;
+    TIM_OC_InitTypeDef TIM_OCConfig;
+
+    TIM_OCConfig.OCMode = TIM_OCMODE_PWM1;
     // 2500 / 5000 = 50% duty cycle.
     // 2500 / 5000 = 50% duty cycle.
-    TIM_OCConfig.TIM_Pulse = 2499;
-    TIM_OCConfig.TIM_OCPolarity = TIM_OCPolarity_High;
+    TIM_OCConfig.Pulse = 2499;
+    TIM_OCConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
+    TIM_OCConfig.OCFastMode = TIM_OCFAST_DISABLE;
 
 
-#if defined STM32F1
-    TIM_OC3Init(TIM3, &TIM_OCConfig);
-#elif defined STM32F4
-    // For STM32F4 timer clock = SystemCoreClock / 2 by default.
-    TIM_BaseConfig.TIM_Prescaler = (uint16_t)(SystemCoreClock / 2 / 10000) - 1;
-    TIM_OC1Init(TIM3, &TIM_OCConfig);
-#endif
+    HAL_TIM_PWM_ConfigChannel(&TIM_Handle, &TIM_OCConfig, TIM_CHANNEL_1);
+    HAL_TIM_PWM_Start(&TIM_Handle, TIM_CHANNEL_1);
+}
+
+static void initClock(void)
+{
+    RCC_ClkInitTypeDef RCC_ClkInitStruct;
+    RCC_OscInitTypeDef RCC_OscInitStruct;
 
 
-    TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
-    TIM_TimeBaseInit(TIM3, &TIM_BaseConfig);
-    TIM_ARRPreloadConfig(TIM3, ENABLE);
-    TIM_Cmd(TIM3, ENABLE);
+    __HAL_RCC_PWR_CLK_ENABLE();
+    __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
+
+    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
+    RCC_OscInitStruct.HSEState = RCC_HSE_ON;
+    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
+    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
+    RCC_OscInitStruct.PLL.PLLM = 8;
+    RCC_OscInitStruct.PLL.PLLN = 336;
+    RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
+    RCC_OscInitStruct.PLL.PLLQ = 7;
+    HAL_RCC_OscConfig(&RCC_OscInitStruct);
+
+    RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
+    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
+    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
+    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
+    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV4;
+    HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
+
+    if (HAL_GetREVID() == 0x1001)
+    {
+        __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
+    }
 }
 }
 
 
 void initAll(void)
 void initAll(void)
 {
 {
+    HAL_Init();
+
+    initClock();
     initGPIO();
     initGPIO();
     initTimers();
     initTimers();
 }
 }

+ 0 - 59
stm32-blinky/stm32f4xx_conf.h

@@ -1,59 +0,0 @@
-#ifndef __STM32F4xx_CONF_H
-#define __STM32F4xx_CONF_H
-
-//#include "stm32f4xx_adc.h"
-//#include "stm32f4xx_crc.h"
-//#include "stm32f4xx_dbgmcu.h"
-//#include "stm32f4xx_dma.h"
-//#include "stm32f4xx_exti.h"
-//#include "stm32f4xx_flash.h"
-#include "stm32f4xx_gpio.h"
-//#include "stm32f4xx_i2c.h"
-//#include "stm32f4xx_iwdg.h"
-//#include "stm32f4xx_pwr.h"
-#include "stm32f4xx_rcc.h"
-//#include "stm32f4xx_rtc.h"
-//#include "stm32f4xx_sdio.h"
-//#include "stm32f4xx_spi.h"
-//#include "stm32f4xx_syscfg.h"
-#include "stm32f4xx_tim.h"
-//#include "stm32f4xx_usart.h"
-//#include "stm32f4xx_wwdg.h"
-#include "stm32f4xx_misc.h"
-
-#if defined (STM32F429_439xx)
-//#include "stm32f4xx_cryp.h"
-//#include "stm32f4xx_hash.h"
-//#include "stm32f4xx_rng.h"
-//#include "stm32f4xx_can.h"
-//#include "stm32f4xx_dac.h"
-//#include "stm32f4xx_dcmi.h"
-//#include "stm32f4xx_dma2d.h"
-//#include "stm32f4xx_fmc.h"
-//#include "stm32f4xx_ltdc.h"
-//#include "stm32f4xx_sai.h"
-#endif
-
-#if defined (STM32F427_437xx)
-//#include "stm32f4xx_cryp.h"
-//#include "stm32f4xx_hash.h"
-//#include "stm32f4xx_rng.h"
-//#include "stm32f4xx_can.h"
-//#include "stm32f4xx_dac.h"
-//#include "stm32f4xx_dcmi.h"
-//#include "stm32f4xx_dma2d.h"
-//#include "stm32f4xx_fmc.h"
-//#include "stm32f4xx_sai.h"
-#endif
-
-#if defined (STM32F40_41xxx)
-//#include "stm32f4xx_cryp.h"
-//#include "stm32f4xx_hash.h"
-//#include "stm32f4xx_rng.h"
-//#include "stm32f4xx_can.h"
-//#include "stm32f4xx_dac.h"
-//#include "stm32f4xx_dcmi.h"
-//#include "stm32f4xx_fsmc.h"
-#endif
- 
-#endif

+ 405 - 0
stm32-blinky/stm32f4xx_hal_conf.h

@@ -0,0 +1,405 @@
+/**
+  ******************************************************************************
+  * @file    BSP/Inc/stm32f4xx_hal_conf.h
+  * @author  MCD Application Team
+  * @version V1.2.1
+  * @date    13-March-2015
+  * @brief   HAL configuration file
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */ 
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32F4xx_HAL_CONF_H
+#define __STM32F4xx_HAL_CONF_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Exported types ------------------------------------------------------------*/
+/* Exported constants --------------------------------------------------------*/
+
+/* ########################## Module Selection ############################## */
+/**
+  * @brief This is the list of modules to be used in the HAL driver 
+  */
+#define HAL_MODULE_ENABLED         
+/* #define HAL_ADC_MODULE_ENABLED      */
+/* #define HAL_CAN_MODULE_ENABLED      */
+/* #define HAL_CRC_MODULE_ENABLED      */ 
+/* #define HAL_CRYP_MODULE_ENABLED     */ 
+/* #define HAL_DAC_MODULE_ENABLED      */ 
+/* #define HAL_DCMI_MODULE_ENABLED     */ 
+#define HAL_DMA_MODULE_ENABLED
+/* #define HAL_DMA2D_MODULE_ENABLED    */ 
+/* #define HAL_ETH_MODULE_ENABLED      */
+#define HAL_FLASH_MODULE_ENABLED
+/* #define HAL_NAND_MODULE_ENABLED     */
+/* #define HAL_NOR_MODULE_ENABLED      */
+/* #define HAL_PCCARD_MODULE_ENABLED   */
+/* #define HAL_SRAM_MODULE_ENABLED     */
+/* #define HAL_SDRAM_MODULE_ENABLED    */
+/* #define HAL_HASH_MODULE_ENABLED     */  
+#define HAL_GPIO_MODULE_ENABLED
+/* #define HAL_I2C_MODULE_ENABLED      */
+/* #define HAL_I2S_MODULE_ENABLED      */
+/* #define HAL_IWDG_MODULE_ENABLED     */ 
+/* #define HAL_LTDC_MODULE_ENABLED     */
+#define HAL_PWR_MODULE_ENABLED
+#define HAL_RCC_MODULE_ENABLED      
+/* #define HAL_RNG_MODULE_ENABLED       */   
+/* #define HAL_RTC_MODULE_ENABLED       */
+/* #define HAL_SAI_MODULE_ENABLED        */   
+/* #define HAL_SD_MODULE_ENABLED         */
+/* #define HAL_SPI_MODULE_ENABLED       */
+#define HAL_TIM_MODULE_ENABLED
+/* #define HAL_UART_MODULE_ENABLED      */
+/* #define HAL_USART_MODULE_ENABLED     */ 
+/* #define HAL_IRDA_MODULE_ENABLED      */
+/* #define HAL_SMARTCARD_MODULE_ENABLED */
+/* #define HAL_WWDG_MODULE_ENABLED      */
+#define HAL_CORTEX_MODULE_ENABLED
+/* #define HAL_PCD_MODULE_ENABLED      */
+/* #define HAL_HCD_MODULE_ENABLED      */
+
+/* ########################## HSE/HSI Values adaptation ##################### */
+/**
+  * @brief Adjust the value of External High Speed oscillator (HSE) used in your application.
+  *        This value is used by the RCC HAL module to compute the system frequency
+  *        (when HSE is used as system clock source, directly or through the PLL).  
+  */
+#if !defined  (HSE_VALUE) 
+  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
+#endif /* HSE_VALUE */
+
+#if !defined  (HSE_STARTUP_TIMEOUT)
+  #define HSE_STARTUP_TIMEOUT    ((uint32_t)5000)   /*!< Time out for HSE start up, in ms */
+#endif /* HSE_STARTUP_TIMEOUT */
+
+/**
+  * @brief Internal High Speed oscillator (HSI) value.
+  *        This value is used by the RCC HAL module to compute the system frequency
+  *        (when HSI is used as system clock source, directly or through the PLL). 
+  */
+#if !defined  (HSI_VALUE)
+  #define HSI_VALUE    ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
+#endif /* HSI_VALUE */
+
+/**
+  * @brief Internal Low Speed oscillator (LSI) value.
+  */
+#if !defined  (LSI_VALUE) 
+ #define LSI_VALUE  ((uint32_t)32000)    
+#endif /* LSI_VALUE */                      /*!< Value of the Internal Low Speed oscillator in Hz
+                                             The real value may vary depending on the variations
+                                             in voltage and temperature.  */
+/**
+  * @brief External Low Speed oscillator (LSE) value.
+  */
+#if !defined  (LSE_VALUE)
+ #define LSE_VALUE  ((uint32_t)32768)    /*!< Value of the External Low Speed oscillator in Hz */
+#endif /* LSE_VALUE */
+
+/**
+  * @brief External clock source for I2S peripheral
+  *        This value is used by the I2S HAL module to compute the I2S clock source 
+  *        frequency, this source is inserted directly through I2S_CKIN pad. 
+  */
+#if !defined  (EXTERNAL_CLOCK_VALUE)
+  #define EXTERNAL_CLOCK_VALUE    ((uint32_t)12288000) /*!< Value of the Internal oscillator in Hz*/
+#endif /* EXTERNAL_CLOCK_VALUE */
+
+/* Tip: To avoid modifying this file each time you need to use different HSE,
+   ===  you can define the HSE value in your toolchain compiler preprocessor. */
+
+/* ########################### System Configuration ######################### */
+/**
+  * @brief This is the HAL system configuration section
+  */     
+#define  VDD_VALUE                    ((uint32_t)3300) /*!< Value of VDD in mv */
+#define  TICK_INT_PRIORITY            ((uint32_t)0x0F) /*!< tick interrupt priority */           
+#define  USE_RTOS                     0     
+#define  PREFETCH_ENABLE              0 /* The prefetch will be enabled in SystemClock_Config(), depending on the used 
+                                           STM32F405/415/07/417 device: RevA (prefetch must be off) or RevZ (prefetch can be on/off) */              
+#define  INSTRUCTION_CACHE_ENABLE     1
+#define  DATA_CACHE_ENABLE            1
+
+/* ########################## Assert Selection ############################## */
+/**
+  * @brief Uncomment the line below to expanse the "assert_param" macro in the 
+  *        HAL drivers code
+  */
+/* #define USE_FULL_ASSERT    1 */
+
+/* ################## Ethernet peripheral configuration ##################### */
+
+/* Section 1 : Ethernet peripheral configuration */
+
+/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */
+#define MAC_ADDR0   2
+#define MAC_ADDR1   0
+#define MAC_ADDR2   0
+#define MAC_ADDR3   0
+#define MAC_ADDR4   0
+#define MAC_ADDR5   0
+
+/* Definition of the Ethernet driver buffers size and count */   
+#define ETH_RX_BUF_SIZE                ETH_MAX_PACKET_SIZE /* buffer size for receive               */
+#define ETH_TX_BUF_SIZE                ETH_MAX_PACKET_SIZE /* buffer size for transmit              */
+#define ETH_RXBUFNB                    ((uint32_t)4)       /* 4 Rx buffers of size ETH_RX_BUF_SIZE  */
+#define ETH_TXBUFNB                    ((uint32_t)4)       /* 4 Tx buffers of size ETH_TX_BUF_SIZE  */
+
+/* Section 2: PHY configuration section */
+
+/* DP83848 PHY Address*/ 
+#define DP83848_PHY_ADDRESS             0x01
+/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ 
+#define PHY_RESET_DELAY                 ((uint32_t)0x000000FF)
+/* PHY Configuration delay */
+#define PHY_CONFIG_DELAY                ((uint32_t)0x00000FFF)
+
+#define PHY_READ_TO                     ((uint32_t)0x0000FFFF)
+#define PHY_WRITE_TO                    ((uint32_t)0x0000FFFF)
+
+/* Section 3: Common PHY Registers */
+
+#define PHY_BCR                         ((uint16_t)0x00)    /*!< Transceiver Basic Control Register   */
+#define PHY_BSR                         ((uint16_t)0x01)    /*!< Transceiver Basic Status Register    */
+ 
+#define PHY_RESET                       ((uint16_t)0x8000)  /*!< PHY Reset */
+#define PHY_LOOPBACK                    ((uint16_t)0x4000)  /*!< Select loop-back mode */
+#define PHY_FULLDUPLEX_100M             ((uint16_t)0x2100)  /*!< Set the full-duplex mode at 100 Mb/s */
+#define PHY_HALFDUPLEX_100M             ((uint16_t)0x2000)  /*!< Set the half-duplex mode at 100 Mb/s */
+#define PHY_FULLDUPLEX_10M              ((uint16_t)0x0100)  /*!< Set the full-duplex mode at 10 Mb/s  */
+#define PHY_HALFDUPLEX_10M              ((uint16_t)0x0000)  /*!< Set the half-duplex mode at 10 Mb/s  */
+#define PHY_AUTONEGOTIATION             ((uint16_t)0x1000)  /*!< Enable auto-negotiation function     */
+#define PHY_RESTART_AUTONEGOTIATION     ((uint16_t)0x0200)  /*!< Restart auto-negotiation function    */
+#define PHY_POWERDOWN                   ((uint16_t)0x0800)  /*!< Select the power down mode           */
+#define PHY_ISOLATE                     ((uint16_t)0x0400)  /*!< Isolate PHY from MII                 */
+
+#define PHY_AUTONEGO_COMPLETE           ((uint16_t)0x0020)  /*!< Auto-Negotiation process completed   */
+#define PHY_LINKED_STATUS               ((uint16_t)0x0004)  /*!< Valid link established               */
+#define PHY_JABBER_DETECTION            ((uint16_t)0x0002)  /*!< Jabber condition detected            */
+  
+/* Section 4: Extended PHY Registers */
+
+#define PHY_SR                          ((uint16_t)0x10)    /*!< PHY status register Offset                      */
+#define PHY_MICR                        ((uint16_t)0x11)    /*!< MII Interrupt Control Register                  */
+#define PHY_MISR                        ((uint16_t)0x12)    /*!< MII Interrupt Status and Misc. Control Register */
+ 
+#define PHY_LINK_STATUS                 ((uint16_t)0x0001)  /*!< PHY Link mask                                   */
+#define PHY_SPEED_STATUS                ((uint16_t)0x0002)  /*!< PHY Speed mask                                  */
+#define PHY_DUPLEX_STATUS               ((uint16_t)0x0004)  /*!< PHY Duplex mask                                 */
+
+#define PHY_MICR_INT_EN                 ((uint16_t)0x0002)  /*!< PHY Enable interrupts                           */
+#define PHY_MICR_INT_OE                 ((uint16_t)0x0001)  /*!< PHY Enable output interrupt events              */
+
+#define PHY_MISR_LINK_INT_EN            ((uint16_t)0x0020)  /*!< Enable Interrupt on change of link status       */
+#define PHY_LINK_INTERRUPT              ((uint16_t)0x2000)  /*!< PHY link status interrupt mask                  */
+
+/* Includes ------------------------------------------------------------------*/
+/**
+  * @brief Include module's header file 
+  */
+
+#ifdef HAL_RCC_MODULE_ENABLED
+  #include "stm32f4xx_hal_rcc.h"
+#endif /* HAL_RCC_MODULE_ENABLED */
+
+#ifdef HAL_GPIO_MODULE_ENABLED
+  #include "stm32f4xx_hal_gpio.h"
+#endif /* HAL_GPIO_MODULE_ENABLED */
+
+#ifdef HAL_DMA_MODULE_ENABLED
+  #include "stm32f4xx_hal_dma.h"
+#endif /* HAL_DMA_MODULE_ENABLED */
+   
+#ifdef HAL_CORTEX_MODULE_ENABLED
+  #include "stm32f4xx_hal_cortex.h"
+#endif /* HAL_CORTEX_MODULE_ENABLED */
+
+#ifdef HAL_ADC_MODULE_ENABLED
+  #include "stm32f4xx_hal_adc.h"
+#endif /* HAL_ADC_MODULE_ENABLED */
+
+#ifdef HAL_CAN_MODULE_ENABLED
+  #include "stm32f4xx_hal_can.h"
+#endif /* HAL_CAN_MODULE_ENABLED */
+
+#ifdef HAL_CRC_MODULE_ENABLED
+  #include "stm32f4xx_hal_crc.h"
+#endif /* HAL_CRC_MODULE_ENABLED */
+
+#ifdef HAL_CRYP_MODULE_ENABLED
+  #include "stm32f4xx_hal_cryp.h" 
+#endif /* HAL_CRYP_MODULE_ENABLED */
+
+#ifdef HAL_DMA2D_MODULE_ENABLED
+  #include "stm32f4xx_hal_dma2d.h"
+#endif /* HAL_DMA2D_MODULE_ENABLED */
+
+#ifdef HAL_DAC_MODULE_ENABLED
+  #include "stm32f4xx_hal_dac.h"
+#endif /* HAL_DAC_MODULE_ENABLED */
+
+#ifdef HAL_DCMI_MODULE_ENABLED
+  #include "stm32f4xx_hal_dcmi.h"
+#endif /* HAL_DCMI_MODULE_ENABLED */
+
+#ifdef HAL_ETH_MODULE_ENABLED
+  #include "stm32f4xx_hal_eth.h"
+#endif /* HAL_ETH_MODULE_ENABLED */
+
+#ifdef HAL_FLASH_MODULE_ENABLED
+  #include "stm32f4xx_hal_flash.h"
+#endif /* HAL_FLASH_MODULE_ENABLED */
+ 
+#ifdef HAL_SRAM_MODULE_ENABLED
+  #include "stm32f4xx_hal_sram.h"
+#endif /* HAL_SRAM_MODULE_ENABLED */
+
+#ifdef HAL_NOR_MODULE_ENABLED
+  #include "stm32f4xx_hal_nor.h"
+#endif /* HAL_NOR_MODULE_ENABLED */
+
+#ifdef HAL_NAND_MODULE_ENABLED
+  #include "stm32f4xx_hal_nand.h"
+#endif /* HAL_NAND_MODULE_ENABLED */
+
+#ifdef HAL_PCCARD_MODULE_ENABLED
+  #include "stm32f4xx_hal_pccard.h"
+#endif /* HAL_PCCARD_MODULE_ENABLED */ 
+  
+#ifdef HAL_SDRAM_MODULE_ENABLED
+  #include "stm32f4xx_hal_sdram.h"
+#endif /* HAL_SDRAM_MODULE_ENABLED */      
+
+#ifdef HAL_HASH_MODULE_ENABLED
+ #include "stm32f4xx_hal_hash.h"
+#endif /* HAL_HASH_MODULE_ENABLED */
+
+#ifdef HAL_I2C_MODULE_ENABLED
+ #include "stm32f4xx_hal_i2c.h"
+#endif /* HAL_I2C_MODULE_ENABLED */
+
+#ifdef HAL_I2S_MODULE_ENABLED
+ #include "stm32f4xx_hal_i2s.h"
+#endif /* HAL_I2S_MODULE_ENABLED */
+
+#ifdef HAL_IWDG_MODULE_ENABLED
+ #include "stm32f4xx_hal_iwdg.h"
+#endif /* HAL_IWDG_MODULE_ENABLED */
+
+#ifdef HAL_LTDC_MODULE_ENABLED
+ #include "stm32f4xx_hal_ltdc.h"
+#endif /* HAL_LTDC_MODULE_ENABLED */
+
+#ifdef HAL_PWR_MODULE_ENABLED
+ #include "stm32f4xx_hal_pwr.h"
+#endif /* HAL_PWR_MODULE_ENABLED */
+
+#ifdef HAL_RNG_MODULE_ENABLED
+ #include "stm32f4xx_hal_rng.h"
+#endif /* HAL_RNG_MODULE_ENABLED */
+
+#ifdef HAL_RTC_MODULE_ENABLED
+ #include "stm32f4xx_hal_rtc.h"
+#endif /* HAL_RTC_MODULE_ENABLED */
+
+#ifdef HAL_SAI_MODULE_ENABLED
+ #include "stm32f4xx_hal_sai.h"
+#endif /* HAL_SAI_MODULE_ENABLED */
+
+#ifdef HAL_SD_MODULE_ENABLED
+ #include "stm32f4xx_hal_sd.h"
+#endif /* HAL_SD_MODULE_ENABLED */
+
+#ifdef HAL_SPI_MODULE_ENABLED
+ #include "stm32f4xx_hal_spi.h"
+#endif /* HAL_SPI_MODULE_ENABLED */
+
+#ifdef HAL_TIM_MODULE_ENABLED
+ #include "stm32f4xx_hal_tim.h"
+#endif /* HAL_TIM_MODULE_ENABLED */
+
+#ifdef HAL_UART_MODULE_ENABLED
+ #include "stm32f4xx_hal_uart.h"
+#endif /* HAL_UART_MODULE_ENABLED */
+
+#ifdef HAL_USART_MODULE_ENABLED
+ #include "stm32f4xx_hal_usart.h"
+#endif /* HAL_USART_MODULE_ENABLED */
+
+#ifdef HAL_IRDA_MODULE_ENABLED
+ #include "stm32f4xx_hal_irda.h"
+#endif /* HAL_IRDA_MODULE_ENABLED */
+
+#ifdef HAL_SMARTCARD_MODULE_ENABLED
+ #include "stm32f4xx_hal_smartcard.h"
+#endif /* HAL_SMARTCARD_MODULE_ENABLED */
+
+#ifdef HAL_WWDG_MODULE_ENABLED
+ #include "stm32f4xx_hal_wwdg.h"
+#endif /* HAL_WWDG_MODULE_ENABLED */
+
+#ifdef HAL_PCD_MODULE_ENABLED
+ #include "stm32f4xx_hal_pcd.h"
+#endif /* HAL_PCD_MODULE_ENABLED */
+
+#ifdef HAL_HCD_MODULE_ENABLED
+ #include "stm32f4xx_hal_hcd.h"
+#endif /* HAL_HCD_MODULE_ENABLED */
+   
+/* Exported macro ------------------------------------------------------------*/
+#ifdef  USE_FULL_ASSERT
+/**
+  * @brief  The assert_param macro is used for function's parameters check.
+  * @param  expr: If expr is false, it calls assert_failed function
+  *         which reports the name of the source file and the source
+  *         line number of the call that failed. 
+  *         If expr is true, it returns no value.
+  * @retval None
+  */
+  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
+/* Exported functions ------------------------------------------------------- */
+  void assert_failed(uint8_t* file, uint32_t line);
+#else
+  #define assert_param(expr) ((void)0)
+#endif /* USE_FULL_ASSERT */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STM32F4xx_HAL_CONF_H */
+
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/