From 451f47772998cb58d49cda084016ff8ce4b8a842 Mon Sep 17 00:00:00 2001 From: Arti Zirk Date: Wed, 21 Jul 2021 23:04:05 +0300 Subject: [PATCH] more hacks --- .gitignore | 1 + CMakeLists.txt | 32 ++++++++++++++++++-------------- CMakePresets.json | 5 +++-- README.md | 21 ++++++++++++++++++--- RTT/CMakeLists.txt | 8 ++++++++ main.c | 24 +++++++++++++----------- toolchain-STM32F1.cmake | 21 ++++++++++++++------- 7 files changed, 75 insertions(+), 37 deletions(-) create mode 100644 RTT/CMakeLists.txt diff --git a/.gitignore b/.gitignore index 76ecbb1..b0147dd 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ bin/ generated.*.ld .idea build +STM32F103xx.svd diff --git a/CMakeLists.txt b/CMakeLists.txt index cfcea58..38f2c35 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,28 +6,32 @@ set(CMAKE_C_STANDARD 99) add_compile_options( -Wall - -Wextra - -Wconversion - -Wsign-conversion + -Wextra -Wshadow -Wno-unused-variable -Wimplicit-function-declaration + -Wredundant-decls -Wstrict-prototypes -Wmissing-prototypes -ggdb3 - -Os + -O0 +) + +add_link_options( + ) add_compile_definitions( STM32F1 + STM32F103C8T6 DEBUG ) - add_executable(dht_test main.c) -set_target_properties(dht_test PROPERTIES - SUFFIX .elf -) - -target_include_directories(dht_test PRIVATE - ${LIBOPENCM3_DIR}/include - RTT -) +set_target_properties(dht_test PROPERTIES SUFFIX .elf) add_custom_target(libopencm3 make TARGETS=stm32/f1 -j8 WORKING_DIRECTORY ${LIBOPENCM3_DIR}) -link_directories(${LIBOPENCM3_DIR}/lib) +#link_directories(${LIBOPENCM3_DIR}/lib) +target_link_libraries(dht_test PUBLIC ${LIBOPENCM3_DIR}/lib/libopencm3_stm32f1.a) + +add_subdirectory(RTT) +target_link_libraries(dht_test PUBLIC RTT) + +target_include_directories(dht_test PUBLIC + RTT ${LIBOPENCM3_DIR}/include +) diff --git a/CMakePresets.json b/CMakePresets.json index 447105c..ac9e243 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -1,5 +1,5 @@ { - "version": 2, + "version": 3, "cmakeMinimumRequired": { "major": 3, "minor": 19, @@ -11,7 +11,8 @@ "displayName": "Default Config", "description": "Default build using Ninja generator", "generator": "Ninja", - "binaryDir": "${sourceDir}/build/default" + "binaryDir": "${sourceDir}/build", + "toolchainFile": "toolchain-STM32F1.cmake" } ], "buildPresets": [ diff --git a/README.md b/README.md index ca0fd9f..ffcb6a1 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,22 @@ ## Build -0. git submodule update --init (This is only needed once) -1. make -C libopencm3 # (Only needed once) -2. make +First time: + +0. `git submodule update --init` +1. `make -C libopencm3` +2. `cmake -S . --preset=default` + +or older cmake: + +2. `cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=toolchain-STM32F1.cmake` + +And then to build an `.elf` + +0. `cmake --build build --verbose` +## RTT debug console + +run this while `openocd` is running + + while true; do telnet localhost 9090; sleep 1; done diff --git a/RTT/CMakeLists.txt b/RTT/CMakeLists.txt new file mode 100644 index 0000000..bd91ae7 --- /dev/null +++ b/RTT/CMakeLists.txt @@ -0,0 +1,8 @@ +add_library(RTT + SEGGER_RTT.c + SEGGER_RTT_printf.c + SEGGER_RTT_Syscalls_GCC.c + ) +target_include_directories(RTT + INTERFACE ${CMAKE_CURRENT_SOURCE_DIR} + ) diff --git a/main.c b/main.c index b090bd9..232f96a 100644 --- a/main.c +++ b/main.c @@ -26,6 +26,8 @@ #include +#define puts(s) SEGGER_RTT_WriteString(0, s);SEGGER_RTT_WriteString(0,"\n") + #define DHT_PORT GPIOB #define DHT_PIN GPIO0 @@ -197,7 +199,7 @@ static void dht_start(void) } // Parse received DHT11 bit timing data from g_dht_vals and print out pretty values -static void dht_parse_data(){ +static void dht_parse_data(void) { int8_t data[5] = {0}; uint8_t checksum = 0; int data_index = 0; @@ -231,16 +233,16 @@ static void dht_parse_data(){ } // Just toggle the data pin, used only for debugging -static void dht_start_signal(void) -{ - gpio_set_mode(DHT_PORT, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, DHT_PIN); - gpio_clear(DHT_PORT, DHT_PIN); - delay(100000); - //delay(30000); - gpio_set(DHT_PORT, DHT_PIN); - delay(100); - gpio_set_mode(DHT_PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, DHT_PIN); -} +//static void dht_start_signal(void) +//{ +// gpio_set_mode(DHT_PORT, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, DHT_PIN); +// gpio_clear(DHT_PORT, DHT_PIN); +// delay(100000); +// //delay(30000); +// gpio_set(DHT_PORT, DHT_PIN); +// delay(100); +// gpio_set_mode(DHT_PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, DHT_PIN); +//} int main(void) { diff --git a/toolchain-STM32F1.cmake b/toolchain-STM32F1.cmake index 6153b0d..0a2c1f7 100644 --- a/toolchain-STM32F1.cmake +++ b/toolchain-STM32F1.cmake @@ -3,14 +3,12 @@ set(CMAKE_SYSTEM_VERSION Cortex-M3-STM32F1) set(CMAKE_C_COMPILER arm-none-eabi-gcc) set(CMAKE_CXX_COMPILER arm-none-eabi-g++) +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) - -set(ARM_OPTIONS -mcpu=cortex-m4 -mfloat-abi=soft --specs=nano.specs) +set(ARM_OPTIONS -mcpu=cortex-m3 -mthumb -msoft-float) add_compile_options( ${ARM_OPTIONS} - -fmessage-length=0 - -funsigned-char -ffunction-sections -fdata-sections -MMD @@ -20,12 +18,21 @@ add_compile_options( add_link_options( ${ARM_OPTIONS} - --specs=rdimon.specs - -u_printf_float - -u_scanf_float + -specs=nano.specs + -specs=nosys.specs # puts does not work..... + #-specs=rdimon.specs + LINKER:-lc + LINKER:-lgcc + LINKER:-lnosys + #-specs=nano.specs + #-u_printf_float + #-u_scanf_float -nostartfiles + #-Wl,--start-group -lc -lgcc -lnosys -Wl,--end-group LINKER:--gc-sections LINKER:--build-id + LINKER:-Map=${CMAKE_PROJECT_NAME}.map + -T${CMAKE_SOURCE_DIR}/generated.STM32F103C8T6.ld )