f4.cmake 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. function(stm32f4_get_type DEVICE TYPE)
  22. set(INDEX 0)
  23. foreach(C_TYPE ${STM32F4_TYPES})
  24. list(GET STM32F4_TYPE_MATCH ${INDEX} REGEXP)
  25. if(DEVICE MATCHES ${REGEXP})
  26. set(RESULT_TYPE ${C_TYPE})
  27. endif()
  28. math(EXPR INDEX "${INDEX}+1")
  29. endforeach()
  30. if(NOT RESULT_TYPE)
  31. message(FATAL_ERROR "Invalid/unsupported STM32F4 device: ${DEVICE}")
  32. endif()
  33. set(${TYPE} ${RESULT_TYPE} PARENT_SCOPE)
  34. endfunction()
  35. function(stm32f4_memory_size DEVICE FLASH_SIZE RAM_SIZE CCRAM_SIZE)
  36. string(REGEX REPLACE "^F4[0-9][0-9].([8BCDEGHI])$" "\\1" SIZE_CODE ${DEVICE})
  37. if(SIZE_CODE STREQUAL "8")
  38. set(FLASH "64K")
  39. elseif(SIZE_CODE STREQUAL "B")
  40. set(FLASH "128K")
  41. elseif(SIZE_CODE STREQUAL "C")
  42. set(FLASH "256K")
  43. elseif(SIZE_CODE STREQUAL "D")
  44. set(FLASH "384K")
  45. elseif(SIZE_CODE STREQUAL "E")
  46. set(FLASH "512K")
  47. elseif(SIZE_CODE STREQUAL "G")
  48. set(FLASH "1024K")
  49. elseif(SIZE_CODE STREQUAL "H")
  50. set(FLASH "1536K")
  51. elseif(SIZE_CODE STREQUAL "I")
  52. set(FLASH "2048K")
  53. else()
  54. set(FLASH "64K")
  55. message(WARNING "Unknow flash size for device ${DEVICE}")
  56. endif()
  57. stm32f4_get_type(${DEVICE} TYPE)
  58. list(FIND STM32F4_TYPES ${TYPE} TYPE_INDEX)
  59. list(GET STM32F4_RAM_SIZES ${TYPE_INDEX} RAM)
  60. list(GET STM32F4_CCRAM_SIZES ${TYPE_INDEX} CCRAM)
  61. set(${FLASH_SIZE} ${FLASH} PARENT_SCOPE)
  62. set(${RAM_SIZE} ${RAM} PARENT_SCOPE)
  63. set(${CCRAM_SIZE} ${CCRAM} PARENT_SCOPE)
  64. endfunction()
  65. function(stm32f4_configure_compiler TARGET)
  66. stm32_get_chip(${TARGET} FAMILY DEVICE)
  67. stm32f4_get_type(${DEVICE} TYPE)
  68. target_compile_options(${TARGET} PRIVATE
  69. -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
  70. )
  71. target_link_options(${TARGET} PRIVATE
  72. -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
  73. )
  74. target_compile_definitions(${TARGET} PRIVATE
  75. STM32F4
  76. STM32F${TYPE}
  77. )
  78. endfunction()