元驭机器人元驭机器人Hall 传感器教学下载原文件
1cmake_minimum_required(VERSION 3.22)23set(CMAKE_C_STANDARD 11)4set(CMAKE_C_STANDARD_REQUIRED ON)5set(CMAKE_C_EXTENSIONS ON)67if(NOT CMAKE_BUILD_TYPE)8    set(CMAKE_BUILD_TYPE "Debug")9endif()1011if(NOT CMAKE_TOOLCHAIN_FILE)12    set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/cmake/gcc-arm-none-eabi.cmake"13        CACHE FILEPATH "ARM GCC toolchain" FORCE)14endif()1516set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)17if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.24")18    set(CMAKE_COLOR_DIAGNOSTICS ON)19endif()2021set(CMAKE_PROJECT_NAME Hall_Senser)2223project(${CMAKE_PROJECT_NAME} C ASM)2425add_executable(${CMAKE_PROJECT_NAME})2627set(GD32_CMSIS "${CMAKE_CURRENT_SOURCE_DIR}/Firmware/CMSIS")28set(GD32_SPL   "${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32E23x_standard_peripheral")2930# New src/*.c and SPL drivers are picked up on the next build (Ninja/Make).31file(GLOB HALL_APP_SOURCES CONFIGURE_DEPENDS32    "${CMAKE_CURRENT_SOURCE_DIR}/src/*.c"33)34file(GLOB HALL_SPL_SOURCES CONFIGURE_DEPENDS35    "${GD32_SPL}/Source/*.c"36)3738target_sources(${CMAKE_PROJECT_NAME} PRIVATE39    gcc_startup/startup_gd32e23x.S40    ${GD32_CMSIS}/GD/GD32E23x/Source/system_gd32e23x.c41    ${GD32_CMSIS}/GD/GD32E23x/Source/syscalls.c42    ${HALL_SPL_SOURCES}43    ${HALL_APP_SOURCES}44    RTT/SEGGER_RTT.c45    RTT/SEGGER_RTT_printf.c46)4748target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE49    inc50    RTT51    ${GD32_CMSIS}52    ${GD32_CMSIS}/GD/GD32E23x/Include53    ${GD32_SPL}/Include54)5556# Same macros as the GD32EB project (.cproject, GD32E230G6U6TR).57target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE58    GD32E23059    USE_STDPERIPH_DRIVER60)6162set_source_files_properties(gcc_startup/startup_gd32e23x.S PROPERTIES LANGUAGE ASM)6364file(TO_CMAKE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/ldscripts/gd32e23x_flash.ld" HALL_LINKER_SCRIPT)65target_link_options(${CMAKE_PROJECT_NAME} PRIVATE66    -T "${HALL_LINKER_SCRIPT}"67    "LINKER:-Map=$<TARGET_FILE_DIR:${CMAKE_PROJECT_NAME}>/${CMAKE_PROJECT_NAME}.map"68)69set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES70    LINK_DEPENDS "${HALL_LINKER_SCRIPT}"71)7273if(NOT CMAKE_OBJCOPY)74    message(FATAL_ERROR "CMAKE_OBJCOPY is not set (arm-none-eabi-objcopy not found)")75endif()76add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD77    COMMAND "${CMAKE_OBJCOPY}" -O binary78            "$<TARGET_FILE:${CMAKE_PROJECT_NAME}>"79            "$<TARGET_FILE_DIR:${CMAKE_PROJECT_NAME}>/${CMAKE_PROJECT_NAME}.bin"80    COMMAND "${CMAKE_OBJCOPY}" -O ihex81            "$<TARGET_FILE:${CMAKE_PROJECT_NAME}>"82            "$<TARGET_FILE_DIR:${CMAKE_PROJECT_NAME}>/${CMAKE_PROJECT_NAME}.hex"83    COMMAND "${CMAKE_SIZE}" --format=berkeley "$<TARGET_FILE:${CMAKE_PROJECT_NAME}>"84    COMMENT "Generating bin/hex"85    VERBATIM86)8788# cmake --build --preset debug --target flash89add_custom_target(flash90    COMMAND powershell.exe -NoProfile -ExecutionPolicy Bypass91            -File "${CMAKE_CURRENT_SOURCE_DIR}/scripts/flash.ps1"92            -ElfFile "$<TARGET_FILE:${CMAKE_PROJECT_NAME}>"93    DEPENDS ${CMAKE_PROJECT_NAME}94    USES_TERMINAL95    COMMENT "Flash ${CMAKE_PROJECT_NAME} with OpenOCD"96    VERBATIM97)