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

Added support for fetching MP1 CMSIS and HAL

Julien JEMINE 4 лет назад
Родитель
Сommit
c025c59812

+ 14 - 1
cmake/FindCMSIS.cmake

@@ -24,6 +24,11 @@ if(STM32WL IN_LIST CMSIS_FIND_COMPONENTS)
     list(APPEND CMSIS_FIND_COMPONENTS STM32WL_M4 STM32WL_M0PLUS)
 endif()
 
+if(STM32MP1 IN_LIST CMSIS_FIND_COMPONENTS)
+    list(REMOVE_ITEM CMSIS_FIND_COMPONENTS STM32MP1)
+    list(APPEND CMSIS_FIND_COMPONENTS STM32MP1_M4)
+endif()
+
 list(REMOVE_DUPLICATES CMSIS_FIND_COMPONENTS)
 
 # This section fills the RTOS or family components list
@@ -218,9 +223,17 @@ foreach(COMP ${CMSIS_FIND_COMPONENTS_FAMILIES})
         stm32_get_chip_type(${FAMILY} ${DEVICE} TYPE)
         string(TOLOWER ${DEVICE} DEVICE_L)
         string(TOLOWER ${TYPE} TYPE_L)
+
+        set(STARTUP_NAMES startup_stm32${TYPE_L}.s startup_stm32${TYPE_L}${CORE_Ucm}.s)
+        if(${FAMILY} STREQUAL "MP1")
+            # There are stm32mp15?axx.s and stm32mp15?cxx.s files but no stm32mp15?dxx.s nor stm32mp15?fxx.s. No idea why.
+            # I think that stm32mp15xx.s should be compatible with all stm32mp15 devices anyway.
+            # This might need refinement if devices other stm32mp15 are released.
+            list(APPEND STARTUP_NAMES startup_stm32mp15xx.s)
+        endif()
         
         find_file(CMSIS_${FAMILY}${CORE_U}_${TYPE}_STARTUP
-            NAMES startup_stm32${TYPE_L}.s startup_stm32${TYPE_L}${CORE_Ucm}.s
+            NAMES ${STARTUP_NAMES}
             PATHS "${CMSIS_${FAMILY}${CORE_U}_PATH}/Source/Templates/gcc"
             NO_DEFAULT_PATH
         )

+ 6 - 1
cmake/FindHAL.cmake

@@ -279,6 +279,11 @@ if(STM32WL IN_LIST HAL_FIND_COMPONENTS_FAMILIES)
     list(APPEND HAL_FIND_COMPONENTS_FAMILIES STM32WL_M4 STM32WL_M0PLUS)
 endif()
 
+if(STM32MP1 IN_LIST HAL_FIND_COMPONENTS_FAMILIES)
+    list(REMOVE_ITEM HAL_FIND_COMPONENTS_FAMILIES STM32MP1)
+    list(APPEND HAL_FIND_COMPONENTS_FAMILIES STM32MP1_M4)
+endif()
+
 list(REMOVE_DUPLICATES HAL_FIND_COMPONENTS_FAMILIES)
 
 # when no explicit driver and driver_ll is given to find_component(HAL )
@@ -310,7 +315,7 @@ foreach(COMP ${HAL_FIND_COMPONENTS_FAMILIES})
         
     set(FAMILY ${CMAKE_MATCH_1})
     string(TOLOWER ${FAMILY} FAMILY_L)
-    
+
     if((NOT STM32_HAL_${FAMILY}_PATH) AND (NOT STM32_CUBE_${FAMILY}_PATH) AND (DEFINED ENV{STM32_CUBE_${FAMILY}_PATH}))
         set(STM32_CUBE_${FAMILY}_PATH $ENV{STM32_CUBE_${FAMILY}_PATH} CACHE PATH "Path to STM32Cube${FAMILY}")
         message(STATUS "ENV STM32_CUBE_${FAMILY}_PATH specified, using STM32_CUBE_${FAMILY}_PATH: ${STM32_CUBE_${FAMILY}_PATH}")

+ 5 - 1
cmake/stm32/common.cmake

@@ -5,7 +5,7 @@ set(STM32_SUPPORTED_FAMILIES_LONG_NAME
     STM32L0 STM32L1 STM32L4 STM32L5
     STM32U5
     STM32WB_M4 STM32WL_M4 STM32WL_M0PLUS
-    STM32MP1 )
+    STM32MP1_M4 )
 
 foreach(FAMILY ${STM32_SUPPORTED_FAMILIES_LONG_NAME})
     # append short names (F0, F1, H7_M4, ...) to STM32_SUPPORTED_FAMILIES_SHORT_NAME
