Przeglądaj źródła

Changes in module to handle STM32 Family

Hish15 6 lat temu
rodzic
commit
dc18d0f3a3

+ 13 - 0
cmake/FindCMSIS.cmake

@@ -79,6 +79,19 @@ ELSEIF(STM32_FAMILY STREQUAL "F0")
     LIST(APPEND CMSIS_COMMON_HEADERS core_cm3.h)
     LIST(APPEND CMSIS_COMMON_HEADERS core_cm3.h)
     SET(CMSIS_DEVICE_HEADERS stm32f0xx.h system_stm32f0xx.h)
     SET(CMSIS_DEVICE_HEADERS stm32f0xx.h system_stm32f0xx.h)
     SET(CMSIS_DEVICE_SOURCES system_stm32f0xx.c)
     SET(CMSIS_DEVICE_SOURCES system_stm32f0xx.c)
+ELSEIF(STM32_FAMILY STREQUAL "H7")
+    IF(NOT STM32Cube_DIR)
+        SET(STM32Cube_DIR "/opt/STM32Cube_FW_H7_V1.3.0")
+        MESSAGE(STATUS "No STM32Cube_DIR specified, using default: " ${STM32Cube_DIR})
+    ENDIF()
+
+    LIST(APPEND CMSIS_COMMON_HEADERS core_cm7.h)
+    SET(CMSIS_DEVICE_HEADERS stm32h7xx.h system_stm32h7xx.h)
+    SET(CMSIS_DEVICE_SOURCES system_stm32h7xx.c)
+	IF(NOT CMSIS_STARTUP_SOURCE)
+        SET(CMSIS_STARTUP_SOURCE startup_stm32h${STM32_CHIP_TYPE_LOWER}.s)
+    ENDIF()
+	message(STATUS "CMSIS_STARTUP_SOURCE @@@@@@ ${CMSIS_STARTUP_SOURCE}")
 ELSEIF(STM32_FAMILY STREQUAL "L0")
 ELSEIF(STM32_FAMILY STREQUAL "L0")
     IF(NOT STM32Cube_DIR)
     IF(NOT STM32Cube_DIR)
         SET(STM32Cube_DIR "/opt/STM32Cube_FW_L0_V1.7.0")
         SET(STM32Cube_DIR "/opt/STM32Cube_FW_L0_V1.7.0")

+ 3 - 1
cmake/FindFreeRTOS.cmake

@@ -9,7 +9,9 @@ ELSEIF(STM32_FAMILY STREQUAL "F3")
 ELSEIF(STM32_FAMILY STREQUAL "F4")
 ELSEIF(STM32_FAMILY STREQUAL "F4")
 	SET(PORT_GCC_DIR_SUFFIX "CM4F")
 	SET(PORT_GCC_DIR_SUFFIX "CM4F")
 ELSEIF(STM32_FAMILY STREQUAL "F7")
 ELSEIF(STM32_FAMILY STREQUAL "F7")
-	SET(PORT_GCC_DIR_SUFFIX "CM7")
+    SET(PORT_GCC_DIR_SUFFIX "CM7")
+ELSEIF(STM32_FAMILY STREQUAL "H7")
+	SET(PORT_GCC_DIR_SUFFIX "CM7/r0p1")
 ELSEIF(STM32_FAMILY STREQUAL "L0")
 ELSEIF(STM32_FAMILY STREQUAL "L0")
 	SET(PORT_GCC_DIR_SUFFIX "CM0")
 	SET(PORT_GCC_DIR_SUFFIX "CM0")
 ELSEIF(STM32_FAMILY STREQUAL "L1")
 ELSEIF(STM32_FAMILY STREQUAL "L1")

+ 14 - 0
cmake/FindSTM32HAL.cmake

@@ -76,6 +76,20 @@ ELSEIF(STM32_FAMILY STREQUAL "F7")
 
 
     SET(HAL_PREFIX stm32f7xx_)
     SET(HAL_PREFIX stm32f7xx_)
 
 
