From a2df6c2e75e3777537798002f8a1595de4ba7e40 Mon Sep 17 00:00:00 2001 From: andre Ebersold Date: Wed, 10 Jan 2024 22:11:20 +0100 Subject: [PATCH] Almost ready to build for arm stm32g030 --- Application/CMakeLists.txt | 26 +++++++++++++++- Application/DCMotor/CMakeLists.txt | 15 +++++++-- CMakeLists.txt | 42 +++++++++----------------- Communication/CommunicationHandler.cpp | 7 +++++ rules/gcc-arm-generic.cmake | 17 +++++++++-- rules/target-atmega328p.cmake | 24 +++++++++++++++ rules/target-stm32g030.cmake | 24 +++++++++++++++ setupenvstm32g030.bat | 7 +++++ 8 files changed, 127 insertions(+), 35 deletions(-) create mode 100644 rules/target-atmega328p.cmake create mode 100644 rules/target-stm32g030.cmake create mode 100644 setupenvstm32g030.bat diff --git a/Application/CMakeLists.txt b/Application/CMakeLists.txt index e365e03..b7215e3 100644 --- a/Application/CMakeLists.txt +++ b/Application/CMakeLists.txt @@ -1 +1,25 @@ -subdirs(Led0 DCMotor PowerSwitch ShutterCtrl WorkhourMeter) +SET(APPLIST "") +if(TINYAPP_LED0) + LIST(APPEND APPLIST Led0) +endif() +if(TINYAPP_DCMOTOR) + LIST(APPEND APPLIST DCMotor) +endif() +if(TINYAPP_SHUTTERCTRL) + LIST(APPEND APPLIST ShutterCtrl) +endif() +if(TINYAPP_POWERSWITCH) + LIST(APPEND APPLIST PowerSwitch) +endif() +if(TINYAPP_WORKHOURMETER) + LIST(APPEND APPLIST WorkhourMeter) +endif() + +OPTION(TINYAPP_LED0 "Build Led application" ON) +OPTION(TINYAPP_DCMOTOR "Build DC Motor application" OFF) +OPTION(TINYAPP_SHUTTERCTRL "Build Shutter Handler application" ON) +OPTION(TINYAPP_POWERSWITCH "Build Powerswitch application" ON) +OPTION(TINYAPP_WORKHOURMETER "Build WorkHourMeter application" ON) + +subdirs(${APPLIST}) +#subdirs(Led0 DCMotor PowerSwitch ShutterCtrl WorkhourMeter) diff --git a/Application/DCMotor/CMakeLists.txt b/Application/DCMotor/CMakeLists.txt index 624792c..2c38bcc 100644 --- a/Application/DCMotor/CMakeLists.txt +++ b/Application/DCMotor/CMakeLists.txt @@ -8,7 +8,7 @@ add_avr_executable( DCMotor.cpp MotorHandler.cpp ) - +if (AVR_MCU) target_link_libraries( dcmotor-${AVR_MCU}.elf avrHAL-${AVR_MCU} @@ -17,7 +17,6 @@ target_link_libraries( avrPtf-${AVR_MCU} avrDCMotorParameters-${AVR_MCU} ) - IF (${AVR_MCU} EQUAL "atmega328p") SET(AVRPROG arduino) SET(AVRPROG_MCU Atmega328p) @@ -26,10 +25,20 @@ ELSE(${AVR_MCU} EQUAL "atmega328p") SET(AVRPROG_MCU m32u4) ENDIF(${AVR_MCU} EQUAL "atmega328p") +elseif(STM32_MCU) +target_link_libraries( + dcmotor-${STM32_MCU}.elf + avrHAL-${STM32_MCU} + avrDrivers-${STM32_MCU} + avrComm-${STM32_MCU} + avrPtf-${STM32_MCU} + avrDCMotorParameters-${STM32_MCU} +) +endif() + add_custom_target( flash_dcmotor COMMAND - # avrdude -c arduino -P ${AVRDUDE_PORT} -p Atmega328p -b 57600 -Uflash:w:${CMAKE_CURRENT_BINARY_DIR}/dcmotor-${AVR_MCU}.hex:i avrdude -c ${AVRPROG} -P ${AVRDUDE_PORT} -p ${AVRPROG_MCU} -b 57600 -Uflash:w:${CMAKE_CURRENT_BINARY_DIR}/dcmotor-${AVR_MCU}.hex:i DEPENDS dcmotor-${AVR_MCU}.hex ) diff --git a/CMakeLists.txt b/CMakeLists.txt index a325540..6d9f5f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,31 +1,16 @@ cmake_minimum_required(VERSION 2.8) - - -########################################################################## -# tools to beused for programming the AVR -########################################################################## -set(AVR_UPLOADTOOL avrdude CACHE STRING "AVR MCU Programmer ") -set(AVR_PROGRAMMER arduino) -set(AVR_UPLOADTOOL_PORT CACHE STRING "AVRdude upload port") -set(AVR_UPLOADTOOL_BAUDRATE 57600) - -########################################################################## -# AVR and fuses needs to be set -########################################################################## -#set(AVR_MCU atmega32) -set(AVR_MCU atmega328p CACHE STRING "AVR MCU type choose between atmega32_p or atmega32 atmega328p") -set(AVR_H_FUSE 0xd9) -set(AVR_L_FUSE 0xc3) - -### END TOOLCHAIN SETUP AREA ############################################# - -include(${CMAKE_CURRENT_SOURCE_DIR}/rules/gcc-avr-generic.cmake) - -PROJECT(tinyapp) - -include(${CMAKE_CURRENT_SOURCE_DIR}/rules/gcc-avr-common.cmake) - -IF(NOT CMAKE_BUILD_TYPE) +project(tinyapp) +if("${BUILD_TARGET}" STREQUAL "atmega328p") + include(${CMAKE_CURRENT_SOURCE_DIR}/rules/target-atmega328p.cmake) +elseif ("${BUILD_TARGET}" STREQUAL "atmega32u4") + include(${CMAKE_CURRENT_SOURCE_DIR}/rules/target-atmega328p.cmake) +elseif ("${BUILD_TARGET}" STREQUAL "stm32g030") + include(${CMAKE_CURRENT_SOURCE_DIR}/rules/target-stm32g030.cmake) +else() + include(${CMAKE_CURRENT_SOURCE_DIR}/rules/target-atmega328p.cmake) +endif() + +if (NOT CMAKE_BUILD_TYPE) SET(CMAKE_BUILD_TYPE "Debug") ENDIF(NOT CMAKE_BUILD_TYPE) @@ -41,8 +26,9 @@ INCLUDE_DIRECTORIES("${tinyapp_BINARY_DIR}/Application") OPTION(TINYAPP_LED0 "Build Led application" ON) -OPTION(TINYAPP_DC_MOTOR "Build DC Motor application" OFF) +OPTION(TINYAPP_DCMOTOR "Build DC Motor application" OFF) OPTION(TINYAPP_SHUTTERCTRL "Build Shutter Handler application" ON) +OPTION(TINYAPP_POWERSWITCH "Build Powerswitch application" ON) IF (WIN32) SET(AVRDUDE_PORT "COM3" CACHE STRING "Avrdude port to use for flashing") diff --git a/Communication/CommunicationHandler.cpp b/Communication/CommunicationHandler.cpp index 95f113f..91056d5 100644 --- a/Communication/CommunicationHandler.cpp +++ b/Communication/CommunicationHandler.cpp @@ -145,11 +145,18 @@ void CommunicationHandler::writeParameter(const Uint8_t paramId m_Params->writeValue(paramId,result); } else + if (_eType == TYPE_U32) { Uint32_t val; parse_num(_buf,len,val); m_Params->writeValue(paramId,val); } + else + { + Uint32_t val; + parse_num(_buf,len,val); + m_Params->writeValue(paramId,reinterpret_cast(val)); + } } void diff --git a/rules/gcc-arm-generic.cmake b/rules/gcc-arm-generic.cmake index 8af87f4..00e1715 100644 --- a/rules/gcc-arm-generic.cmake +++ b/rules/gcc-arm-generic.cmake @@ -15,12 +15,23 @@ option(WITH_MCU "Add the mCU type to the target file name." ON) # executables in use ########################################################################## SET(TRIPLE arm-none-eabi) +SET(CMAKE_CROSSCOMPILING 1) +SET(CROSS_TARGET_TRIPLE "arm-none-eabi-") find_program(ARM_CC ${TRIPLE}-gcc) find_program(ARM_CXX ${TRIPLE}-g++) find_program(ARM_OBJCOPY ${TRIPLE}-objcopy) find_program(ARM_SIZE_TOOL ${TRIPLE}-size) find_program(ARM_OBJDUMP ${TRIPLE}-objdump) +########################################################################## +# toolchain starts with defining mandatory variables +########################################################################## +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_SYSTEM_PROCESSOR arm) +set(CMAKE_C_COMPILER ${ARM_CC}) +set(CMAKE_CXX_COMPILER ${ARM_CXX}) +SET(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY") + ###### # Identification ###### @@ -47,10 +58,10 @@ endif(NOT STM32_MCU) # default CORE if(NOT STM32_CORE) SET( - STM32_MCU cortex-m3 + STM32_CORE cortex-m3 CACHE STRING "Set default CPU cortex-m3" ) -endif(NOT STM32_MCU) +endif(NOT STM32_CORE) # default uploadtool if(NOT STM32_UPLOADTOOL) @@ -66,7 +77,7 @@ if(NOT STM32_UPLOAD_CONFIG) STM32_UPLOAD_CONFIG board/stm32 CACHE STRING "Set default openocd config file for target" ) -endif(NOT STM32_UPLOADTOOL) +endif(NOT STM32_UPLOAD_CONFIG) #default stm32-size args diff --git a/rules/target-atmega328p.cmake b/rules/target-atmega328p.cmake new file mode 100644 index 0000000..f6f5534 --- /dev/null +++ b/rules/target-atmega328p.cmake @@ -0,0 +1,24 @@ +########################################################################## +# tools to beused for programming the AVR +########################################################################## +set(AVR_UPLOADTOOL avrdude CACHE STRING "AVR MCU Programmer ") +set(AVR_PROGRAMMER arduino) +set(AVR_UPLOADTOOL_PORT CACHE STRING "AVRdude upload port") +set(AVR_UPLOADTOOL_BAUDRATE 57600) + +########################################################################## +# AVR and fuses needs to be set +########################################################################## +#set(AVR_MCU atmega32) +set(AVR_MCU atmega328p CACHE STRING "AVR MCU type choose between atmega32_p or atmega32 atmega328p") +set(AVR_H_FUSE 0xd9) +set(AVR_L_FUSE 0xc3) + +### END TOOLCHAIN SETUP AREA ############################################# + +include(${CMAKE_CURRENT_SOURCE_DIR}/rules/gcc-avr-generic.cmake) + +PROJECT(tinyapp) + +include(${CMAKE_CURRENT_SOURCE_DIR}/rules/gcc-avr-common.cmake) + diff --git a/rules/target-stm32g030.cmake b/rules/target-stm32g030.cmake new file mode 100644 index 0000000..6da861c --- /dev/null +++ b/rules/target-stm32g030.cmake @@ -0,0 +1,24 @@ +########################################################################## +# tools to beused for programming the AVR +########################################################################## +set(STM32_UPLOADTOOL openocd CACHE STRING "STM32 MCU Programmer") +set(STM32_PROGRAMMER openocd) +set(STM32_UPLOADTOOL_PORT CACHE STRING "AVRdude upload port") +set(STM32_UPLOADTOOL_BAUDRATE 57600) + +########################################################################## +# AVR and fuses needs to be set +########################################################################## +set(STM32_MCU stm32g030 CACHE STRING "STM32 MCU type stm32g030") +set(AVR_H_FUSE 0xd9) +set(AVR_L_FUSE 0xc3) + +### END TOOLCHAIN SETUP AREA ############################################# + +include(${CMAKE_CURRENT_SOURCE_DIR}/rules/gcc-arm-generic.cmake) + +PROJECT(tinyapp) + +include(${CMAKE_CURRENT_SOURCE_DIR}/rules/gcc-arm-common.cmake) + + diff --git a/setupenvstm32g030.bat b/setupenvstm32g030.bat new file mode 100644 index 0000000..2529978 --- /dev/null +++ b/setupenvstm32g030.bat @@ -0,0 +1,7 @@ + +SET PATH=%PATH%;C:\Tools\gcc-arm-none-eabi-10.3-win32\gcc-arm-none-eabi-10.3-2021.10\bin +SET PATH=%PATH%;C:\Program Files\CMake\bin +SET PATH=%PATH%;C:\msys64\usr\bin +SET PATH=%PATH%;C:\tools\avrdude + +SET STM32_FIND_ROOT_PATH=C:\Tools\gcc-arm-none-eabi-10.3-win32\gcc-arm-none-eabi-10.3-2021.10\bin -- 2.30.2