@@ -160,6 +160,8 @@ function(stm32_get_cores CORES)
             set(${CORES} M4 PARENT_SCOPE)
         elseif(${ARG_FAMILY} STREQUAL "WL")
             set(${CORES} M4 M0PLUS PARENT_SCOPE)
+        elseif(${ARG_FAMILY} STREQUAL "MP1")
+            set(${CORES} M4 PARENT_SCOPE)
         else()
             set(${CORES} "" PARENT_SCOPE)
         endif()
@@ -174,6 +176,8 @@ function(stm32_get_cores CORES)
     elseif(${ARG_FAMILY} STREQUAL "WB")
         # note STM32WB have an M0 core but in current state of the art it runs ST stacks and is not needed/allowed to build for customer
         set(CORE_LIST M4)
+    elseif(${ARG_FAMILY} STREQUAL "MP1")
+        set(CORE_LIST M4)
     elseif(${ARG_FAMILY} STREQUAL "WL")
         stm32wl_get_device_cores(${ARG_DEVICE} ${ARG_TYPE} CORE_LIST)
     endif()

+ 12 - 12
cmake/stm32/devices.cmake

@@ -1095,18 +1095,18 @@ set(STM32_ALL_DEVICES
     L562RE
     L562VE
     L562ZE
-    MP151A
-    MP151C
-    MP151D
-    MP151F
-    MP153A
-    MP153C
-    MP153D
-    MP153F
-    MP157A
-    MP157C
-    MP157D
-    MP157F
+    MP151AA
+    MP151CA
+    MP151DA
+    MP151FA
+    MP153AA
+    MP153CA
+    MP153DA
+    MP153FA
+    MP157AA
+    MP157CA
+    MP157DA
+    MP157FA
     U575CG
     U575CI
     U585CI

+ 6 - 6
cmake/stm32/mp1.cmake

@@ -4,9 +4,9 @@ set(STM32_MP1_TYPES
     MP157Axx MP157Cxx MP157Dxx MP157Fxx)
 
 set(STM32_MP1_TYPE_MATCH
-    "MP151AA." "MP151CA." "MP151DA." "MP151FA."  
-    "MP153AA." "MP153CA." "MP153DA." "MP153FA."
-    "MP157AA." "MP157CA." "MP157DA." "MP157FA.")
+    "MP151AA.?" "MP151CA.?" "MP151DA.?" "MP151FA.?"  
+    "MP153AA.?" "MP153CA.?" "MP153DA.?" "MP153FA.?"
+    "MP157AA.?" "MP157CA.?" "MP157DA.?" "MP157FA.?")
 
 set(STM32_MP1_RAM_SIZES
     384K 384K 384K 384K
@@ -20,7 +20,7 @@ set(STM32_MP1_CCRAM_SIZES
 
 stm32_util_create_family_targets(MP1 M4)
 
-target_compile_options(STM32::MP1 INTERFACE -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard)
-target_link_options(STM32::MP1 INTERFACE -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard)
-target_compile_definitions(STM32::MP1 INTERFACE -DCORE_CM4)
+target_compile_options(STM32::MP1::M4 INTERFACE -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard)
+target_link_options(STM32::MP1::M4 INTERFACE -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard)
+target_compile_definitions(STM32::MP1::M4 INTERFACE -DCORE_CM4)
 

+ 60 - 55
cmake/stm32/utilities.cmake

@@ -44,10 +44,11 @@ endfunction()
 
 include(FetchContent)
 
-set(STM32_FETCH_FAMILIES       F0      F1      F2      F3      F4       F7      G0      G4      H7       L0      L1      L4      L5     U5     WB      WL    )
-set(STM32_FETCH_CUBE_VERSIONS  v1.11.2 v1.8.4  v1.9.3  v1.11.2 v1.26.1  v1.16.1 v1.4.1  v1.4.0  v1.9.0   v1.12.0 v1.10.3 v1.17.0 v1.4.0 v1.0.0 v1.12.0 v1.1.0)
-set(STM32_FETCH_CMSIS_VERSIONS v2.3.5  v4.3.3  v2.2.5  v2.3.5  v2.6.6   v1.2.6  v1.4.0  v1.2.1  v1.10.0  v1.9.1  v2.3.2  v1.7.1  v1.0.4 v1.0.0 v1.9.0  v1.1.0)
-set(STM32_FETCH_HAL_VERSIONS   v1.7.5  v1.1.8  v1.2.7  v1.5.5  v1.7.12  v1.2.9  v1.4.1  v1.2.1  v1.10.0  v1.10.4 v1.4.4  v1.13.0 v1.0.4 v1.0.0 v1.9.0  v1.1.0)
+# A CMSIS or HAL driver can specify 'cube' as version number to indicate that the driver is taken from the Cube repository
+set(STM32_FETCH_FAMILIES       F0      F1      F2      F3      F4       F7      G0      G4      H7       L0      L1      L4      L5     MP1    U5     WB      WL    )
+set(STM32_FETCH_CUBE_VERSIONS  v1.11.2 v1.8.4  v1.9.3  v1.11.2 v1.26.1  v1.16.1 v1.4.1  v1.4.0  v1.9.0   v1.12.0 v1.10.3 v1.17.0 v1.4.0 1.5.0  v1.0.0 v1.12.0 v1.1.0)
+set(STM32_FETCH_CMSIS_VERSIONS v2.3.5  v4.3.3  v2.2.5  v2.3.5  v2.6.6   v1.2.6  v1.4.0  v1.2.1  v1.10.0  v1.9.1  v2.3.2  v1.7.1  v1.0.4 cube   v1.0.0 v1.9.0  v1.1.0)
+set(STM32_FETCH_HAL_VERSIONS   v1.7.5  v1.1.8  v1.2.7  v1.5.5  v1.7.12  v1.2.9  v1.4.1  v1.2.1  v1.10.0  v1.10.4 v1.4.4  v1.13.0 v1.0.4 cube   v1.0.0 v1.9.0  v1.1.0)
 
 FetchContent_Declare(
     STM32-CMSIS
@@ -69,18 +70,29 @@ foreach(FAMILY ${STM32_FETCH_FAMILIES})
 		GIT_TAG        ${CUBE_VERSION}
 		GIT_PROGRESS   TRUE
 	)
-	FetchContent_Declare(
-		STM32-CMSIS-${FAMILY}
-		GIT_REPOSITORY https://github.com/STMicroelectronics/cmsis_device_${FAMILY_L}/
-		GIT_TAG        ${CMSIS_VERSION}
-		GIT_PROGRESS   TRUE
-	)
-	FetchContent_Declare(
-		STM32-HAL-${FAMILY}
-		GIT_REPOSITORY https://github.com/STMicroelectronics/stm32${FAMILY_L}xx_hal_driver/
-		GIT_TAG        ${HAL_VERSION}
-		GIT_PROGRESS   TRUE
-	)
+
+    if(CMSIS_VERSION STREQUAL cube)
+        set(STM32_USE_CMSIS_FROM_CUBE_${FAMILY} ON)
+    else()
+        FetchContent_Declare(
+            STM32-CMSIS-${FAMILY}
+            GIT_REPOSITORY https://github.com/STMicroelectronics/cmsis_device_${FAMILY_L}/
+            GIT_TAG        ${CMSIS_VERSION}
+            GIT_PROGRESS   TRUE
+        )
+    endif()
+    
+    if(HAL_VERSION STREQUAL cube)
+        set(STM32_USE_HAL_FROM_CUBE_${FAMILY} ON)
+    else()
+        FetchContent_Declare(
+            STM32-HAL-${FAMILY}
+            GIT_REPOSITORY https://github.com/STMicroelectronics/stm32${FAMILY_L}xx_hal_driver/
+            GIT_TAG        ${HAL_VERSION}
+            GIT_PROGRESS   TRUE
+        )
+    endif()
+    
 	math(EXPR IDX "${IDX} + 1")
 endforeach()
 
@@ -94,62 +106,55 @@ function(stm32_fetch_cube)
             continue()
         endif()
         
-		FetchContent_GetProperties(${CUBE_NAME} POPULATED CUBE_POPULATED)
-        if(NOT CUBE_POPULATED)
-            set(FETCHCONTENT_QUIET FALSE) # To see progress
-            FetchContent_Populate(${CUBE_NAME})
-        endif()
-        
+		FetchContent_MakeAvailable(${CUBE_NAME})
         set(STM32_CUBE_${FAMILY}_PATH ${${CUBE_NAME_L}_SOURCE_DIR} PARENT_SCOPE)
     endforeach()
 endfunction()
 
 function(stm32_fetch_cmsis)
 	if(NOT STM32_CMSIS_PATH)
-        if(NOT STM32-CMSIS_POPULATED)
-            set(FETCHCONTENT_QUIET FALSE) # To see progress
-            FetchContent_Populate(STM32-CMSIS)
-        endif()
-        
+        FetchContent_MakeAvailable(STM32-CMSIS)
         set(STM32_CMSIS_PATH ${stm32-cmsis_SOURCE_DIR} PARENT_SCOPE)
 	else()
 		message(INFO "STM32_CMSIS_PATH specified, skipping fetch for STM32-CMSIS")
 	endif()
+
     foreach(FAMILY ${ARGV})
-        set(CMSIS_NAME STM32-CMSIS-${FAMILY})
-        string(TOLOWER ${CMSIS_NAME} CMSIS_NAME_L)
-        
-        if(STM32_CMSIS_${FAMILY}_PATH)
-            message(INFO "STM32_CMSIS_${FAMILY}_PATH specified, skipping fetch for ${CMSIS_NAME}")
-            continue()
-        endif()
-        
-		FetchContent_GetProperties(${CMSIS_NAME_L} POPULATED CMSIS_POPULATED)
-        if(NOT CMSIS_POPULATED)
-            set(FETCHCONTENT_QUIET FALSE) # To see progress
-            FetchContent_Populate(${CMSIS_NAME})
+        if(STM32_USE_CMSIS_FROM_CUBE_${FAMILY})
+            stm32_fetch_cube(${FAMILY})
+            set(STM32_CMSIS_${FAMILY}_PATH ${STM32_CUBE_${FAMILY}_PATH}/Drivers/CMSIS/Device/ST/STM32${FAMILY}xx PARENT_SCOPE)
+        else()
+            set(CMSIS_NAME STM32-CMSIS-${FAMILY})
+            string(TOLOWER ${CMSIS_NAME} CMSIS_NAME_L)
+            
+            if(STM32_CMSIS_${FAMILY}_PATH)
+                message(INFO "STM32_CMSIS_${FAMILY}_PATH specified, skipping fetch for ${CMSIS_NAME}")
+                continue()
+            endif()
+            
+            FetchContent_MakeAvailable(${CMSIS_NAME})            
+            set(STM32_CMSIS_${FAMILY}_PATH ${${CMSIS_NAME_L}_SOURCE_DIR} PARENT_SCOPE)
         endif()
-        
-        set(STM32_CMSIS_${FAMILY}_PATH ${${CMSIS_NAME_L}_SOURCE_DIR} PARENT_SCOPE)
     endforeach()
 endfunction()
 
 function(stm32_fetch_hal)
     foreach(FAMILY ${ARGV})
-        set(HAL_NAME STM32-HAL-${FAMILY})
-        string(TOLOWER ${HAL_NAME} HAL_NAME_L)
-        
-        if(STM32_HAL_${FAMILY}_PATH)
-            message(INFO "STM32_HAL_${FAMILY}_PATH specified, skipping fetch for ${HAL_NAME}")
-            continue()
+        if(STM32_USE_HAL_FROM_CUBE_${FAMILY})
+            stm32_fetch_cube(${FAMILY})
+            message("Cube fetched for ${FAMILY} at ${STM32_CUBE_${FAMILY}_PATH}")
+            set(STM32_HAL_${FAMILY}_PATH ${STM32_CUBE_${FAMILY}_PATH}/Drivers/STM32${FAMILY}xx_HAL_Driver PARENT_SCOPE)
+        else()
+            set(HAL_NAME STM32-HAL-${FAMILY})
+            string(TOLOWER ${HAL_NAME} HAL_NAME_L)
+            
+            if(STM32_HAL_${FAMILY}_PATH)
+                message(INFO "STM32_HAL_${FAMILY}_PATH specified, skipping fetch for ${HAL_NAME}")
+                continue()
+            endif()
+            
+            FetchContent_MakeAvailable(${HAL_NAME})
+            set(STM32_HAL_${FAMILY}_PATH ${${HAL_NAME_L}_SOURCE_DIR} PARENT_SCOPE)
         endif()
-        
-		FetchContent_GetProperties(${HAL_NAME} POPULATED HAL_POPULATED)
-        if(NOT HAL_POPULATED)
-            set(FETCHCONTENT_QUIET FALSE) # To see progress
-            FetchContent_Populate(${HAL_NAME})
-        endif()
-        
-        set(STM32_HAL_${FAMILY}_PATH ${${HAL_NAME_L}_SOURCE_DIR} PARENT_SCOPE)
     endforeach()
 endfunction()

+ 1 - 1
tests/fetch/CMakeLists.txt

@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.16)
 set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/stm32_gcc.cmake)
 
 if(NOT TEST_FAMILIES)
-    set(TEST_FAMILIES F0 F1 F2 F3 F4 F7 G0 G4 H7 L0 L1 L4 L5 U5 WB WL)
+    set(TEST_FAMILIES F0 F1 F2 F3 F4 F7 G0 G4 H7 L0 L1 L4 L5 MP1 U5 WB WL)
 endif()
 
 project(fetch-test C ASM)