From 1598e13a5aea1defde225cd948b3d7946576ff2f Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 27 Aug 2025 23:06:57 -0700 Subject: [PATCH] Cleanup and finish build system --- .gitignore | 3 + CMakeLists.txt | 6 +- Core/Include/Reg/SHAL_TIM_REG.h | 6 +- Core/Include/SHAL.h | 3 - Core/Include/SHAL_TIM.h | 2 +- Core/Src/main.cpp | 8 +- Core/Startup/startup_stm32f072rbtx.s | 294 --------------------------- Makefile | 41 ++++ 8 files changed, 56 insertions(+), 307 deletions(-) delete mode 100644 Core/Startup/startup_stm32f072rbtx.s create mode 100644 Makefile diff --git a/.gitignore b/.gitignore index 03774d9..874ac32 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,10 @@ .idea/**/dictionaries .idea/**/shelf +build/ + # AWS User-specific +.idea/ .idea/**/aws.xml # Generated files diff --git a/CMakeLists.txt b/CMakeLists.txt index 8b4a848..8dc0306 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,8 +3,9 @@ cmake_minimum_required(VERSION 3.19) project(shmingo-HAL) set(PROJECT_DIR ${CMAKE_CURRENT_SOURCE_DIR}) -set(MCU_FAMILY STM32F0xx) -set(MCU_MODEL STM32F072xx) +set(MCU_FAMILY "STM32F0xx" CACHE STRING "MCU family") +set(MCU_MODEL "" CACHE STRING "MCU model") + set(CPU_PARAMETERS -mcpu=cortex-m0 -mthumb) @@ -59,7 +60,6 @@ target_compile_options(${EXECUTABLE} PRIVATE -Wno-unused-parameter $<$: -Wno-volatile - -Wuseless-cast -Wsuggest-override> $<$:-Og -g3 -ggdb> diff --git a/Core/Include/Reg/SHAL_TIM_REG.h b/Core/Include/Reg/SHAL_TIM_REG.h index 1809ef5..a53f550 100644 --- a/Core/Include/Reg/SHAL_TIM_REG.h +++ b/Core/Include/Reg/SHAL_TIM_REG.h @@ -2,9 +2,11 @@ #define SHAL_TIM_REG +#include "stm32f0xx.h" // Or your device header + enum class S_TIM{ //Sample - TIM1 = 0xFFA0, - TIM2, + S_TIM_1 = 0xFFA0, + S_TIM_2 = 0xFF, }; #endif \ No newline at end of file diff --git a/Core/Include/SHAL.h b/Core/Include/SHAL.h index 9699f8a..543b9ff 100644 --- a/Core/Include/SHAL.h +++ b/Core/Include/SHAL.h @@ -8,9 +8,6 @@ #ifndef SHAL_H #define SHAL_H -#define STM32F072xB - - diff --git a/Core/Include/SHAL_TIM.h b/Core/Include/SHAL_TIM.h index 5baca1b..3965a9b 100644 --- a/Core/Include/SHAL_TIM.h +++ b/Core/Include/SHAL_TIM.h @@ -1,7 +1,7 @@ #ifndef SHAL_TIM_H #define SHAL_TIM_H -#include "Reg/SHAL_TIM_REG.h" +#include "SHAL_TIM_REG.h" diff --git a/Core/Src/main.cpp b/Core/Src/main.cpp index dad7f2c..8ff242f 100644 --- a/Core/Src/main.cpp +++ b/Core/Src/main.cpp @@ -1,5 +1,5 @@ #include "SHAL.h" -#include "stm32f0xx.h" // Or your device header +#include "stm32f0xx.h" volatile int prev_button = false; volatile int curr_button = false; @@ -7,14 +7,14 @@ volatile int curr_button = false; extern "C" void TIM2_IRQHandler(void){ if(TIM2->SR & TIM_SR_UIF){ TIM2->SR &= ~TIM_SR_UIF; - GPIOA->ODR ^= (1 << 5); + GPIOA->ODR ^= (1 << 4); } } extern "C" void EXTI0_1_IRQHandler(void) { if (EXTI->PR & (1 << 0)) { //Check pending flag EXTI->PR |= (1 << 0); //Clear it by writing 1 - GPIOA->ODR ^= (1 << 4); + GPIOA->ODR ^= (1 << 5); } } @@ -54,7 +54,7 @@ int main() { __enable_irq(); - while (1) { + while (true) { __WFI(); } } diff --git a/Core/Startup/startup_stm32f072rbtx.s b/Core/Startup/startup_stm32f072rbtx.s deleted file mode 100644 index ba7b08a..0000000 --- a/Core/Startup/startup_stm32f072rbtx.s +++ /dev/null @@ -1,294 +0,0 @@ -/** - ****************************************************************************** - * @file startup_stm32f072xb.s - * @author MCD Application Team - * @brief STM32F072x8/STM32F072xB devices vector table for GCC toolchain. - * This module performs: - * - Set the initial SP - * - Set the initial PC == Reset_Handler, - * - Set the vector table entries with the exceptions ISR address - * - Branches to main in the C library (which eventually - * calls main()). - * After Reset the Cortex-M0 processor is in Thread mode, - * priority is Privileged, and the Stack is set to Main. - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - - .syntax unified - .cpu cortex-m0 - .fpu softvfp - .thumb - -.global g_pfnVectors -.global Default_Handler - -/* start address for the initialization values of the .data section. -defined in linker script */ -.word _sidata -/* start address for the .data section. defined in linker script */ -.word _sdata -/* end address for the .data section. defined in linker script */ -.word _edata -/* start address for the .bss section. defined in linker script */ -.word _sbss -/* end address for the .bss section. defined in linker script */ -.word _ebss - - .section .text.Reset_Handler - .weak Reset_Handler - .type Reset_Handler, %function -Reset_Handler: - ldr r0, =_estack - mov sp, r0 /* set stack pointer */ - -/* Call the clock system initialization function.*/ - bl SystemInit - -/* Copy the data segment initializers from flash to SRAM */ - ldr r0, =_sdata - ldr r1, =_edata - ldr r2, =_sidata - movs r3, #0 - b LoopCopyDataInit - -CopyDataInit: - ldr r4, [r2, r3] - str r4, [r0, r3] - adds r3, r3, #4 - -LoopCopyDataInit: - adds r4, r0, r3 - cmp r4, r1 - bcc CopyDataInit - -/* Zero fill the bss segment. */ - ldr r2, =_sbss - ldr r4, =_ebss - movs r3, #0 - b LoopFillZerobss - -FillZerobss: - str r3, [r2] - adds r2, r2, #4 - -LoopFillZerobss: - cmp r2, r4 - bcc FillZerobss - -/* Call static constructors */ - bl __libc_init_array -/* Call the application's entry point.*/ - bl main - -LoopForever: - b LoopForever - - -.size Reset_Handler, .-Reset_Handler - -/** - * @brief This is the code that gets called when the processor receives an - * unexpected interrupt. This simply enters an infinite loop, preserving - * the system state for examination by a debugger. - * - * @param None - * @retval : None -*/ - .section .text.Default_Handler,"ax",%progbits -Default_Handler: -Infinite_Loop: - b Infinite_Loop - .size Default_Handler, .-Default_Handler -/****************************************************************************** -* -* The minimal vector table for a Cortex M0. Note that the proper constructs -* must be placed on this to ensure that it ends up at physical address -* 0x0000.0000. -* -******************************************************************************/ - .section .isr_vector,"a",%progbits - .type g_pfnVectors, %object - .size g_pfnVectors, .-g_pfnVectors - - -g_pfnVectors: - .word _estack - .word Reset_Handler - .word NMI_Handler - .word HardFault_Handler - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word SVC_Handler - .word 0 - .word 0 - .word PendSV_Handler - .word SysTick_Handler - .word WWDG_IRQHandler /* Window WatchDog */ - .word PVD_VDDIO2_IRQHandler /* PVD and VDDIO2 through EXTI Line detect */ - .word RTC_IRQHandler /* RTC through the EXTI line */ - .word FLASH_IRQHandler /* FLASH */ - .word RCC_CRS_IRQHandler /* RCC and CRS */ - .word EXTI0_1_IRQHandler /* EXTI Line 0 and 1 */ - .word EXTI2_3_IRQHandler /* EXTI Line 2 and 3 */ - .word EXTI4_15_IRQHandler /* EXTI Line 4 to 15 */ - .word TSC_IRQHandler /* TSC */ - .word DMA1_Channel1_IRQHandler /* DMA1 Channel 1 */ - .word DMA1_Channel2_3_IRQHandler /* DMA1 Channel 2 and Channel 3 */ - .word DMA1_Channel4_5_6_7_IRQHandler /* DMA1 Channel 4, Channel 5, Channel 6 and Channel 7*/ - .word ADC1_COMP_IRQHandler /* ADC1, COMP1 and COMP2 */ - .word TIM1_BRK_UP_TRG_COM_IRQHandler /* TIM1 Break, Update, Trigger and Commutation */ - .word TIM1_CC_IRQHandler /* TIM1 Capture Compare */ - .word TIM2_IRQHandler /* TIM2 */ - .word TIM3_IRQHandler /* TIM3 */ - .word TIM6_DAC_IRQHandler /* TIM6 and DAC */ - .word TIM7_IRQHandler /* TIM7 */ - .word TIM14_IRQHandler /* TIM14 */ - .word TIM15_IRQHandler /* TIM15 */ - .word TIM16_IRQHandler /* TIM16 */ - .word TIM17_IRQHandler /* TIM17 */ - .word I2C1_IRQHandler /* I2C1 */ - .word I2C2_IRQHandler /* I2C2 */ - .word SPI1_IRQHandler /* SPI1 */ - .word SPI2_IRQHandler /* SPI2 */ - .word USART1_IRQHandler /* USART1 */ - .word USART2_IRQHandler /* USART2 */ - .word USART3_4_IRQHandler /* USART3 and USART4 */ - .word CEC_CAN_IRQHandler /* CEC and CAN */ - .word USB_IRQHandler /* USB */ - -/******************************************************************************* -* -* Provide weak aliases for each Exception handler to the Default_Handler. -* As they are weak aliases, any function with the same name will override -* this definition. -* -*******************************************************************************/ - - .weak NMI_Handler - .thumb_set NMI_Handler,Default_Handler - - .weak HardFault_Handler - .thumb_set HardFault_Handler,Default_Handler - - .weak SVC_Handler - .thumb_set SVC_Handler,Default_Handler - - .weak PendSV_Handler - .thumb_set PendSV_Handler,Default_Handler - - .weak SysTick_Handler - .thumb_set SysTick_Handler,Default_Handler - - .weak WWDG_IRQHandler - .thumb_set WWDG_IRQHandler,Default_Handler - - .weak PVD_VDDIO2_IRQHandler - .thumb_set PVD_VDDIO2_IRQHandler,Default_Handler - - .weak RTC_IRQHandler - .thumb_set RTC_IRQHandler,Default_Handler - - .weak FLASH_IRQHandler - .thumb_set FLASH_IRQHandler,Default_Handler - - .weak RCC_CRS_IRQHandler - .thumb_set RCC_CRS_IRQHandler,Default_Handler - - .weak EXTI0_1_IRQHandler - .thumb_set EXTI0_1_IRQHandler,Default_Handler - - .weak EXTI2_3_IRQHandler - .thumb_set EXTI2_3_IRQHandler,Default_Handler - - .weak EXTI4_15_IRQHandler - .thumb_set EXTI4_15_IRQHandler,Default_Handler - - .weak TSC_IRQHandler - .thumb_set TSC_IRQHandler,Default_Handler - - .weak DMA1_Channel1_IRQHandler - .thumb_set DMA1_Channel1_IRQHandler,Default_Handler - - .weak DMA1_Channel2_3_IRQHandler - .thumb_set DMA1_Channel2_3_IRQHandler,Default_Handler - - .weak DMA1_Channel4_5_6_7_IRQHandler - .thumb_set DMA1_Channel4_5_6_7_IRQHandler,Default_Handler - - .weak ADC1_COMP_IRQHandler - .thumb_set ADC1_COMP_IRQHandler,Default_Handler - - .weak TIM1_BRK_UP_TRG_COM_IRQHandler - .thumb_set TIM1_BRK_UP_TRG_COM_IRQHandler,Default_Handler - - .weak TIM1_CC_IRQHandler - .thumb_set TIM1_CC_IRQHandler,Default_Handler - - .weak TIM2_IRQHandler - .thumb_set TIM2_IRQHandler,Default_Handler - - .weak TIM3_IRQHandler - .thumb_set TIM3_IRQHandler,Default_Handler - - .weak TIM6_DAC_IRQHandler - .thumb_set TIM6_DAC_IRQHandler,Default_Handler - - .weak TIM7_IRQHandler - .thumb_set TIM7_IRQHandler,Default_Handler - - .weak TIM14_IRQHandler - .thumb_set TIM14_IRQHandler,Default_Handler - - .weak TIM15_IRQHandler - .thumb_set TIM15_IRQHandler,Default_Handler - - .weak TIM16_IRQHandler - .thumb_set TIM16_IRQHandler,Default_Handler - - .weak TIM17_IRQHandler - .thumb_set TIM17_IRQHandler,Default_Handler - - .weak I2C1_IRQHandler - .thumb_set I2C1_IRQHandler,Default_Handler - - .weak I2C2_IRQHandler - .thumb_set I2C2_IRQHandler,Default_Handler - - .weak SPI1_IRQHandler - .thumb_set SPI1_IRQHandler,Default_Handler - - .weak SPI2_IRQHandler - .thumb_set SPI2_IRQHandler,Default_Handler - - .weak USART1_IRQHandler - .thumb_set USART1_IRQHandler,Default_Handler - - .weak USART2_IRQHandler - .thumb_set USART2_IRQHandler,Default_Handler - - .weak USART3_4_IRQHandler - .thumb_set USART3_4_IRQHandler,Default_Handler - - .weak CEC_CAN_IRQHandler - .thumb_set CEC_CAN_IRQHandler,Default_Handler - - .weak USB_IRQHandler - .thumb_set USB_IRQHandler,Default_Handler - - - diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4faa71c --- /dev/null +++ b/Makefile @@ -0,0 +1,41 @@ +.PHONY: all build cmake clean format + +# --- Configurable variables --- +BUILD_DIR := build +BUILD_TYPE ?= Debug +TOOLCHAIN := gcc-arm-none-eabi.cmake + +# MCU target (override on command line: make build MCU_MODEL=STM32F051x8) +MCU_MODEL ?= STM32F072xB +MCU_FAMILY ?= STM32F0xx + +# --- Default target --- +all: build + +# --- Configure step (runs CMake if build dir missing or stale) --- +${BUILD_DIR}/build.ninja: + cmake \ + -G Ninja \ + -B ${BUILD_DIR} \ + -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ + -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN} \ + -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ + -DMCU_MODEL=$(MCU_MODEL) \ + -DMCU_FAMILY=$(MCU_FAMILY) + +cmake: ${BUILD_DIR}/build.ninja + +# --- Build step --- +build: cmake + cmake --build ${BUILD_DIR} + +# --- Format all sources --- +SRCS := $(shell find . -type f \( -name '*.[ch]' -o -name '*.[ch]pp' \)) +format: $(addsuffix .format,${SRCS}) + +%.format: % + clang-format -i $< + +# --- Clean --- +clean: + rm -rf ${BUILD_DIR} compile_commands.json