+ELSEIF(STM32_FAMILY STREQUAL "H7")
+    SET(HAL_COMPONENTS adc can cec cortex crc cryp dac dcmi dma dma2d eth flash
+                       gpio hash hcd i2c i2s irda iwdg lptim ltdc nand nor pcd
+                       pwr qspi rcc rng rtc sai sd sdram smartcard spdifrx spi
+                       sram tim uart usart wwdg fmc sdmmc usb)
+
+    SET(HAL_REQUIRED_COMPONENTS cortex pwr rcc)
+
+    # Components that have _ex sources
+    SET(HAL_EX_COMPONENTS adc crc cryp dac dcmi dma flash hash i2c pcd
+                          pwr rcc rtc sai tim)
+
+    SET(HAL_PREFIX stm32h7xx_)
+
 ELSEIF(STM32_FAMILY STREQUAL "L0")
 ELSEIF(STM32_FAMILY STREQUAL "L0")
     SET(HAL_COMPONENTS adc comp cortex crc crs cryp dac dma exti firewall flash gpio i2c
     SET(HAL_COMPONENTS adc comp cortex crc crs cryp dac dma exti firewall flash gpio i2c
                        i2s irda iwdg lcd lptim lpuart pcd pwr rcc rng rtc smartcard
                        i2s irda iwdg lcd lptim lpuart pcd pwr rcc rng rtc smartcard

+ 8 - 0
cmake/FindSTM32LL.cmake

@@ -47,6 +47,14 @@ ELSEIF(STM32_FAMILY STREQUAL "F7")
     SET(LL_REQUIRED_COMPONENTS bus cortex pwr rcc system utils)
     SET(LL_REQUIRED_COMPONENTS bus cortex pwr rcc system utils)
 
 
     SET(LL_PREFIX stm32f7xx_)
     SET(LL_PREFIX stm32f7xx_)
+	
+ELSEIF(STM32_FAMILY STREQUAL "H7")
+    SET(LL_COMPONENTS	adc bus cortex crc dac dma2d dma exti gpio i2c i2s iwdg
+						lptim pwr rcc rng rtc spi system tim usart usb utils wwdg)
+
+    SET(LL_REQUIRED_COMPONENTS bus cortex pwr rcc system utils)
+
+    SET(LL_PREFIX stm32h7xx_)
 
 
 ELSEIF(STM32_FAMILY STREQUAL "L0")
 ELSEIF(STM32_FAMILY STREQUAL "L0")
     SET(LL_COMPONENTS	adc bus comp cortex crc crs dac dma exti gpio i2c i2s
     SET(LL_COMPONENTS	adc bus comp cortex crc crs dac dma exti gpio i2c i2s

+ 2 - 2
cmake/gcc_stm32.cmake

@@ -1,7 +1,7 @@
 GET_FILENAME_COMPONENT(STM32_CMAKE_DIR ${CMAKE_CURRENT_LIST_FILE} DIRECTORY)
 GET_FILENAME_COMPONENT(STM32_CMAKE_DIR ${CMAKE_CURRENT_LIST_FILE} DIRECTORY)
 SET(CMAKE_MODULE_PATH ${STM32_CMAKE_DIR} ${CMAKE_MODULE_PATH})
 SET(CMAKE_MODULE_PATH ${STM32_CMAKE_DIR} ${CMAKE_MODULE_PATH})
 
 
-SET(STM32_SUPPORTED_FAMILIES L0 L1 L4 F0 F1 F2 F3 F4 F7 CACHE INTERNAL "stm32 supported families")
+SET(STM32_SUPPORTED_FAMILIES L0 L1 L4 F0 F1 F2 F3 F4 F7 H7 CACHE INTERNAL "stm32 supported families")
 IF(STM32_CHIP)
 IF(STM32_CHIP)
 	 SET(STM32_CHIP "${STM32_CHIP}" CACHE STRING "STM32 chip to build for")
 	 SET(STM32_CHIP "${STM32_CHIP}" CACHE STRING "STM32 chip to build for")
 ENDIF()
 ENDIF()
@@ -24,7 +24,7 @@ IF(NOT STM32_FAMILY)
         SET(STM32_FAMILY "F1" CACHE INTERNAL "stm32 family")
         SET(STM32_FAMILY "F1" CACHE INTERNAL "stm32 family")
         MESSAGE(STATUS "Neither STM32_FAMILY nor STM32_CHIP specified, using default STM32_FAMILY: ${STM32_FAMILY}")
         MESSAGE(STATUS "Neither STM32_FAMILY nor STM32_CHIP specified, using default STM32_FAMILY: ${STM32_FAMILY}")
     ELSE()
     ELSE()
-        STRING(REGEX REPLACE "^[sS][tT][mM]32(([fF][0-47])|([lL][0-14])|([tT])|([wW])).+$" "\\1" STM32_FAMILY ${STM32_CHIP})
+        STRING(REGEX REPLACE "^[sS][tT][mM]32(([fF][0-47])|([hH]7)|([lL][0-14])|([tT])|([wW])).+$" "\\1" STM32_FAMILY ${STM32_CHIP})
         STRING(TOUPPER ${STM32_FAMILY} STM32_FAMILY)
         STRING(TOUPPER ${STM32_FAMILY} STM32_FAMILY)
         MESSAGE(STATUS "Selected STM32 family: ${STM32_FAMILY}")
         MESSAGE(STATUS "Selected STM32 family: ${STM32_FAMILY}")
     ENDIF()
     ENDIF()

+ 63 - 0
cmake/gcc_stm32h7.cmake

@@ -0,0 +1,63 @@
+SET(CMAKE_C_FLAGS "-mthumb -fno-builtin -mcpu=cortex-m7 -mfpu=fpv5-sp-d16 -mfloat-abi=softfp -Wall -std=gnu99 -ffunction-sections -fdata-sections -fomit-frame-pointer -mabi=aapcs -fno-unroll-loops -ffast-math -ftree-vectorize" CACHE INTERNAL "c compiler flags")
+SET(CMAKE_CXX_FLAGS "-mthumb -fno-builtin -mcpu=cortex-m7 -mfpu=fpv5-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-m7 -mfpu=fpv5-sp-d16 -mfloat-abi=softfp -x assembler-with-cpp" CACHE INTERNAL "asm compiler flags")
+
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--gc-sections -mthumb -mcpu=cortex-m7 -mfpu=fpv5-sp-d16 -mfloat-abi=softfp -mabi=aapcs" CACHE INTERNAL "executable linker flags")
+SET(CMAKE_MODULE_LINKER_FLAGS "-mthumb -mcpu=cortex-m7 -mfpu=fpv5-sp-d16 -mfloat-abi=softfp -mabi=aapcs" CACHE INTERNAL "module linker flags")
+SET(CMAKE_SHARED_LINKER_FLAGS "-mthumb -mcpu=cortex-m7 -mfpu=fpv5-sp-d16 -mfloat-abi=softfp -mabi=aapcs" CACHE INTERNAL "shared linker flags")
+SET(STM32_CHIP_TYPES 743xx 750xx 753xx CACHE INTERNAL "stm32h7 chip types")
+SET(STM32_CODES "743.." "750.." "753..")
+
+MACRO(STM32_GET_CHIP_TYPE CHIP CHIP_TYPE)
+    STRING(REGEX REPLACE "^[sS][tT][mM]32[hH](7[45][03].[BI]).*$" "\\1" STM32_CODE ${CHIP})
+    SET(INDEX 0)
+    FOREACH(C_TYPE ${STM32_CHIP_TYPES})
+        LIST(GET STM32_CODES ${INDEX} CHIP_TYPE_REGEXP)
+        IF(STM32_CODE MATCHES ${CHIP_TYPE_REGEXP})
+            SET(RESULT_TYPE ${C_TYPE})
+        ENDIF()
+        MATH(EXPR INDEX "${INDEX}+1")
+    ENDFOREACH()
+    SET(${CHIP_TYPE} ${RESULT_TYPE})
+ENDMACRO()
+
+MACRO(STM32_GET_CHIP_PARAMETERS CHIP FLASH_SIZE RAM_SIZE CCRAM_SIZE)
+    STRING(REGEX REPLACE "^[sS][tT][mM]32[hH](7[45][03].[BI]).*$" "\\1" STM32_CODE ${CHIP})
+    STRING(REGEX REPLACE "^[sS][tT][mM]32[hH]7[45][03].([BI]).*$" "\\1" STM32_SIZE_CODE ${CHIP})
+    
+    IF(STM32_SIZE_CODE STREQUAL "B")
+        SET(FLASH "128K")
+    ELSEIF(STM32_SIZE_CODE STREQUAL "I")
+        SET(FLASH "2048K")
+    ENDIF()
+    
+    STM32_GET_CHIP_TYPE(${CHIP} TYPE)
+    
+    IF(${TYPE} STREQUAL "743xx")
+        SET(RAM "1024K")
+    ELSEIF(${TYPE} STREQUAL "750xx")
+        SET(RAM "1024K")
+    ELSEIF(${TYPE} STREQUAL "753xx")
+        SET(RAM "1024K")
+    ENDIF()
+    
+    SET(${FLASH_SIZE} ${FLASH})
+    SET(${RAM_SIZE} ${RAM})
+    # First 64K of RAM are already CCM...
+    SET(${CCRAM_SIZE} "0K")
+ENDMACRO()
+
+FUNCTION(STM32_SET_CHIP_DEFINITIONS TARGET CHIP_TYPE)
+    LIST(FIND STM32_CHIP_TYPES ${CHIP_TYPE} TYPE_INDEX)
+    IF(TYPE_INDEX EQUAL -1)
+        MESSAGE(FATAL_ERROR "Invalid/unsupported STM32H7 chip type: ${CHIP_TYPE}")
+    ENDIF()
+    GET_TARGET_PROPERTY(TARGET_DEFS ${TARGET} COMPILE_DEFINITIONS)
+    IF(TARGET_DEFS)
+        SET(TARGET_DEFS "STM32H7;STM32H${CHIP_TYPE};${TARGET_DEFS}")
+    ELSE()
+        SET(TARGET_DEFS "STM32H7;STM32H${CHIP_TYPE}")
+    ENDIF()
+        
+    SET_TARGET_PROPERTIES(${TARGET} PROPERTIES COMPILE_DEFINITIONS "${TARGET_DEFS}")
+ENDFUNCTION()