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

Port to STM32CubeMX. F1 family support.

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

+ 4 - 4
cmake/Modules/FindCMSIS.cmake

@@ -1,10 +1,10 @@
 STRING(TOLOWER ${STM32_FAMILY} STM32_FAMILY_LOWER)
 STRING(TOLOWER ${STM32_FAMILY} STM32_FAMILY_LOWER)
 
 
 IF(STM32_FAMILY STREQUAL "F1")
 IF(STM32_FAMILY STREQUAL "F1")
-    SET(CMSIS_STARTUP_PREFIX startup_stm32f10x_)
-    SET(CMSIS_HEADERS system_stm32f10x.h core_cm3.h stm32f10x.h)
-    SET(CMSIS_LINKER_SCRIPT_NAME stm32f1_flash.ld.in)
-    SET(CMSIS_SRCS system_stm32f10x.c)
+    SET(CMSIS_STARTUP_PREFIX startup_stm32f)
+    SET(CMSIS_HEADERS system_stm32f1xx.h core_cm3.h stm32f1xx.h)
+    SET(CMSIS_LINKER_SCRIPT_NAME stm32f1.ld.in)
+    SET(CMSIS_SRCS system_stm32f1xx.c)
 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)

+ 91 - 91
cmake/Modules/FindSTM32HAL.cmake

