f4.cmake 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. set(STM32F4_TYPES
  2. 401xC 401xE 405xx 407xx 410Cx 410Rx 410Tx 411xE
  3. 412Cx 412Rx 412Vx 412Zx 413xx 415xx 417xx 423xx
  4. 427xx 429xx 437xx 439xx 446xx 469xx 479xx
  5. )
  6. set(STM32F4_TYPE_MATCH
  7. "F401.[CB]" "F401.[ED]" "F405.." "F407.." "F410C." "F410R." "F410T." "F411.[CE]"
  8. "F412C." "F412R." "F412V." "F412Z." "F413.." "F415.." "F417.." "F423.."
  9. "F427.." "F429.." "F437.." "F439.." "F446.." "F469.." "F479.."
  10. )
  11. set(STM32F4_RAM_SIZES
  12. 64K 96K 128K 128K 32K 32K 32K 128K
  13. 256K 256K 256K 256K 256K 128K 128K 320K
  14. 192K 192K 192K 192K 128K 320K 320K
  15. )
  16. set(STM32F4_CCRAM_SIZES
  17. 0K 0K 64K 64K 0K 0K 0K 0K
  18. 0K 0K 0K 0K 64K 64K 64K 0K
  19. 64K 64K 64K 64K 0K 64K 64K
  20. )
  21. target_compile_options(STM32::F4 INTERFACE
  22. -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
  23. )
  24. target_link_options(STM32::F4 INTERFACE
  25. -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
  26. )
  27. target_compile_definitions(STM32::F4 INTERFACE
  28. STM32F4
  29. )
  30. foreach(TYPE ${STM32F4_TYPES})
  31. if(NOT (TARGET STM32::F4::${TYPE}))
  32. add_library(STM32::F4::${TYPE} INTERFACE IMPORTED)
  33. target_link_libraries(STM32::F4::${TYPE} INTERFACE STM32::F4)
  34. target_compile_definitions(STM32::F4::${TYPE} INTERFACE
  35. STM32F${TYPE}
  36. )
  37. endif()
  38. endforeach()
  39. function(stm32f4_get_type DEVICE TYPE)
  40. set(INDEX 0)
  41. foreach(C_TYPE ${STM32F4_TYPES})
  42. list(GET STM32F4_TYPE_MATCH ${INDEX} REGEXP)
  43. if(DEVICE MATCHES ${REGEXP})
  44. set(RESULT_TYPE ${C_TYPE})
  45. endif()
  46. math(EXPR INDEX "${INDEX}+1")
  47. endforeach()
  48. if(NOT RESULT_TYPE)
  49. message(FATAL_ERROR "Invalid/unsupported STM32F4 device: ${DEVICE}")
  50. endif()
  51. set(${TYPE} ${RESULT_TYPE} PARENT_SCOPE)
  52. endfunction()
  53. function(stm32f4_memory_info DEVICE
  54. FLASH_SIZE RAM_SIZE CCRAM_SIZE STACK_SIZE HEAP_SIZE
  55. FLASH_ORIGIN RAM_ORIGIN CCRAM_ORIGIN
  56. )
  57. string(REGEX REPLACE "^F4[0-9][0-9].([8BCDEGHI])$" "\\1" SIZE_CODE ${DEVICE})
  58. if(SIZE_CODE STREQUAL "8")
  59. set(FLASH "64K")
  60. elseif(SIZE_CODE STREQUAL "B")
  61. set(FLASH "128K")
  62. elseif(SIZE_CODE STREQUAL "C")
  63. set(FLASH "256K")
  64. elseif(SIZE_CODE STREQUAL "D")
  65. set(FLASH "384K")
  66. elseif(SIZE_CODE STREQUAL "E")
  67. set(FLASH "512K")
  68. elseif(SIZE_CODE STREQUAL "G")
  69. set(FLASH "1024K")
  70. elseif(SIZE_CODE STREQUAL "H")
  71. set(FLASH "1536K")
  72. elseif(SIZE_CODE STREQUAL "I")
  73. set(FLASH "2048K")
  74. else()
  75. set(FLASH "64K")
  76. message(WARNING "Unknow flash size for device ${DEVICE}")
  77. endif()
  78. stm32f4_get_type(${DEVICE} TYPE)
  79. list(FIND STM32F4_TYPES ${TYPE} TYPE_INDEX)
  80. list(GET STM32F4_RAM_SIZES ${TYPE_INDEX} RAM)
  81. list(GET STM32F4_CCRAM_SIZES ${TYPE_INDEX} CCRAM)
  82. set(${FLASH_SIZE} ${FLASH} PARENT_SCOPE)
  83. set(${RAM_SIZE} ${RAM} PARENT_SCOPE)
  84. set(${CCRAM_SIZE} ${CCRAM} PARENT_SCOPE)
  85. set(${STACK_SIZE} 0x400 PARENT_SCOPE)
  86. set(${HEAP_SIZE} 0x200 PARENT_SCOPE)
  87. set(${FLASH_ORIGIN} 0x8000000 PARENT_SCOPE)
  88. set(${RAM_ORIGIN} 0x20000000 PARENT_SCOPE)
  89. set(${CCRAM_ORIGIN} 0x10000000 PARENT_SCOPE)
  90. endfunction()