@@ -1,53 +1,95 @@
 IF(STM32_FAMILY STREQUAL "F1")
 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(HAL_HEADERS
+        stm32f1xx_hal.h
+        stm32f1xx_hal_adc.h
+        stm32f1xx_hal_adc_ex.h
+        stm32f1xx_hal_can.h
+        stm32f1xx_hal_can_ex.h
+        stm32f1xx_hal_cec.h
+        stm32f1xx_hal_cortex.h
+        stm32f1xx_hal_crc.h
+        stm32f1xx_hal_dac.h
+        stm32f1xx_hal_dac_ex.h
+        stm32f1xx_hal_def.h
+        stm32f1xx_hal_dma.h
+        stm32f1xx_hal_dma_ex.h
+        stm32f1xx_hal_eth.h
+        stm32f1xx_hal_flash.h
+        stm32f1xx_hal_flash_ex.h
+        stm32f1xx_hal_gpio.h
+        stm32f1xx_hal_gpio_ex.h
+        stm32f1xx_hal_hcd.h
+        stm32f1xx_hal_i2c.h
+        stm32f1xx_hal_i2s.h
+        stm32f1xx_hal_irda.h
+        stm32f1xx_hal_iwdg.h
+        stm32f1xx_hal_nand.h
+        stm32f1xx_hal_nor.h
+        stm32f1xx_hal_pccard.h
+        stm32f1xx_hal_pcd.h
+        stm32f1xx_hal_pcd_ex.h
+        stm32f1xx_hal_pwr.h
+        stm32f1xx_hal_rcc.h
+        stm32f1xx_hal_rcc_ex.h
+        stm32f1xx_hal_rtc.h
+        stm32f1xx_hal_rtc_ex.h
+        stm32f1xx_hal_sd.h
+        stm32f1xx_hal_smartcard.h
+        stm32f1xx_hal_spi.h
+        stm32f1xx_hal_sram.h
+        stm32f1xx_hal_tim.h
+        stm32f1xx_hal_tim_ex.h
+        stm32f1xx_hal_uart.h
+        stm32f1xx_hal_usart.h
+        stm32f1xx_hal_wwdg.h
+        stm32f1xx_ll_fsmc.h
+        stm32f1xx_ll_sdmmc.h
+        stm32f1xx_ll_usb.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
+    SET(HAL_SRCS
+        stm32f1xx_hal.c
+        stm32f1xx_hal_adc.c
+        stm32f1xx_hal_adc_ex.c
+        stm32f1xx_hal_can.c
+        stm32f1xx_hal_cec.c
+        stm32f1xx_hal_cortex.c
+        stm32f1xx_hal_crc.c
+        stm32f1xx_hal_dac.c
+        stm32f1xx_hal_dac_ex.c
+        stm32f1xx_hal_dma.c
+        stm32f1xx_hal_eth.c
+        stm32f1xx_hal_flash.c
+        stm32f1xx_hal_flash_ex.c
+        stm32f1xx_hal_gpio.c
+        stm32f1xx_hal_gpio_ex.c
+        stm32f1xx_hal_hcd.c
+        stm32f1xx_hal_i2c.c
+        stm32f1xx_hal_i2s.c
+        stm32f1xx_hal_irda.c
+        stm32f1xx_hal_iwdg.c
+        stm32f1xx_hal_nand.c
+        stm32f1xx_hal_nor.c
+        stm32f1xx_hal_pccard.c
+        stm32f1xx_hal_pcd.c
+        stm32f1xx_hal_pcd_ex.c
+        stm32f1xx_hal_pwr.c
+        stm32f1xx_hal_rcc.c
+        stm32f1xx_hal_rcc_ex.c
+        stm32f1xx_hal_rtc.c
+        stm32f1xx_hal_rtc_ex.c
+        stm32f1xx_hal_sd.c
+        stm32f1xx_hal_smartcard.c
+        stm32f1xx_hal_spi.c
+        stm32f1xx_hal_spi_ex.c
+        stm32f1xx_hal_sram.c
+        stm32f1xx_hal_tim.c
+        stm32f1xx_hal_tim_ex.c
+        stm32f1xx_hal_uart.c
+        stm32f1xx_hal_usart.c
+        stm32f1xx_hal_wwdg.c
+        stm32f1xx_ll_fsmc.c
+        stm32f1xx_ll_sdmmc.c
+        stm32f1xx_ll_usb.c
     )
     )
 ELSEIF(STM32_FAMILY STREQUAL "F4")
 ELSEIF(STM32_FAMILY STREQUAL "F4")
     SET(HAL_HEADERS
     SET(HAL_HEADERS
@@ -56,7 +98,6 @@ ELSEIF(STM32_FAMILY STREQUAL "F4")
         stm32f4xx_hal_adc_ex.h
         stm32f4xx_hal_adc_ex.h
         stm32f4xx_hal_can.h
         stm32f4xx_hal_can.h
         stm32f4xx_hal_cec.h
         stm32f4xx_hal_cec.h
-        stm32f4xx_hal_conf_template.h
         stm32f4xx_hal_cortex.h
         stm32f4xx_hal_cortex.h
         stm32f4xx_hal_crc.h
         stm32f4xx_hal_crc.h
         stm32f4xx_hal_cryp.h
         stm32f4xx_hal_cryp.h
@@ -153,7 +194,6 @@ ELSEIF(STM32_FAMILY STREQUAL "F4")
         stm32f4xx_hal_irda.c
         stm32f4xx_hal_irda.c
         stm32f4xx_hal_iwdg.c
         stm32f4xx_hal_iwdg.c
         stm32f4xx_hal_ltdc.c
         stm32f4xx_hal_ltdc.c
-        stm32f4xx_hal_msp_template.c
         stm32f4xx_hal_nand.c
         stm32f4xx_hal_nand.c
         stm32f4xx_hal_nor.c
         stm32f4xx_hal_nor.c
         stm32f4xx_hal_pccard.c
         stm32f4xx_hal_pccard.c
@@ -185,16 +225,6 @@ ELSEIF(STM32_FAMILY STREQUAL "F4")
         stm32f4xx_ll_sdmmc.c
         stm32f4xx_ll_sdmmc.c
         stm32f4xx_ll_usb.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()
 ENDIF()
 
 
 STRING(TOLOWER ${STM32_FAMILY} STM32_FAMILY_LOWER)
 STRING(TOLOWER ${STM32_FAMILY} STM32_FAMILY_LOWER)
@@ -209,36 +239,6 @@ FOREACH(HAL_SRC ${HAL_SRCS})
     LIST(APPEND STM32HAL_SOURCES ${HAL_SRC_FILE})
     LIST(APPEND STM32HAL_SOURCES ${HAL_SRC_FILE})
 ENDFOREACH()
 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)
 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")
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(STM32HAL DEFAULT_MSG STM32HAL_INCLUDE_DIR STM32HAL_SOURCES)

+ 32 - 20
cmsis/CMakeLists.txt

@@ -4,38 +4,50 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
 ENABLE_LANGUAGE(ASM)
 ENABLE_LANGUAGE(ASM)
 
 
 IF(${STM32_FAMILY} STREQUAL "F1")
 IF(${STM32_FAMILY} STREQUAL "F1")
-    IF(NOT STM32F1_StdPeriphLib_DIR)
-        SET(STM32F1_StdPeriphLib_DIR "/opt/STM32F10x_StdPeriph_Lib_V3.5.0")
-        MESSAGE(STATUS "No STM32F1_StdPeriphLib_DIR specified, using default: " ${STM32F1_StdPeriphLib_DIR})
+IF(NOT STM32Cube_DIR)
+        SET(STM32Cube_DIR "/opt/STM32Cube_FW_F1_V1.1.0")
+        MESSAGE(STATUS "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
     ENDIF()
     ENDIF()
-
-    INCLUDE_DIRECTORIES(
-        ${STM32F1_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/
-        ${STM32F1_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/CoreSupport/
-    )
     
     
-    SET(CMSIS_HEADERS 
-        ${STM32F1_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.h
-        ${STM32F1_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h
-        ${STM32F1_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/CoreSupport/core_cm3.h
+    SET(CMSIS_HEADERS        
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f100xb.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f100xe.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f101x6.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f101xb.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f101xe.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f101xg.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f102x6.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f102xb.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103x6.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xe.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xg.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f105xc.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f107xc.h
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.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_cm3.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 
-        ${STM32F1_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c
+        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c
     )
     )
     
     
-    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(CMSIS_LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/stm32f1.ld.in)
+    SET(STARTUP_PREFIX ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/gcc/startup_stm32f)
 ELSEIF(${STM32_FAMILY} STREQUAL "F4")
 ELSEIF(${STM32_FAMILY} STREQUAL "F4")
     IF(NOT STM32Cube_DIR)
     IF(NOT STM32Cube_DIR)
         SET(STM32Cube_DIR "/opt/STM32Cube_FW_F4_V1.6.0")
         SET(STM32Cube_DIR "/opt/STM32Cube_FW_F4_V1.6.0")
         MESSAGE(STATUS "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
         MESSAGE(STATUS "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
     ENDIF()
     ENDIF()
-
-    INCLUDE_DIRECTORIES(
-        ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include
-        ${STM32Cube_DIR}/Drivers/CMSIS/Include
-    )
     
     
     SET(CMSIS_HEADERS 
     SET(CMSIS_HEADERS 
         ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
         ${STM32Cube_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h

+ 136 - 141
cmsis/stm32f1_flash.ld.in → cmsis/stm32f1.ld.in

@@ -1,141 +1,136 @@
-/*
-*****************************************************************************
-**
-**  Linker script for STM32F10x devices
-**
-**  Set heap size, stack size and stack location according
-**    to application requirements.
-**
-**  Set memory bank area and size if external memory is used.
-**
-*****************************************************************************
-*/
-
-/* 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}
-}
-
-/* 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) */
-    *(.rodata)         /* .rodata sections (constants, strings, etc.) */
-    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
-    *(.glue_7)         /* glue arm to thumb code */
-    *(.glue_7t)        /* glue thumb to arm code */
-
-    KEEP (*(.init))
-    KEEP (*(.fini))
-
-    . = ALIGN(4);
-    _etext = .;        /* define a global symbols at end of code */
-  } >FLASH
-
-
-   .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
-    .ARM : {
-    __exidx_start = .;
-      *(.ARM.exidx*)
-      __exidx_end = .;
-    } >FLASH
-
-  .ARM.attributes : { *(.ARM.attributes) } > 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 (*(.fini_array*))
-    KEEP (*(SORT(.fini_array.*)))
-    PROVIDE_HIDDEN (__fini_array_end = .);
-  } >FLASH
-
-  /* used by the startup to initialize data */
-  _sidata = .;
-
-  /* Initialized data sections goes into RAM, load LMA copy after code */
-  .data : AT ( _sidata )
-  {
-    . = 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
-
-  /* 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
-
-  PROVIDE ( end = _ebss );
-  PROVIDE ( _end = _ebss );
-
-  /* User_heap_stack section, used to check that there is enough RAM left */
-  ._user_heap_stack :
-  {
-    . = ALIGN(4);
-    . = . + _Min_Heap_Size;
-    . = . + _Min_Stack_Size;
-    . = ALIGN(4);
-  } >RAM
-
-  /* Remove information from the standard libraries */
-  /DISCARD/ :
-  {
-    libc.a ( * )
-    libm.a ( * )
-    libgcc.a ( * )
-  }
-}
+/* 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}
+}
+
+/* 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
+  
+  /* 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 - 29
cmsis/stm32f4.ld.in

@@ -1,32 +1,3 @@
-/*
-*****************************************************************************
-**
-**  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 Point */
 ENTRY(Reset_Handler)
 ENTRY(Reset_Handler)
 
 

+ 51 - 33
gcc_stm32f1.cmake

@@ -2,15 +2,15 @@ SET(CMAKE_C_FLAGS "-mthumb -fno-builtin -mcpu=cortex-m3 -Wall -std=gnu99 -ffunct
 SET(CMAKE_CXX_FLAGS "-mthumb -fno-builtin -mcpu=cortex-m3 -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-m3 -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-m3 -x assembler-with-cpp" CACHE INTERNAL "asm compiler flags")
 SET(CMAKE_ASM_FLAGS "-mthumb -mcpu=cortex-m3 -x assembler-with-cpp" CACHE INTERNAL "asm compiler flags")
 
 
-SET(CMAKE_EXE_LINKER_FLAGS "-nostartfiles -Wl,--gc-sections -mthumb -mcpu=cortex-m3 -mabi=aapcs" CACHE INTERNAL "executable linker flags")
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--gc-sections -mthumb -mcpu=cortex-m3 -mabi=aapcs" CACHE INTERNAL "executable linker flags")
 SET(CMAKE_MODULE_LINKER_FLAGS "-mthumb -mcpu=cortex-m3 -mabi=aapcs" CACHE INTERNAL "module linker flags")
 SET(CMAKE_MODULE_LINKER_FLAGS "-mthumb -mcpu=cortex-m3 -mabi=aapcs" CACHE INTERNAL "module linker flags")
 SET(CMAKE_SHARED_LINKER_FLAGS "-mthumb -mcpu=cortex-m3 -mabi=aapcs" CACHE INTERNAL "shared linker flags")
 SET(CMAKE_SHARED_LINKER_FLAGS "-mthumb -mcpu=cortex-m3 -mabi=aapcs" CACHE INTERNAL "shared linker flags")
 
 
-SET(STM32_CHIP_TYPES CL HD HD_VL MD MD_VL LD LD_VL XL CACHE INTERNAL "stm32f1 chip types")
-SET(STM32_CODES "10[57]" "10[13].[CDE]" "100.[CDE]" "10[123].[8B]" "100.[8B]" "10[123].[46]" "100.[46]" "10[13].[FG]")
+SET(STM32_CHIP_TYPES 100xB 100xE 101x6 101xB 101xE 101xG 102x6 102xB 103x6 103xB 103xE 103xG 105xC 107xC CACHE INTERNAL "stm32f1 chip types")
+SET(STM32_CODES "100.[468B]" "100.[CDE]" "101.[46]" "101.[8B]" "101.[CDE]" "101.[FG]" "102.[46]" "102.[8B]" "103.[46]" "103.[8B]" "103.[CDE]" "103.[FG]" "105.[8BC]" "107.[BC]")
 
 
 MACRO(STM32_GET_CHIP_TYPE CHIP CHIP_TYPE)
 MACRO(STM32_GET_CHIP_TYPE CHIP CHIP_TYPE)
-    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF](10[012357].[468BCDE]).+$" "\\1" STM32_CODE ${CHIP})
+    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF](10[012357].[468BCDEFG]).+$" "\\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)
@@ -23,8 +23,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](10[012357]).[468BCDE]" "\\1" STM32_CODE ${CHIP})
-    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF]10[012357].([468BCDE])" "\\1" STM32_SIZE_CODE ${CHIP})
+    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF](10[012357]).[468BCDEFG]" "\\1" STM32_CODE ${CHIP})
+    STRING(REGEX REPLACE "^[sS][tT][mM]32[fF]10[012357].([468BCDEFG])" "\\1" STM32_SIZE_CODE ${CHIP})
     
     
     IF(STM32_SIZE_CODE STREQUAL "4")
     IF(STM32_SIZE_CODE STREQUAL "4")
         SET(FLASH "16K")
         SET(FLASH "16K")
@@ -48,52 +48,70 @@ MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE)
     
     
     STM32_GET_CHIP_TYPE(${CHIP} TYPE)
     STM32_GET_CHIP_TYPE(${CHIP} TYPE)
     
     
-    IF(${TYPE} STREQUAL "XL")
-        SET(RAM "80K")
-    ELSEIF(${TYPE} STREQUAL "CL")
-        SET(RAM "64K")
-    ELSEIF((${TYPE} STREQUAL "LD") AND ((STM32_CODE STREQUAL "102") OR (STM32_CODE STREQUAL "101")))
-        IF(STM32_SIZE_CODE STREQUAL "4")
+    IF(${TYPE} STREQUAL 100xB)
+        IF((STM32_SIZE_CODE STREQUAL "4") OR (STM32_SIZE_CODE STREQUAL "6"))
             SET(RAM "4K")
             SET(RAM "4K")
         ELSE()
         ELSE()
-            SET(RAM "6K")
+            SET(RAM "8K")
+        ENDIF()
+    ELSEIF(${TYPE} STREQUAL 100xE)
+        IF(STM32_SIZE_CODE STREQUAL "C")
+            SET(RAM "24K")
+        ELSE()
+            SET(RAM "32K")
         ENDIF()
         ENDIF()
-    ELSEIF(${TYPE} STREQUAL "LD")
+    ELSEIF(${TYPE} STREQUAL 101x6)
         IF(STM32_SIZE_CODE STREQUAL "4")
         IF(STM32_SIZE_CODE STREQUAL "4")
-            SET(RAM "6K")
+            SET(RAM "4K")
         ELSE()
         ELSE()
-            SET(RAM "10K")
+            SET(RAM "6K")
         ENDIF()
         ENDIF()
-    ELSEIF(${TYPE} STREQUAL "LD_VL")
-        SET(RAM "4K")
-    ELSEIF((${TYPE} STREQUAL "MD") AND ((STM32_CODE STREQUAL "102") OR (STM32_CODE STREQUAL "101")))
+    ELSEIF(${TYPE} STREQUAL 101xB)
         IF(STM32_SIZE_CODE STREQUAL "8")
         IF(STM32_SIZE_CODE STREQUAL "8")
             SET(RAM "10K")
             SET(RAM "10K")
         ELSE()
         ELSE()
             SET(RAM "16K")
             SET(RAM "16K")
         ENDIF()
         ENDIF()
-    ELSEIF(${TYPE} STREQUAL "MD")
-        SET(RAM "20K")
-    ELSEIF(${TYPE} STREQUAL "MD_VL")
-        SET(RAM "8K")
-    ELSEIF((${TYPE} STREQUAL "HD") AND (STM32_CODE STREQUAL "101"))
+    ELSEIF(${TYPE} STREQUAL 101xE)
         IF(STM32_SIZE_CODE STREQUAL "C")
         IF(STM32_SIZE_CODE STREQUAL "C")
             SET(RAM "32K")
             SET(RAM "32K")
         ELSE()
         ELSE()
             SET(RAM "48K")
             SET(RAM "48K")
         ENDIF()
         ENDIF()
-    ELSEIF(${TYPE} STREQUAL "HD")
-        IF(STM32_SIZE_CODE STREQUAL "C")
-            SET(RAM "48K")
+    ELSEIF(${TYPE} STREQUAL 101xG)
+        SET(RAM "80K")
+    ELSEIF(${TYPE} STREQUAL 102x6)
+        IF(STM32_SIZE_CODE STREQUAL "4")
+            SET(RAM "4K")
+        ELSE()
+            SET(RAM "6K")
+        ENDIF()
+    ELSEIF(${TYPE} STREQUAL 102xB)
+        IF(STM32_SIZE_CODE STREQUAL "8")
+            SET(RAM "10K")
+        ELSE()
+            SET(RAM "16K")
+        ENDIF()
+    ELSEIF(${TYPE} STREQUAL 103x6)
+        IF(STM32_SIZE_CODE STREQUAL "4")
+            SET(RAM "6K")
         ELSE()
         ELSE()
-            SET(RAM "64K")
+            SET(RAM "10K")
         ENDIF()
         ENDIF()
-    ELSEIF(${TYPE} STREQUAL "HD_VL")
+    ELSEIF(${TYPE} STREQUAL 103xB)
+        SET(RAM "20K")
+    ELSEIF(${TYPE} STREQUAL 103xE)
         IF(STM32_SIZE_CODE STREQUAL "C")
         IF(STM32_SIZE_CODE STREQUAL "C")
-            SET(RAM "24K")
+            SET(RAM "48K")
         ELSE()
         ELSE()
-            SET(RAM "32K")
+            SET(RAM "54K")
         ENDIF()
         ENDIF()
+    ELSEIF(${TYPE} STREQUAL 103xG)
+        SET(RAM "96K")
+    ELSEIF(${TYPE} STREQUAL 105xC)
+        SET(RAM "64K")
+    ELSEIF(${TYPE} STREQUAL 107xC)
+        SET(RAM "64K")
     ENDIF()
     ENDIF()
     
     
     SET(${FLASH_SIZE} ${FLASH})
     SET(${FLASH_SIZE} ${FLASH})
@@ -107,9 +125,9 @@ FUNCTION(STM32_SET_CHIP_DEFINITIONS TARGET CHIP_TYPE)
     ENDIF()
     ENDIF()
     GET_TARGET_PROPERTY(TARGET_DEFS ${TARGET} COMPILE_DEFINITIONS)
     GET_TARGET_PROPERTY(TARGET_DEFS ${TARGET} COMPILE_DEFINITIONS)
     IF(TARGET_DEFS)
     IF(TARGET_DEFS)
-        SET(TARGET_DEFS "STM32F1;STM32F10X_${CHIP_TYPE};${TARGET_DEFS}")
+        SET(TARGET_DEFS "STM32F1;STM32F${CHIP_TYPE};${TARGET_DEFS}")
     ELSE()
     ELSE()
-        SET(TARGET_DEFS "STM32F1;STM32F10X_${CHIP_TYPE}")
+        SET(TARGET_DEFS "STM32F1;STM32F${CHIP_TYPE}")
     ENDIF()
     ENDIF()
     SET_TARGET_PROPERTIES(${TARGET} PROPERTIES COMPILE_DEFINITIONS "${TARGET_DEFS}")
     SET_TARGET_PROPERTIES(${TARGET} PROPERTIES COMPILE_DEFINITIONS "${TARGET_DEFS}")
 ENDFUNCTION()
 ENDFUNCTION()

+ 98 - 71
stdperiph/CMakeLists.txt → hal/CMakeLists.txt

@@ -8,72 +8,111 @@ IF(NOT DEFINED CMSIS_INCLUDE_DIR)
 ENDIF()
 ENDIF()
 
 
 IF(${STM32_FAMILY} STREQUAL "F1")
 IF(${STM32_FAMILY} STREQUAL "F1")
-    IF(NOT STM32F1_StdPeriphLib_DIR)
-        SET(STM32F1_StdPeriphLib_DIR "/opt/STM32F10x_StdPeriph_Lib_V3.5.0")
-        MESSAGE(STATUS "No STM32F1_StdPeriphLib_DIR specified, using default: " ${STM32F1_StdPeriphLib_DIR})
+    IF(NOT STM32Cube_DIR)
+        SET(STM32Cube_DIR "/opt/STM32Cube_FW_F1_V1.1.0")
+        MESSAGE(STATUS "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
     ENDIF()
     ENDIF()
-
-    INCLUDE_DIRECTORIES(
-        ${STM32F1_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/
-    )
     
     
-    SET(STDPERIPH_SOURCE_DIR ${STM32F1_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src)
-    SET(STDPERIPH_HEADER_DIR ${STM32F1_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc)
+    SET(HAL_HEADER_DIR ${STM32Cube_DIR}/Drivers/STM32F1xx_HAL_Driver/Inc)
+    SET(HAL_SOURCE_DIR ${STM32Cube_DIR}/Drivers/STM32F1xx_HAL_Driver/Src)
     
     
-    SET(STDPERIPH_HEADERS 
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_adc.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_bkp.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_can.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_cec.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_crc.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_dac.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_dbgmcu.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_dma.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_exti.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_flash.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_fsmc.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_gpio.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_i2c.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_iwdg.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_pwr.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_rcc.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_rtc.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_sdio.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_spi.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_tim.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_usart.h
-        ${STDPERIPH_HEADER_DIR}/stm32f10x_wwdg.h
-        ${STDPERIPH_HEADER_DIR}/misc.h
+    SET(HAL_HEADERS
+        ${HAL_HEADER_DIR}/stm32f1xx_hal.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_adc.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_adc_ex.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_can.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_can_ex.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_cec.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_conf_template.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_cortex.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_crc.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_dac.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_dac_ex.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_def.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_dma.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_dma_ex.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_eth.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_flash.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_flash_ex.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_gpio.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_gpio_ex.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_hcd.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_i2c.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_i2s.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_irda.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_iwdg.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_nand.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_nor.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_pccard.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_pcd.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_pcd_ex.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_pwr.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_rcc.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_rcc_ex.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_rtc.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_rtc_ex.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_sd.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_smartcard.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_spi.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_sram.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_tim.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_tim_ex.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_uart.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_usart.h
+        ${HAL_HEADER_DIR}/stm32f1xx_hal_wwdg.h
+        ${HAL_HEADER_DIR}/stm32f1xx_ll_fsmc.h
+        ${HAL_HEADER_DIR}/stm32f1xx_ll_sdmmc.h
+        ${HAL_HEADER_DIR}/stm32f1xx_ll_usb.h
     )
     )
     
     
-    SET(STDPERIPH_SOURCES
-        ${STDPERIPH_SOURCE_DIR}/misc.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_adc.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_bkp.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_can.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_cec.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_crc.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_dac.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_dbgmcu.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_dma.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_exti.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_flash.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_fsmc.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_gpio.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_i2c.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_iwdg.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_pwr.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_rcc.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_rtc.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_sdio.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_spi.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_tim.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_usart.c
-        ${STDPERIPH_SOURCE_DIR}/stm32f10x_wwdg.c
+    SET(HAL_SOURCES
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_adc.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_adc_ex.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_can.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_cec.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_cortex.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_crc.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_dac.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_dac_ex.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_dma.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_eth.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_flash.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_flash_ex.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_gpio.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_gpio_ex.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_hcd.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_i2c.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_i2s.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_irda.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_iwdg.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_msp_template.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_nand.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_nor.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_pccard.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_pcd.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_pcd_ex.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_pwr.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_rcc.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_rcc_ex.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_rtc.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_rtc_ex.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_sd.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_smartcard.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_spi.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_spi_ex.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_sram.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_tim.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_tim_ex.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_uart.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_usart.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_hal_wwdg.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_ll_fsmc.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_ll_sdmmc.c
+        ${HAL_SOURCE_DIR}/stm32f1xx_ll_usb.c
     )
     )
     
     
-    INSTALL(FILES ${STDPERIPH_HEADER_DIR}/misc.h RENAME stm32f10x_misc.h DESTINATION include/stm32f1)
-    INSTALL(FILES ${STDPERIPH_SOURCES} DESTINATION share/stdperiph/stm32f1)
+    INSTALL(FILES ${HAL_HEADER_DIR}/Legacy/stm32_hal_legacy.h DESTINATION include/stm32f1/Legacy)
 ELSEIF(${STM32_FAMILY} STREQUAL "F4")
 ELSEIF(${STM32_FAMILY} STREQUAL "F4")
     IF(NOT STM32Cube_DIR)
     IF(NOT STM32Cube_DIR)
         SET(STM32Cube_DIR "/opt/STM32Cube_FW_F4_V1.6.0")
         SET(STM32Cube_DIR "/opt/STM32Cube_FW_F4_V1.6.0")
@@ -83,8 +122,6 @@ ELSEIF(${STM32_FAMILY} STREQUAL "F4")
     SET(HAL_HEADER_DIR ${STM32Cube_DIR}/Drivers/STM32F4xx_HAL_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(HAL_SOURCE_DIR ${STM32Cube_DIR}/Drivers/STM32F4xx_HAL_Driver/Src)
     
     
-    INCLUDE_DIRECTORIES(${HAL_HEADER_DIR})
-    
     SET(HAL_HEADERS         
     SET(HAL_HEADERS         
         ${HAL_HEADER_DIR}/stm32f4xx_hal.h
         ${HAL_HEADER_DIR}/stm32f4xx_hal.h
         ${HAL_HEADER_DIR}/stm32f4xx_hal_adc.h
         ${HAL_HEADER_DIR}/stm32f4xx_hal_adc.h
@@ -222,16 +259,6 @@ ELSEIF(${STM32_FAMILY} STREQUAL "F4")
     )
     )
     
     
     INSTALL(FILES ${HAL_HEADER_DIR}/Legacy/stm32_hal_legacy.h DESTINATION include/stm32f4/Legacy)
     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)

+ 72 - 4
stm32-blinky/main.c

@@ -1,5 +1,5 @@
 #if defined STM32F1
 #if defined STM32F1
-# include <stm32f10x.h>
+# include <stm32f1xx_hal.h>
 #elif defined STM32F4
 #elif defined STM32F4
 # include <stm32f4xx_hal.h>
 # include <stm32f4xx_hal.h>
 #endif
 #endif
@@ -7,14 +7,21 @@
 void initGPIO()
 void initGPIO()
 {
 {
     GPIO_InitTypeDef GPIO_Config;
     GPIO_InitTypeDef GPIO_Config;
+
     __GPIOA_CLK_ENABLE();
     __GPIOA_CLK_ENABLE();
 
 
-    GPIO_Config.Alternate = GPIO_AF2_TIM3;
     GPIO_Config.Mode = GPIO_MODE_AF_PP;
     GPIO_Config.Mode = GPIO_MODE_AF_PP;
-    GPIO_Config.Pin = GPIO_PIN_6;
     GPIO_Config.Pull = GPIO_NOPULL;
     GPIO_Config.Pull = GPIO_NOPULL;
-    GPIO_Config.Speed = GPIO_SPEED_FAST;
+    GPIO_Config.Speed = GPIO_SPEED_HIGH;
+
+#if defined STM32F1
+    __AFIO_CLK_ENABLE();
 
 
+    GPIO_Config.Pin = GPIO_PIN_8;
+#elif defined STM32F4
+    GPIO_Config.Alternate = GPIO_AF2_TIM3;
+    GPIO_Config.Pin = GPIO_PIN_6;
+#endif
     HAL_GPIO_Init(GPIOA, &GPIO_Config);
     HAL_GPIO_Init(GPIOA, &GPIO_Config);
 }
 }
 
 
@@ -26,7 +33,11 @@ void initTimers()
 
 
     TIM_Handle.Instance = TIM3;
     TIM_Handle.Instance = TIM3;
     // 10 kHz timer.
     // 10 kHz timer.
+#if defined STM32F1
+    TIM_Handle.Init.Prescaler = (uint16_t)(HAL_RCC_GetSysClockFreq() / 10000) - 1;
+#elif defined STM32F4
     TIM_Handle.Init.Prescaler = (uint16_t)(2 * HAL_RCC_GetSysClockFreq() / 10000) - 1;
     TIM_Handle.Init.Prescaler = (uint16_t)(2 * HAL_RCC_GetSysClockFreq() / 10000) - 1;
+#endif
     // 10000 / 5000 = 1 Hz blinking.
     // 10000 / 5000 = 1 Hz blinking.
     TIM_Handle.Init.Period = 5000;
     TIM_Handle.Init.Period = 5000;
     TIM_Handle.Init.ClockDivision = 0;
     TIM_Handle.Init.ClockDivision = 0;
@@ -43,8 +54,13 @@ void initTimers()
     TIM_OCConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
     TIM_OCConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
     TIM_OCConfig.OCFastMode = TIM_OCFAST_DISABLE;
     TIM_OCConfig.OCFastMode = TIM_OCFAST_DISABLE;
 
 
+#if defined STM32F1
+    HAL_TIM_PWM_ConfigChannel(&TIM_Handle, &TIM_OCConfig, TIM_CHANNEL_3);
+    HAL_TIM_PWM_Start(&TIM_Handle, TIM_CHANNEL_3);
+#elif defined STM32F4
     HAL_TIM_PWM_ConfigChannel(&TIM_Handle, &TIM_OCConfig, TIM_CHANNEL_1);
     HAL_TIM_PWM_ConfigChannel(&TIM_Handle, &TIM_OCConfig, TIM_CHANNEL_1);
     HAL_TIM_PWM_Start(&TIM_Handle, TIM_CHANNEL_1);
     HAL_TIM_PWM_Start(&TIM_Handle, TIM_CHANNEL_1);
+#endif
 }
 }
 
 
 static void initClock(void)
 static void initClock(void)
@@ -53,8 +69,59 @@ static void initClock(void)
     RCC_OscInitTypeDef RCC_OscInitStruct;
     RCC_OscInitTypeDef RCC_OscInitStruct;
 
 
     __HAL_RCC_PWR_CLK_ENABLE();
     __HAL_RCC_PWR_CLK_ENABLE();
+
+#if defined STM32F1
+    uint8_t fLatency;
+
+    RCC_OscInitStruct.OscillatorType  = RCC_OSCILLATORTYPE_HSE;
+    RCC_OscInitStruct.HSEState = RCC_HSE_ON;
+    RCC_OscInitStruct.LSEState = RCC_LSE_OFF;
+    RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
+    RCC_OscInitStruct.HSICalibrationValue = 0;
+    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
+    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
+
+# if (defined STM32F100xB) || (defined STM32F100xE)
+    // 8 MHz * 3 = 24 MHz SYSCLK
+    RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
+    RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL3;
+    fLatency = FLASH_LATENCY_0;
+# elif (defined STM32F101x6) || (defined STM32F101xB) || (defined STM32F101xE) || (defined STM32F101xG)
+    // 8 MHz / 2 * 9 = 36 MHz SYSCLK
+    RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV2;
+    RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
+    fLatency = FLASH_LATENCY_1;
+# elif (defined STM32F102x6) || (defined STM32F102xB)
+    // 8 MHz * 6 = 48 MHz SYSCLK
+    RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
+    RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
+    fLatency = FLASH_LATENCY_1;
+# elif (defined STM32F103x6) || (defined STM32F103xB) || (defined STM32F103xE) || (defined STM32F103xG)
+    // 8 MHz * 9 = 72 MHz SYSCLK
+    RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
+    RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
+    fLatency = FLASH_LATENCY_2;
+# elif (defined STM32F105xC) || (defined STM32F107xC)
+    // 8 MHz * 9 = 72 MHz SYSCLK
+    RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
+    RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
+    fLatency = FLASH_LATENCY_2;
+# endif
+
+    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.APB2CLKDivider = RCC_HCLK_DIV1;
+    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
+
+    HAL_RCC_ClockConfig(&RCC_ClkInitStruct, fLatency);
+
+#elif defined STM32F4
     __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
     __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
 
 
+    // 8 MHz * 336 / 8 / 2 = 168 MHz SYSCLK
     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
     RCC_OscInitStruct.HSEState = RCC_HSE_ON;
     RCC_OscInitStruct.HSEState = RCC_HSE_ON;
     RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
     RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
@@ -76,6 +143,7 @@ static void initClock(void)
     {
     {
         __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
         __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
     }
     }
+#endif
 }
 }
 
 
 void initAll(void)
 void initAll(void)

+ 0 - 30
stm32-blinky/stm32f10x_conf.h

@@ -1,30 +0,0 @@
-#ifndef __STM32F10x_CONF_H
-#define __STM32F10x_CONF_H
-
-/* Uncomment/Comment the line below to enable/disable peripheral header file inclusion */
-
-// #include "stm32f10x_adc.h"
-// #include "stm32f10x_bkp.h"
-// #include "stm32f10x_can.h"
-// #include "stm32f10x_cec.h"
-// #include "stm32f10x_crc.h"
-// #include "stm32f10x_dac.h"
-// #include "stm32f10x_dbgmcu.h"
-// #include "stm32f10x_dma.h"
-// #include "stm32f10x_exti.h"
-// #include "stm32f10x_flash.h"
-// #include "stm32f10x_fsmc.h"
- #include "stm32f10x_gpio.h"
-// #include "stm32f10x_i2c.h"
-// #include "stm32f10x_iwdg.h"
-// #include "stm32f10x_pwr.h"
- #include "stm32f10x_rcc.h"
-// #include "stm32f10x_rtc.h"
-// #include "stm32f10x_sdio.h"
-// #include "stm32f10x_spi.h"
- #include "stm32f10x_tim.h"
-// #include "stm32f10x_usart.h"
-// #include "stm32f10x_wwdg.h"
- #include "stm32f10x_misc.h"
- 
-#endif

+ 367 - 0
stm32-blinky/stm32f1xx_hal_conf.h

@@ -0,0 +1,367 @@
+/**
+  ******************************************************************************
+  * @file    stm32f1xx_hal_conf.h
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    15-December-2014
+  * @brief   HAL configuration template file.
+  *          This file should be copied to the application folder and renamed
+  *          to stm32f1xx_hal_conf.h.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 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 __STM32F1xx_HAL_CONF_H
+#define __STM32F1xx_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_CEC_MODULE_ENABLED
+#define HAL_CORTEX_MODULE_ENABLED
+// #define HAL_CRC_MODULE_ENABLED
+// #define HAL_DAC_MODULE_ENABLED
+#define HAL_DMA_MODULE_ENABLED
+// #define HAL_ETH_MODULE_ENABLED
+#define HAL_FLASH_MODULE_ENABLED
+#define HAL_GPIO_MODULE_ENABLED
+// #define HAL_HCD_MODULE_ENABLED
+// #define HAL_I2C_MODULE_ENABLED
+// #define HAL_I2S_MODULE_ENABLED
+// #define HAL_IRDA_MODULE_ENABLED
+// #define HAL_IWDG_MODULE_ENABLED
+// #define HAL_NAND_MODULE_ENABLED
+// #define HAL_NOR_MODULE_ENABLED
+// #define HAL_PCCARD_MODULE_ENABLED
+// #define HAL_PCD_MODULE_ENABLED
+#define HAL_PWR_MODULE_ENABLED
+#define HAL_RCC_MODULE_ENABLED
+// #define HAL_RTC_MODULE_ENABLED
+// #define HAL_SD_MODULE_ENABLED
+// #define HAL_SMARTCARD_MODULE_ENABLED
+// #define HAL_SPI_MODULE_ENABLED
+// #define HAL_SRAM_MODULE_ENABLED
+#define HAL_TIM_MODULE_ENABLED
+// #define HAL_UART_MODULE_ENABLED
+// #define HAL_USART_MODULE_ENABLED
+// #define HAL_WWDG_MODULE_ENABLED
+
+/* ########################## Oscillator 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) 
+#if defined(USE_STM3210C_EVAL)
+  #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
+#else
+  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
+#endif
+#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)8000000) /*!< Value of the Internal oscillator in Hz*/
+#endif /* HSI_VALUE */
+
+/**
+  * @brief External Low Speed oscillator (LSE) value.
+  *        This value is used by the UART, RTC HAL module to compute the system frequency
+  */
+#if !defined  (LSE_VALUE)
+  #define LSE_VALUE    ((uint32_t)32768) /*!< Value of the External oscillator in Hz*/
+#endif /* LSE_VALUE */
+
+   
+#if !defined  (LSE_STARTUP_TIMEOUT)
+  #define LSE_STARTUP_TIMEOUT    ((uint32_t)5000)   /*!< Time out for LSE start up, in ms */
+#endif /* HSE_STARTUP_TIMEOUT */
+
+   
+/* 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)0x000F)    /*!< tick interrupt priority */            
+#define  USE_RTOS                     0     
+#define  PREFETCH_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)8)       /* 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 "stm32f1xx_hal_rcc.h"
+#endif /* HAL_RCC_MODULE_ENABLED */
+
+#ifdef HAL_GPIO_MODULE_ENABLED
+ #include "stm32f1xx_hal_gpio.h"
+#endif /* HAL_GPIO_MODULE_ENABLED */
+   
+#ifdef HAL_DMA_MODULE_ENABLED
+  #include "stm32f1xx_hal_dma.h"
+#endif /* HAL_DMA_MODULE_ENABLED */
+   
+#ifdef HAL_ETH_MODULE_ENABLED
+  #include "stm32f1xx_hal_eth.h"
+#endif /* HAL_ETH_MODULE_ENABLED */  
+   
+#ifdef HAL_CAN_MODULE_ENABLED
+ #include "stm32f1xx_hal_can.h"
+#endif /* HAL_CAN_MODULE_ENABLED */
+
+#ifdef HAL_CEC_MODULE_ENABLED
+ #include "stm32f1xx_hal_cec.h"
+#endif /* HAL_CEC_MODULE_ENABLED */
+
+#ifdef HAL_CORTEX_MODULE_ENABLED
+ #include "stm32f1xx_hal_cortex.h"
+#endif /* HAL_CORTEX_MODULE_ENABLED */
+
+#ifdef HAL_ADC_MODULE_ENABLED
+ #include "stm32f1xx_hal_adc.h"
+#endif /* HAL_ADC_MODULE_ENABLED */
+
+#ifdef HAL_CRC_MODULE_ENABLED
+ #include "stm32f1xx_hal_crc.h"
+#endif /* HAL_CRC_MODULE_ENABLED */
+
+#ifdef HAL_DAC_MODULE_ENABLED
+ #include "stm32f1xx_hal_dac.h"
+#endif /* HAL_DAC_MODULE_ENABLED */
+
+#ifdef HAL_FLASH_MODULE_ENABLED
+ #include "stm32f1xx_hal_flash.h"
+#endif /* HAL_FLASH_MODULE_ENABLED */
+
+#ifdef HAL_SRAM_MODULE_ENABLED
+ #include "stm32f1xx_hal_sram.h"
+#endif /* HAL_SRAM_MODULE_ENABLED */
+
+#ifdef HAL_NOR_MODULE_ENABLED
+ #include "stm32f1xx_hal_nor.h"
+#endif /* HAL_NOR_MODULE_ENABLED */
+
+#ifdef HAL_I2C_MODULE_ENABLED
+ #include "stm32f1xx_hal_i2c.h"
+#endif /* HAL_I2C_MODULE_ENABLED */
+
+#ifdef HAL_I2S_MODULE_ENABLED
+ #include "stm32f1xx_hal_i2s.h"
+#endif /* HAL_I2S_MODULE_ENABLED */
+
+#ifdef HAL_IWDG_MODULE_ENABLED
+ #include "stm32f1xx_hal_iwdg.h"
+#endif /* HAL_IWDG_MODULE_ENABLED */
+
+#ifdef HAL_PWR_MODULE_ENABLED
+ #include "stm32f1xx_hal_pwr.h"
+#endif /* HAL_PWR_MODULE_ENABLED */
+
+#ifdef HAL_RTC_MODULE_ENABLED
+ #include "stm32f1xx_hal_rtc.h"
+#endif /* HAL_RTC_MODULE_ENABLED */
+
+#ifdef HAL_PCCARD_MODULE_ENABLED
+ #include "stm32f1xx_hal_pccard.h"
+#endif /* HAL_PCCARD_MODULE_ENABLED */ 
+
+#ifdef HAL_SD_MODULE_ENABLED
+ #include "stm32f1xx_hal_sd.h"
+#endif /* HAL_SD_MODULE_ENABLED */  
+
+#ifdef HAL_NAND_MODULE_ENABLED
+ #include "stm32f1xx_hal_nand.h"
+#endif /* HAL_NAND_MODULE_ENABLED */     
+
+#ifdef HAL_SPI_MODULE_ENABLED
+ #include "stm32f1xx_hal_spi.h"
+#endif /* HAL_SPI_MODULE_ENABLED */
+
+#ifdef HAL_TIM_MODULE_ENABLED
+ #include "stm32f1xx_hal_tim.h"
+#endif /* HAL_TIM_MODULE_ENABLED */
+
+#ifdef HAL_UART_MODULE_ENABLED
+ #include "stm32f1xx_hal_uart.h"
+#endif /* HAL_UART_MODULE_ENABLED */
+
+#ifdef HAL_USART_MODULE_ENABLED
+ #include "stm32f1xx_hal_usart.h"
+#endif /* HAL_USART_MODULE_ENABLED */
+
+#ifdef HAL_IRDA_MODULE_ENABLED
+ #include "stm32f1xx_hal_irda.h"
+#endif /* HAL_IRDA_MODULE_ENABLED */
+
+#ifdef HAL_SMARTCARD_MODULE_ENABLED
+ #include "stm32f1xx_hal_smartcard.h"
+#endif /* HAL_SMARTCARD_MODULE_ENABLED */
+
+#ifdef HAL_WWDG_MODULE_ENABLED
+ #include "stm32f1xx_hal_wwdg.h"
+#endif /* HAL_WWDG_MODULE_ENABLED */
+
+#ifdef HAL_PCD_MODULE_ENABLED
+ #include "stm32f1xx_hal_pcd.h"
+#endif /* HAL_PCD_MODULE_ENABLED */
+
+
+#ifdef HAL_HCD_MODULE_ENABLED
+ #include "stm32f1xx_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 /* __STM32F1xx_HAL_CONF_H */
+
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/