From e0fa29c036e1bf647aa75b39ed91c5a1268c6d8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20MARQUET?= <72651575+BreizhHardware@users.noreply.github.com> Date: Tue, 17 Jun 2025 16:10:05 +0200 Subject: [PATCH] TP1 Exo 1 --- TP1/.cproject | 173 + TP1/.mxproject | 25 + TP1/.project | 32 + TP1/.settings/language.settings.xml | 25 + .../org.eclipse.core.resources.prefs | 2 + TP1/.settings/stm32cubeide.project.prefs | 5 + TP1/Core/Inc/main.h | 69 + TP1/Core/Inc/stm32l1xx_hal_conf.h | 318 + TP1/Core/Inc/stm32l1xx_it.h | 66 + TP1/Core/Src/main.c | 180 + TP1/Core/Src/stm32l1xx_hal_msp.c | 83 + TP1/Core/Src/stm32l1xx_it.c | 203 + TP1/Core/Src/syscalls.c | 176 + TP1/Core/Src/sysmem.c | 79 + TP1/Core/Src/system_stm32l1xx.c | 428 + TP1/Core/Startup/startup_stm32l152retx.s | 413 + TP1/Debug/Core/Src/main.cyclo | 3 + TP1/Debug/Core/Src/main.d | 50 + TP1/Debug/Core/Src/main.o | Bin 0 -> 702600 bytes TP1/Debug/Core/Src/main.su | 3 + TP1/Debug/Core/Src/stm32l1xx_hal_msp.cyclo | 1 + TP1/Debug/Core/Src/stm32l1xx_hal_msp.d | 50 + TP1/Debug/Core/Src/stm32l1xx_hal_msp.o | Bin 0 -> 700304 bytes TP1/Debug/Core/Src/stm32l1xx_hal_msp.su | 1 + TP1/Debug/Core/Src/stm32l1xx_it.cyclo | 9 + TP1/Debug/Core/Src/stm32l1xx_it.d | 52 + TP1/Debug/Core/Src/stm32l1xx_it.o | Bin 0 -> 701960 bytes TP1/Debug/Core/Src/stm32l1xx_it.su | 9 + TP1/Debug/Core/Src/subdir.mk | 42 + TP1/Debug/Core/Src/syscalls.cyclo | 18 + TP1/Debug/Core/Src/syscalls.d | 1 + TP1/Debug/Core/Src/syscalls.o | Bin 0 -> 83412 bytes TP1/Debug/Core/Src/syscalls.su | 18 + TP1/Debug/Core/Src/sysmem.cyclo | 1 + TP1/Debug/Core/Src/sysmem.d | 1 + TP1/Debug/Core/Src/sysmem.o | Bin 0 -> 55884 bytes TP1/Debug/Core/Src/sysmem.su | 1 + TP1/Debug/Core/Src/system_stm32l1xx.cyclo | 2 + TP1/Debug/Core/Src/system_stm32l1xx.d | 49 + TP1/Debug/Core/Src/system_stm32l1xx.o | Bin 0 -> 702144 bytes TP1/Debug/Core/Src/system_stm32l1xx.su | 2 + .../Core/Startup/startup_stm32l152retx.d | 2 + .../Core/Startup/startup_stm32l152retx.o | Bin 0 -> 6016 bytes TP1/Debug/Core/Startup/subdir.mk | 27 + .../Src/stm32l1xx_hal.cyclo | 25 + .../STM32L1xx_HAL_Driver/Src/stm32l1xx_hal.d | 50 + .../STM32L1xx_HAL_Driver/Src/stm32l1xx_hal.o | Bin 0 -> 713228 bytes .../STM32L1xx_HAL_Driver/Src/stm32l1xx_hal.su | 25 + .../Src/stm32l1xx_hal_cortex.cyclo | 34 + .../Src/stm32l1xx_hal_cortex.d | 50 + .../Src/stm32l1xx_hal_cortex.o | Bin 0 -> 719324 bytes .../Src/stm32l1xx_hal_cortex.su | 34 + .../Src/stm32l1xx_hal_dma.cyclo | 13 + .../Src/stm32l1xx_hal_dma.d | 50 + .../Src/stm32l1xx_hal_dma.o | Bin 0 -> 710196 bytes .../Src/stm32l1xx_hal_dma.su | 13 + .../Src/stm32l1xx_hal_exti.cyclo | 9 + .../Src/stm32l1xx_hal_exti.d | 50 + .../Src/stm32l1xx_hal_exti.o | Bin 0 -> 705900 bytes .../Src/stm32l1xx_hal_exti.su | 9 + .../Src/stm32l1xx_hal_flash.cyclo | 13 + .../Src/stm32l1xx_hal_flash.d | 50 + .../Src/stm32l1xx_hal_flash.o | Bin 0 -> 707896 bytes .../Src/stm32l1xx_hal_flash.su | 13 + .../Src/stm32l1xx_hal_flash_ex.cyclo | 31 + .../Src/stm32l1xx_hal_flash_ex.d | 50 + .../Src/stm32l1xx_hal_flash_ex.o | Bin 0 -> 721160 bytes .../Src/stm32l1xx_hal_flash_ex.su | 31 + .../Src/stm32l1xx_hal_flash_ramfunc.cyclo | 10 + .../Src/stm32l1xx_hal_flash_ramfunc.d | 50 + .../Src/stm32l1xx_hal_flash_ramfunc.o | Bin 0 -> 706760 bytes .../Src/stm32l1xx_hal_flash_ramfunc.su | 10 + .../Src/stm32l1xx_hal_gpio.cyclo | 8 + .../Src/stm32l1xx_hal_gpio.d | 50 + .../Src/stm32l1xx_hal_gpio.o | Bin 0 -> 706532 bytes .../Src/stm32l1xx_hal_gpio.su | 8 + .../Src/stm32l1xx_hal_pwr.cyclo | 17 + .../Src/stm32l1xx_hal_pwr.d | 50 + .../Src/stm32l1xx_hal_pwr.o | Bin 0 -> 708776 bytes .../Src/stm32l1xx_hal_pwr.su | 17 + .../Src/stm32l1xx_hal_pwr_ex.cyclo | 7 + .../Src/stm32l1xx_hal_pwr_ex.d | 50 + .../Src/stm32l1xx_hal_pwr_ex.o | Bin 0 -> 703440 bytes .../Src/stm32l1xx_hal_pwr_ex.su | 7 + .../Src/stm32l1xx_hal_rcc.cyclo | 15 + .../Src/stm32l1xx_hal_rcc.d | 50 + .../Src/stm32l1xx_hal_rcc.o | Bin 0 -> 715676 bytes .../Src/stm32l1xx_hal_rcc.su | 15 + .../Src/stm32l1xx_hal_rcc_ex.cyclo | 8 + .../Src/stm32l1xx_hal_rcc_ex.d | 50 + .../Src/stm32l1xx_hal_rcc_ex.o | Bin 0 -> 705424 bytes .../Src/stm32l1xx_hal_rcc_ex.su | 8 + .../STM32L1xx_HAL_Driver/Src/subdir.mk | 60 + TP1/Debug/TP1.elf | Bin 0 -> 657068 bytes TP1/Debug/TP1.list | 3378 ++++++ TP1/Debug/TP1.map | 2538 +++++ TP1/Debug/makefile | 94 + TP1/Debug/objects.list | 19 + TP1/Debug/objects.mk | 9 + TP1/Debug/sources.mk | 28 + .../Device/ST/STM32L1xx/Include/stm32l152xe.h | 9022 +++++++++++++++++ .../Device/ST/STM32L1xx/Include/stm32l1xx.h | 299 + .../ST/STM32L1xx/Include/system_stm32l1xx.h | 107 + .../CMSIS/Device/ST/STM32L1xx/LICENSE.txt | 6 + .../CMSIS/Device/ST/STM32L1xx/License.md | 83 + TP1/Drivers/CMSIS/Include/cmsis_armcc.h | 865 ++ TP1/Drivers/CMSIS/Include/cmsis_armclang.h | 1869 ++++ TP1/Drivers/CMSIS/Include/cmsis_compiler.h | 266 + TP1/Drivers/CMSIS/Include/cmsis_gcc.h | 2085 ++++ TP1/Drivers/CMSIS/Include/cmsis_iccarm.h | 935 ++ TP1/Drivers/CMSIS/Include/cmsis_version.h | 39 + TP1/Drivers/CMSIS/Include/core_armv8mbl.h | 1918 ++++ TP1/Drivers/CMSIS/Include/core_armv8mml.h | 2927 ++++++ TP1/Drivers/CMSIS/Include/core_cm0.h | 949 ++ TP1/Drivers/CMSIS/Include/core_cm0plus.h | 1083 ++ TP1/Drivers/CMSIS/Include/core_cm1.h | 976 ++ TP1/Drivers/CMSIS/Include/core_cm23.h | 1993 ++++ TP1/Drivers/CMSIS/Include/core_cm3.h | 1941 ++++ TP1/Drivers/CMSIS/Include/core_cm33.h | 3002 ++++++ TP1/Drivers/CMSIS/Include/core_cm4.h | 2129 ++++ TP1/Drivers/CMSIS/Include/core_cm7.h | 2671 +++++ TP1/Drivers/CMSIS/Include/core_sc000.h | 1022 ++ TP1/Drivers/CMSIS/Include/core_sc300.h | 1915 ++++ TP1/Drivers/CMSIS/Include/mpu_armv7.h | 270 + TP1/Drivers/CMSIS/Include/mpu_armv8.h | 333 + TP1/Drivers/CMSIS/Include/tz_context.h | 70 + TP1/Drivers/CMSIS/LICENSE.txt | 201 + .../Inc/Legacy/stm32_hal_legacy.h | 4422 ++++++++ .../STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal.h | 995 ++ .../Inc/stm32l1xx_hal_cortex.h | 437 + .../Inc/stm32l1xx_hal_def.h | 199 + .../Inc/stm32l1xx_hal_dma.h | 651 ++ .../Inc/stm32l1xx_hal_exti.h | 315 + .../Inc/stm32l1xx_hal_flash.h | 411 + .../Inc/stm32l1xx_hal_flash_ex.h | 965 ++ .../Inc/stm32l1xx_hal_flash_ramfunc.h | 116 + .../Inc/stm32l1xx_hal_gpio.h | 333 + .../Inc/stm32l1xx_hal_gpio_ex.h | 203 + .../Inc/stm32l1xx_hal_pwr.h | 483 + .../Inc/stm32l1xx_hal_pwr_ex.h | 115 + .../Inc/stm32l1xx_hal_rcc.h | 1895 ++++ .../Inc/stm32l1xx_hal_rcc_ex.h | 1027 ++ .../Inc/stm32l1xx_ll_bus.h | 1100 ++ .../Inc/stm32l1xx_ll_cortex.h | 637 ++ .../Inc/stm32l1xx_ll_dma.h | 1996 ++++ .../Inc/stm32l1xx_ll_exti.h | 1015 ++ .../Inc/stm32l1xx_ll_gpio.h | 987 ++ .../Inc/stm32l1xx_ll_pwr.h | 718 ++ .../Inc/stm32l1xx_ll_rcc.h | 1796 ++++ .../Inc/stm32l1xx_ll_system.h | 2007 ++++ .../Inc/stm32l1xx_ll_utils.h | 270 + TP1/Drivers/STM32L1xx_HAL_Driver/LICENSE.txt | 6 + TP1/Drivers/STM32L1xx_HAL_Driver/License.md | 3 + .../STM32L1xx_HAL_Driver/Src/stm32l1xx_hal.c | 570 ++ .../Src/stm32l1xx_hal_cortex.c | 537 + .../Src/stm32l1xx_hal_dma.c | 909 ++ .../Src/stm32l1xx_hal_exti.c | 547 + .../Src/stm32l1xx_hal_flash.c | 723 ++ .../Src/stm32l1xx_hal_flash_ex.c | 1870 ++++ .../Src/stm32l1xx_hal_flash_ramfunc.c | 640 ++ .../Src/stm32l1xx_hal_gpio.c | 546 + .../Src/stm32l1xx_hal_pwr.c | 650 ++ .../Src/stm32l1xx_hal_pwr_ex.c | 158 + .../Src/stm32l1xx_hal_rcc.c | 1394 +++ .../Src/stm32l1xx_hal_rcc_ex.c | 447 + TP1/STM32L152RETX_FLASH.ld | 187 + TP1/STM32L152RETX_RAM.ld | 187 + TP1/TP1 Debug.launch | 85 + TP1/TP1.ioc | 81 + 169 files changed, 81334 insertions(+) create mode 100644 TP1/.cproject create mode 100644 TP1/.mxproject create mode 100644 TP1/.project create mode 100644 TP1/.settings/language.settings.xml create mode 100644 TP1/.settings/org.eclipse.core.resources.prefs create mode 100644 TP1/.settings/stm32cubeide.project.prefs create mode 100644 TP1/Core/Inc/main.h create mode 100644 TP1/Core/Inc/stm32l1xx_hal_conf.h create mode 100644 TP1/Core/Inc/stm32l1xx_it.h create mode 100644 TP1/Core/Src/main.c create mode 100644 TP1/Core/Src/stm32l1xx_hal_msp.c create mode 100644 TP1/Core/Src/stm32l1xx_it.c create mode 100644 TP1/Core/Src/syscalls.c create mode 100644 TP1/Core/Src/sysmem.c create mode 100644 TP1/Core/Src/system_stm32l1xx.c create mode 100644 TP1/Core/Startup/startup_stm32l152retx.s create mode 100644 TP1/Debug/Core/Src/main.cyclo create mode 100644 TP1/Debug/Core/Src/main.d create mode 100644 TP1/Debug/Core/Src/main.o create mode 100644 TP1/Debug/Core/Src/main.su create mode 100644 TP1/Debug/Core/Src/stm32l1xx_hal_msp.cyclo create mode 100644 TP1/Debug/Core/Src/stm32l1xx_hal_msp.d create mode 100644 TP1/Debug/Core/Src/stm32l1xx_hal_msp.o create mode 100644 TP1/Debug/Core/Src/stm32l1xx_hal_msp.su create mode 100644 TP1/Debug/Core/Src/stm32l1xx_it.cyclo create mode 100644 TP1/Debug/Core/Src/stm32l1xx_it.d create mode 100644 TP1/Debug/Core/Src/stm32l1xx_it.o create mode 100644 TP1/Debug/Core/Src/stm32l1xx_it.su create mode 100644 TP1/Debug/Core/Src/subdir.mk create mode 100644 TP1/Debug/Core/Src/syscalls.cyclo create mode 100644 TP1/Debug/Core/Src/syscalls.d create mode 100644 TP1/Debug/Core/Src/syscalls.o create mode 100644 TP1/Debug/Core/Src/syscalls.su create mode 100644 TP1/Debug/Core/Src/sysmem.cyclo create mode 100644 TP1/Debug/Core/Src/sysmem.d create mode 100644 TP1/Debug/Core/Src/sysmem.o create mode 100644 TP1/Debug/Core/Src/sysmem.su create mode 100644 TP1/Debug/Core/Src/system_stm32l1xx.cyclo create mode 100644 TP1/Debug/Core/Src/system_stm32l1xx.d create mode 100644 TP1/Debug/Core/Src/system_stm32l1xx.o create mode 100644 TP1/Debug/Core/Src/system_stm32l1xx.su create mode 100644 TP1/Debug/Core/Startup/startup_stm32l152retx.d create mode 100644 TP1/Debug/Core/Startup/startup_stm32l152retx.o create mode 100644 TP1/Debug/Core/Startup/subdir.mk create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal.cyclo create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal.d create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal.o create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal.su create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_cortex.cyclo create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_cortex.d create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_cortex.o create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_cortex.su create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_dma.cyclo create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_dma.d create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_dma.o create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_dma.su create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_exti.cyclo create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_exti.d create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_exti.o create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_exti.su create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash.cyclo create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash.d create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash.o create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash.su create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ex.cyclo create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ex.d create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ex.o create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ex.su create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ramfunc.cyclo create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ramfunc.d create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ramfunc.o create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ramfunc.su create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_gpio.cyclo create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_gpio.d create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_gpio.o create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_gpio.su create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr.cyclo create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr.d create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr.o create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr.su create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr_ex.cyclo create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr_ex.d create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr_ex.o create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr_ex.su create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc.cyclo create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc.d create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc.o create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc.su create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc_ex.cyclo create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc_ex.d create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc_ex.o create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc_ex.su create mode 100644 TP1/Debug/Drivers/STM32L1xx_HAL_Driver/Src/subdir.mk create mode 100755 TP1/Debug/TP1.elf create mode 100644 TP1/Debug/TP1.list create mode 100644 TP1/Debug/TP1.map create mode 100644 TP1/Debug/makefile create mode 100644 TP1/Debug/objects.list create mode 100644 TP1/Debug/objects.mk create mode 100644 TP1/Debug/sources.mk create mode 100644 TP1/Drivers/CMSIS/Device/ST/STM32L1xx/Include/stm32l152xe.h create mode 100644 TP1/Drivers/CMSIS/Device/ST/STM32L1xx/Include/stm32l1xx.h create mode 100644 TP1/Drivers/CMSIS/Device/ST/STM32L1xx/Include/system_stm32l1xx.h create mode 100644 TP1/Drivers/CMSIS/Device/ST/STM32L1xx/LICENSE.txt create mode 100644 TP1/Drivers/CMSIS/Device/ST/STM32L1xx/License.md create mode 100644 TP1/Drivers/CMSIS/Include/cmsis_armcc.h create mode 100644 TP1/Drivers/CMSIS/Include/cmsis_armclang.h create mode 100644 TP1/Drivers/CMSIS/Include/cmsis_compiler.h create mode 100644 TP1/Drivers/CMSIS/Include/cmsis_gcc.h create mode 100644 TP1/Drivers/CMSIS/Include/cmsis_iccarm.h create mode 100644 TP1/Drivers/CMSIS/Include/cmsis_version.h create mode 100644 TP1/Drivers/CMSIS/Include/core_armv8mbl.h create mode 100644 TP1/Drivers/CMSIS/Include/core_armv8mml.h create mode 100644 TP1/Drivers/CMSIS/Include/core_cm0.h create mode 100644 TP1/Drivers/CMSIS/Include/core_cm0plus.h create mode 100644 TP1/Drivers/CMSIS/Include/core_cm1.h create mode 100644 TP1/Drivers/CMSIS/Include/core_cm23.h create mode 100644 TP1/Drivers/CMSIS/Include/core_cm3.h create mode 100644 TP1/Drivers/CMSIS/Include/core_cm33.h create mode 100644 TP1/Drivers/CMSIS/Include/core_cm4.h create mode 100644 TP1/Drivers/CMSIS/Include/core_cm7.h create mode 100644 TP1/Drivers/CMSIS/Include/core_sc000.h create mode 100644 TP1/Drivers/CMSIS/Include/core_sc300.h create mode 100644 TP1/Drivers/CMSIS/Include/mpu_armv7.h create mode 100644 TP1/Drivers/CMSIS/Include/mpu_armv8.h create mode 100644 TP1/Drivers/CMSIS/Include/tz_context.h create mode 100644 TP1/Drivers/CMSIS/LICENSE.txt create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_cortex.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_def.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_dma.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_exti.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash_ex.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash_ramfunc.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_gpio.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_gpio_ex.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_pwr.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_pwr_ex.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_rcc.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_rcc_ex.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_bus.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_cortex.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_dma.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_exti.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_gpio.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_pwr.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_rcc.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_system.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_utils.h create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/LICENSE.txt create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/License.md create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal.c create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_cortex.c create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_dma.c create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_exti.c create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash.c create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ex.c create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ramfunc.c create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_gpio.c create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr.c create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr_ex.c create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc.c create mode 100644 TP1/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc_ex.c create mode 100644 TP1/STM32L152RETX_FLASH.ld create mode 100644 TP1/STM32L152RETX_RAM.ld create mode 100644 TP1/TP1 Debug.launch create mode 100644 TP1/TP1.ioc diff --git a/TP1/.cproject b/TP1/.cproject new file mode 100644 index 0000000..b2c79b2 --- /dev/null +++ b/TP1/.cproject @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TP1/.mxproject b/TP1/.mxproject new file mode 100644 index 0000000..3d41537 --- /dev/null +++ b/TP1/.mxproject @@ -0,0 +1,25 @@ +[PreviousLibFiles] +LibFiles=Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal.h;Drivers/STM32L1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_def.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_rcc.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_rcc_ex.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_bus.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_rcc.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_crs.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_system.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_utils.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash_ex.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash_ramfunc.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_gpio.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_gpio_ex.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_gpio.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_dma_ex.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_dma.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_dma.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_pwr.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_pwr_ex.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_pwr.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_cortex.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_cortex.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_exti.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_exti.h;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc_ex.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ex.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ramfunc.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_gpio.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_dma.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr_ex.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_cortex.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_exti.c;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal.h;Drivers/STM32L1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_def.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_rcc.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_rcc_ex.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_bus.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_rcc.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_crs.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_system.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_utils.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash_ex.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash_ramfunc.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_gpio.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_gpio_ex.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_gpio.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_dma_ex.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_dma.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_dma.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_pwr.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_pwr_ex.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_pwr.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_cortex.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_cortex.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_exti.h;Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_ll_exti.h;Drivers/CMSIS/Device/ST/STM32L1xx/Include/stm32l152xe.h;Drivers/CMSIS/Device/ST/STM32L1xx/Include/stm32l1xx.h;Drivers/CMSIS/Device/ST/STM32L1xx/Include/system_stm32l1xx.h;Drivers/CMSIS/Device/ST/STM32L1xx/Include/system_stm32l1xx.h;Drivers/CMSIS/Device/ST/STM32L1xx/Source/Templates/system_stm32l1xx.c;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/tz_context.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/cmsis_compiler.h;Drivers/CMSIS/Include/cmsis_armclang.h;Drivers/CMSIS/Include/mpu_armv7.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/cmsis_iccarm.h;Drivers/CMSIS/Include/core_armv8mml.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_cm1.h;Drivers/CMSIS/Include/mpu_armv8.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/cmsis_version.h;Drivers/CMSIS/Include/core_cm23.h;Drivers/CMSIS/Include/core_cm33.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_armv8mbl.h; + +[PreviousUsedCubeIDEFiles] +SourceFiles=Core/Src/main.c;Core/Src/stm32l1xx_it.c;Core/Src/stm32l1xx_hal_msp.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc_ex.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ex.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ramfunc.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_gpio.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_dma.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr_ex.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_cortex.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_exti.c;Drivers/CMSIS/Device/ST/STM32L1xx/Source/Templates/system_stm32l1xx.c;Core/Src/system_stm32l1xx.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc_ex.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ex.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ramfunc.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_gpio.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_dma.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr_ex.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_cortex.c;Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_exti.c;Drivers/CMSIS/Device/ST/STM32L1xx/Source/Templates/system_stm32l1xx.c;Core/Src/system_stm32l1xx.c;;; +HeaderPath=Drivers/STM32L1xx_HAL_Driver/Inc;Drivers/STM32L1xx_HAL_Driver/Inc/Legacy;Drivers/CMSIS/Device/ST/STM32L1xx/Include;Drivers/CMSIS/Include;Core/Inc; +CDefines=USE_HAL_DRIVER;STM32L152xE;USE_HAL_DRIVER;USE_HAL_DRIVER; + +[PreviousGenFiles] +AdvancedFolderStructure=true +HeaderFileListSize=3 +HeaderFiles#0=../Core/Inc/stm32l1xx_it.h +HeaderFiles#1=../Core/Inc/stm32l1xx_hal_conf.h +HeaderFiles#2=../Core/Inc/main.h +HeaderFolderListSize=1 +HeaderPath#0=../Core/Inc +HeaderFiles=; +SourceFileListSize=3 +SourceFiles#0=../Core/Src/stm32l1xx_it.c +SourceFiles#1=../Core/Src/stm32l1xx_hal_msp.c +SourceFiles#2=../Core/Src/main.c +SourceFolderListSize=1 +SourcePath#0=../Core/Src +SourceFiles=; + diff --git a/TP1/.project b/TP1/.project new file mode 100644 index 0000000..31e5576 --- /dev/null +++ b/TP1/.project @@ -0,0 +1,32 @@ + + + TP1 + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.st.stm32cube.ide.mcu.MCUProjectNature + com.st.stm32cube.ide.mcu.MCUCubeProjectNature + org.eclipse.cdt.core.cnature + com.st.stm32cube.ide.mcu.MCUCubeIdeServicesRevAev2ProjectNature + com.st.stm32cube.ide.mcu.MCUAdvancedStructureProjectNature + com.st.stm32cube.ide.mcu.MCUSingleCpuProjectNature + com.st.stm32cube.ide.mcu.MCURootProjectNature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/TP1/.settings/language.settings.xml b/TP1/.settings/language.settings.xml new file mode 100644 index 0000000..6dcbf4b --- /dev/null +++ b/TP1/.settings/language.settings.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TP1/.settings/org.eclipse.core.resources.prefs b/TP1/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/TP1/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/TP1/.settings/stm32cubeide.project.prefs b/TP1/.settings/stm32cubeide.project.prefs new file mode 100644 index 0000000..2ee3478 --- /dev/null +++ b/TP1/.settings/stm32cubeide.project.prefs @@ -0,0 +1,5 @@ +635E684B79701B039C64EA45C3F84D30=20408E19A1D483CC68E7BF859CC595B4 +66BE74F758C12D739921AEA421D593D3=1 +8DF89ED150041C4CBC7CB9A9CAA90856=787343FA0477F66DEA4B2B86368887F5 +DC22A860405A8BF2F2C095E5B6529F12=787343FA0477F66DEA4B2B86368887F5 +eclipse.preferences.version=1 diff --git a/TP1/Core/Inc/main.h b/TP1/Core/Inc/main.h new file mode 100644 index 0000000..f645caf --- /dev/null +++ b/TP1/Core/Inc/main.h @@ -0,0 +1,69 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 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. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l1xx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ diff --git a/TP1/Core/Inc/stm32l1xx_hal_conf.h b/TP1/Core/Inc/stm32l1xx_hal_conf.h new file mode 100644 index 0000000..df67bc1 --- /dev/null +++ b/TP1/Core/Inc/stm32l1xx_hal_conf.h @@ -0,0 +1,318 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32l1xx_hal_conf.h + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 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. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32L1xx_HAL_CONF_H +#define __STM32L1xx_HAL_CONF_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** + * @brief This is the list of modules to be used in the HAL driver + */ + +#define HAL_MODULE_ENABLED +/*#define HAL_ADC_MODULE_ENABLED */ +/*#define HAL_CRYP_MODULE_ENABLED */ +/*#define HAL_COMP_MODULE_ENABLED */ +/*#define HAL_CRC_MODULE_ENABLED */ +/*#define HAL_CRYP_MODULE_ENABLED */ +/*#define HAL_DAC_MODULE_ENABLED */ +/*#define HAL_I2C_MODULE_ENABLED */ +/*#define HAL_I2S_MODULE_ENABLED */ +/*#define HAL_IRDA_MODULE_ENABLED */ +/*#define HAL_IWDG_MODULE_ENABLED */ +/*#define HAL_LCD_MODULE_ENABLED */ +/*#define HAL_NOR_MODULE_ENABLED */ +/*#define HAL_OPAMP_MODULE_ENABLED */ +/*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_RTC_MODULE_ENABLED */ +/*#define HAL_SD_MODULE_ENABLED */ +/*#define HAL_SMARTCARD_MODULE_ENABLED */ +/*#define HAL_SPI_MODULE_ENABLED */ +/*#define HAL_SRAM_MODULE_ENABLED */ +/*#define HAL_TIM_MODULE_ENABLED */ +/*#define HAL_UART_MODULE_ENABLED */ +/*#define HAL_USART_MODULE_ENABLED */ +/*#define HAL_WWDG_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED + +/* ########################## Oscillator Values adaptation ####################*/ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)24000000) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief Internal Multiple Speed oscillator (MSI) default value. + * This value is the default MSI range value after Reset. + */ +#if !defined (MSI_VALUE) + #define MSI_VALUE ((uint32_t)2097000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* MSI_VALUE */ +/** + * @brief Internal High Speed oscillator (HSI) value. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSI is used as system clock source, directly or through the PLL). + */ +#if !defined (HSI_VALUE) + #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) + #define LSI_VALUE (37000U) /*!< LSI Typical Value in Hz*/ +#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz + The real value may vary depending on the variations + in voltage and temperature.*/ + +/** + * @brief External Low Speed oscillator (LSE) value. + * This value is used by the UART, RTC HAL module to compute the system frequency + */ +#if !defined (LSE_VALUE) + #define LSE_VALUE ((uint32_t)32768) /*!< Value of the External oscillator in Hz*/ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for LSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/* Tip: To avoid modifying this file each time you need to use different HSE, + === you can define the HSE value in your toolchain compiler preprocessor. */ + +/* ########################### System Configuration ######################### */ +/** + * @brief This is the HAL system configuration section + */ + +#define VDD_VALUE ((uint32_t)3300) /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY ((uint32_t)15) /*!< tick interrupt priority */ +#define USE_RTOS 0 +#define PREFETCH_ENABLE 0 +#define INSTRUCTION_CACHE_ENABLE 1 +#define DATA_CACHE_ENABLE 1 + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* ################## Register callback feature configuration ############### */ +/** + * @brief Set below the peripheral configuration to "1U" to add the support + * of HAL callback registration/deregistration feature for the HAL + * driver(s). This allows user application to provide specific callback + * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting + * the default weak callback functions (see each stm32l0xx_hal_ppp.h file + * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef + * for each PPP peripheral). + */ +#define USE_HAL_ADC_REGISTER_CALLBACKS 0U +#define USE_HAL_COMP_REGISTER_CALLBACKS 0U +#define USE_HAL_DAC_REGISTER_CALLBACKS 0U +#define USE_HAL_I2C_REGISTER_CALLBACKS 0U +#define USE_HAL_I2S_REGISTER_CALLBACKS 0U +#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U +#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U +#define USE_HAL_PCD_REGISTER_CALLBACKS 0U +#define USE_HAL_RTC_REGISTER_CALLBACKS 0U +#define USE_HAL_SDMMC_REGISTER_CALLBACKS 0U +#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U +#define USE_HAL_SPI_REGISTER_CALLBACKS 0U +#define USE_HAL_TIM_REGISTER_CALLBACKS 0U +#define USE_HAL_UART_REGISTER_CALLBACKS 0U +#define USE_HAL_USART_REGISTER_CALLBACKS 0U +#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U + +/* ################## SPI peripheral configuration ########################## */ + +/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver + * Activated: CRC code is present inside driver + * Deactivated: CRC code cleaned from driver + */ + +#define USE_SPI_CRC 0U +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED + #include "stm32l1xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32l1xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32l1xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32l1xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32l1xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_COMP_MODULE_ENABLED + #include "stm32l1xx_hal_comp.h" +#endif /* HAL_COMP_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32l1xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED + #include "stm32l1xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32l1xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32l1xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32l1xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32l1xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32l1xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32l1xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32l1xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LCD_MODULE_ENABLED + #include "stm32l1xx_hal_lcd.h" +#endif /* HAL_LCD_MODULE_ENABLED */ + +#ifdef HAL_OPAMP_MODULE_ENABLED + #include "stm32l1xx_hal_opamp.h" +#endif /* HAL_OPAMP_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32l1xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32l1xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32l1xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32l1xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32l1xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32l1xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32l1xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32l1xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32l1xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32l1xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32l1xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32l1xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32L1xx_HAL_CONF_H */ + diff --git a/TP1/Core/Inc/stm32l1xx_it.h b/TP1/Core/Inc/stm32l1xx_it.h new file mode 100644 index 0000000..2c5eb24 --- /dev/null +++ b/TP1/Core/Inc/stm32l1xx_it.h @@ -0,0 +1,66 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32l1xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 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. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32L1xx_IT_H +#define __STM32L1xx_IT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32L1xx_IT_H */ diff --git a/TP1/Core/Src/main.c b/TP1/Core/Src/main.c new file mode 100644 index 0000000..6c1b976 --- /dev/null +++ b/TP1/Core/Src/main.c @@ -0,0 +1,180 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 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. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ + +/* USER CODE BEGIN PV */ +uint8_t i; +uint8_t somme=1; +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + for(i = 2; i <= 20; i++) + somme=somme+i; + + while(1) { + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI; + RCC_OscInitStruct.MSIState = RCC_MSI_ON; + RCC_OscInitStruct.MSICalibrationValue = 0; + RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_5; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) + { + Error_Handler(); + } +} + +/* USER CODE BEGIN 4 */ + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + __disable_irq(); + while (1) + { + } + /* USER CODE END Error_Handler_Debug */ +} + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t *file, uint32_t line) +{ + /* USER CODE BEGIN 6 */ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + /* USER CODE END 6 */ +} +#endif /* USE_FULL_ASSERT */ diff --git a/TP1/Core/Src/stm32l1xx_hal_msp.c b/TP1/Core/Src/stm32l1xx_hal_msp.c new file mode 100644 index 0000000..869ce28 --- /dev/null +++ b/TP1/Core/Src/stm32l1xx_hal_msp.c @@ -0,0 +1,83 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32l1xx_hal_msp.c + * @brief This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 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. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_COMP_CLK_ENABLE(); + __HAL_RCC_SYSCFG_CLK_ENABLE(); + __HAL_RCC_PWR_CLK_ENABLE(); + + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/TP1/Core/Src/stm32l1xx_it.c b/TP1/Core/Src/stm32l1xx_it.c new file mode 100644 index 0000000..afd5dcc --- /dev/null +++ b/TP1/Core/Src/stm32l1xx_it.c @@ -0,0 +1,203 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32l1xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 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. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32l1xx_it.h" +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* External variables --------------------------------------------------------*/ + +/* USER CODE BEGIN EV */ + +/* USER CODE END EV */ + +/******************************************************************************/ +/* Cortex-M3 Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + while (1) + { + } + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_HardFault_IRQn 0 */ + /* USER CODE END W1_HardFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ + /* USER CODE END W1_MemoryManagement_IRQn 0 */ + } +} + +/** + * @brief This function handles Pre-fetch fault, memory access fault. + */ +void BusFault_Handler(void) +{ + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_BusFault_IRQn 0 */ + /* USER CODE END W1_BusFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) +{ + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ + /* USER CODE END W1_UsageFault_IRQn 0 */ + } +} + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVC_IRQn 0 */ + + /* USER CODE END SVC_IRQn 0 */ + /* USER CODE BEGIN SVC_IRQn 1 */ + + /* USER CODE END SVC_IRQn 1 */ +} + +/** + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) +{ + /* USER CODE BEGIN DebugMonitor_IRQn 0 */ + + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + + /* USER CODE END DebugMonitor_IRQn 1 */ +} + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + +/******************************************************************************/ +/* STM32L1xx Peripheral Interrupt Handlers */ +/* Add here the Interrupt Handlers for the used peripherals. */ +/* For the available peripheral interrupt handler names, */ +/* please refer to the startup file (startup_stm32l1xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/TP1/Core/Src/syscalls.c b/TP1/Core/Src/syscalls.c new file mode 100644 index 0000000..8884b5a --- /dev/null +++ b/TP1/Core/Src/syscalls.c @@ -0,0 +1,176 @@ +/** + ****************************************************************************** + * @file syscalls.c + * @author Auto-generated by STM32CubeIDE + * @brief STM32CubeIDE Minimal System calls file + * + * For more information about which c-functions + * need which of these lowlevel functions + * please consult the Newlib libc-manual + ****************************************************************************** + * @attention + * + * Copyright (c) 2020-2025 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. + * + ****************************************************************************** + */ + +/* Includes */ +#include +#include +#include +#include +#include +#include +#include +#include + + +/* Variables */ +extern int __io_putchar(int ch) __attribute__((weak)); +extern int __io_getchar(void) __attribute__((weak)); + + +char *__env[1] = { 0 }; +char **environ = __env; + + +/* Functions */ +void initialise_monitor_handles() +{ +} + +int _getpid(void) +{ + return 1; +} + +int _kill(int pid, int sig) +{ + (void)pid; + (void)sig; + errno = EINVAL; + return -1; +} + +void _exit (int status) +{ + _kill(status, -1); + while (1) {} /* Make sure we hang here */ +} + +__attribute__((weak)) int _read(int file, char *ptr, int len) +{ + (void)file; + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) + { + *ptr++ = __io_getchar(); + } + + return len; +} + +__attribute__((weak)) int _write(int file, char *ptr, int len) +{ + (void)file; + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) + { + __io_putchar(*ptr++); + } + return len; +} + +int _close(int file) +{ + (void)file; + return -1; +} + + +int _fstat(int file, struct stat *st) +{ + (void)file; + st->st_mode = S_IFCHR; + return 0; +} + +int _isatty(int file) +{ + (void)file; + return 1; +} + +int _lseek(int file, int ptr, int dir) +{ + (void)file; + (void)ptr; + (void)dir; + return 0; +} + +int _open(char *path, int flags, ...) +{ + (void)path; + (void)flags; + /* Pretend like we always fail */ + return -1; +} + +int _wait(int *status) +{ + (void)status; + errno = ECHILD; + return -1; +} + +int _unlink(char *name) +{ + (void)name; + errno = ENOENT; + return -1; +} + +int _times(struct tms *buf) +{ + (void)buf; + return -1; +} + +int _stat(char *file, struct stat *st) +{ + (void)file; + st->st_mode = S_IFCHR; + return 0; +} + +int _link(char *old, char *new) +{ + (void)old; + (void)new; + errno = EMLINK; + return -1; +} + +int _fork(void) +{ + errno = EAGAIN; + return -1; +} + +int _execve(char *name, char **argv, char **env) +{ + (void)name; + (void)argv; + (void)env; + errno = ENOMEM; + return -1; +} diff --git a/TP1/Core/Src/sysmem.c b/TP1/Core/Src/sysmem.c new file mode 100644 index 0000000..5d9f7e6 --- /dev/null +++ b/TP1/Core/Src/sysmem.c @@ -0,0 +1,79 @@ +/** + ****************************************************************************** + * @file sysmem.c + * @author Generated by STM32CubeIDE + * @brief STM32CubeIDE System Memory calls file + * + * For more information about which C functions + * need which of these lowlevel functions + * please consult the newlib libc manual + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 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. + * + ****************************************************************************** + */ + +/* Includes */ +#include +#include + +/** + * Pointer to the current high watermark of the heap usage + */ +static uint8_t *__sbrk_heap_end = NULL; + +/** + * @brief _sbrk() allocates memory to the newlib heap and is used by malloc + * and others from the C library + * + * @verbatim + * ############################################################################ + * # .data # .bss # newlib heap # MSP stack # + * # # # # Reserved by _Min_Stack_Size # + * ############################################################################ + * ^-- RAM start ^-- _end _estack, RAM end --^ + * @endverbatim + * + * This implementation starts allocating at the '_end' linker symbol + * The '_Min_Stack_Size' linker symbol reserves a memory for the MSP stack + * The implementation considers '_estack' linker symbol to be RAM end + * NOTE: If the MSP stack, at any point during execution, grows larger than the + * reserved size, please increase the '_Min_Stack_Size'. + * + * @param incr Memory size + * @return Pointer to allocated memory + */ +void *_sbrk(ptrdiff_t incr) +{ + extern uint8_t _end; /* Symbol defined in the linker script */ + extern uint8_t _estack; /* Symbol defined in the linker script */ + extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */ + const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size; + const uint8_t *max_heap = (uint8_t *)stack_limit; + uint8_t *prev_heap_end; + + /* Initialize heap end at first call */ + if (NULL == __sbrk_heap_end) + { + __sbrk_heap_end = &_end; + } + + /* Protect heap from growing into the reserved MSP stack */ + if (__sbrk_heap_end + incr > max_heap) + { + errno = ENOMEM; + return (void *)-1; + } + + prev_heap_end = __sbrk_heap_end; + __sbrk_heap_end += incr; + + return (void *)prev_heap_end; +} diff --git a/TP1/Core/Src/system_stm32l1xx.c b/TP1/Core/Src/system_stm32l1xx.c new file mode 100644 index 0000000..093a38b --- /dev/null +++ b/TP1/Core/Src/system_stm32l1xx.c @@ -0,0 +1,428 @@ +/** + ****************************************************************************** + * @file system_stm32l1xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * + * This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32l1xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2017-2021 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. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32l1xx_system + * @{ + */ + +/** @addtogroup STM32L1xx_System_Private_Includes + * @{ + */ + +#include "stm32l1xx.h" + +/** + * @} + */ + +/** @addtogroup STM32L1xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32L1xx_System_Private_Defines + * @{ + */ +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)8000000U) /*!< Default value of the External oscillator in Hz. + This value can be provided and adapted by the user application. */ +#endif /* HSE_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE ((uint32_t)16000000U) /*!< Default value of the Internal oscillator in Hz. + This value can be provided and adapted by the user application. */ +#endif /* HSI_VALUE */ + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM32L152D_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/* Note: Following vector table addresses must be defined in line with linker + configuration. */ +/*!< Uncomment the following line if you need to relocate the vector table + anywhere in Flash or Sram, else the vector table is kept at the automatic + remap of boot address selected */ +/* #define USER_VECT_TAB_ADDRESS */ + +#if defined(USER_VECT_TAB_ADDRESS) +/*!< Uncomment the following line if you need to relocate your vector Table + in Sram else user remap will be done in Flash. */ +/* #define VECT_TAB_SRAM */ +#if defined(VECT_TAB_SRAM) +#define VECT_TAB_BASE_ADDRESS SRAM_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x200. */ +#else +#define VECT_TAB_BASE_ADDRESS FLASH_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x200. */ +#endif /* VECT_TAB_SRAM */ + +#if !defined(VECT_TAB_OFFSET) +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table offset field. + This value must be a multiple of 0x200. */ +#endif /* VECT_TAB_OFFSET */ + +#endif /* USER_VECT_TAB_ADDRESS */ + +/******************************************************************************/ +/** + * @} + */ + +/** @addtogroup STM32L1xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32L1xx_System_Private_Variables + * @{ + */ + /* This variable is updated in three ways: + 1) by calling CMSIS function SystemCoreClockUpdate() + 2) by calling HAL API function HAL_RCC_GetHCLKFreq() + 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency + Note: If you use this function to configure the system clock; then there + is no need to call the 2 first functions listed above, since SystemCoreClock + variable is updated automatically. + */ +uint32_t SystemCoreClock = 2097000U; +const uint8_t PLLMulTable[9] = {3U, 4U, 6U, 8U, 12U, 16U, 24U, 32U, 48U}; +const uint8_t AHBPrescTable[16] = {0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U, 6U, 7U, 8U, 9U}; +const uint8_t APBPrescTable[8] = {0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U}; + +/** + * @} + */ + +/** @addtogroup STM32L1xx_System_Private_FunctionPrototypes + * @{ + */ + +#if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD) +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ +#endif /* STM32L151xD || STM32L152xD || STM32L162xD */ + +/** + * @} + */ + +/** @addtogroup STM32L1xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system. + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemCoreClock variable. + * @param None + * @retval None + */ +void SystemInit (void) +{ +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the Vector Table location -------------------------------------*/ +#if defined(USER_VECT_TAB_ADDRESS) + SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */ +#endif /* USER_VECT_TAB_ADDRESS */ +} + +/** + * @brief Update SystemCoreClock according to Clock Register Values + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is MSI, SystemCoreClock will contain the MSI + * value as defined by the MSI range. + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32l1xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32l1xx.h file (default value + * 8 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * @param None + * @retval None + */ +void SystemCoreClockUpdate (void) +{ + uint32_t tmp = 0, pllmul = 0, plldiv = 0, pllsource = 0, msirange = 0; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* MSI used as system clock */ + msirange = (RCC->ICSCR & RCC_ICSCR_MSIRANGE) >> 13; + SystemCoreClock = (32768 * (1 << (msirange + 1))); + break; + case 0x04: /* HSI used as system clock */ + SystemCoreClock = HSI_VALUE; + break; + case 0x08: /* HSE used as system clock */ + SystemCoreClock = HSE_VALUE; + break; + case 0x0C: /* PLL used as system clock */ + /* Get PLL clock source and multiplication factor ----------------------*/ + pllmul = RCC->CFGR & RCC_CFGR_PLLMUL; + plldiv = RCC->CFGR & RCC_CFGR_PLLDIV; + pllmul = PLLMulTable[(pllmul >> 18)]; + plldiv = (plldiv >> 22) + 1; + + pllsource = RCC->CFGR & RCC_CFGR_PLLSRC; + + if (pllsource == 0x00) + { + /* HSI oscillator clock selected as PLL clock entry */ + SystemCoreClock = (((HSI_VALUE) * pllmul) / plldiv); + } + else + { + /* HSE selected as PLL clock entry */ + SystemCoreClock = (((HSE_VALUE) * pllmul) / plldiv); + } + break; + default: /* MSI used as system clock */ + msirange = (RCC->ICSCR & RCC_ICSCR_MSIRANGE) >> 13; + SystemCoreClock = (32768 * (1 << (msirange + 1))); + break; + } + /* Compute HCLK clock frequency --------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK clock frequency */ + SystemCoreClock >>= tmp; +} + +#if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD) +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in SystemInit() function before jump to main. + * This function configures the external SRAM mounted on STM32L152D_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ + __IO uint32_t tmpreg = 0; + + /* Flash 1 wait state */ + FLASH->ACR |= FLASH_ACR_LATENCY; + + /* Power enable */ + RCC->APB1ENR |= RCC_APB1ENR_PWREN; + + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN); + + /* Select the Voltage Range 1 (1.8 V) */ + PWR->CR = PWR_CR_VOS_0; + + /* Wait Until the Voltage Regulator is ready */ + while((PWR->CSR & PWR_CSR_VOSF) != RESET) + { + } + +/*-- GPIOs Configuration -----------------------------------------------------*/ +/* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE7 <-> FSMC_D4 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE8 <-> FSMC_D5 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE9 <-> FSMC_D6 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE10 <-> FSMC_D7 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8 | PF12 <-> FSMC_A6 | PG10<-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10 | PF14 <-> FSMC_A8 | + | PD13 <-> FSMC_A18 | PE14 <-> FSMC_D11 | PF15 <-> FSMC_A9 | + | PD14 <-> FSMC_D0 | PE15 <-> FSMC_D12 |------------------+ + | PD15 <-> FSMC_D1 |--------------------+ + +-------------------+ +*/ + + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHBENR = 0x000080D8; + + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIODEN); + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00CC00CC; + GPIOD->AFR[1] = 0xCCCCCCCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xAAAA0A0A; + /* Configure PDx pins speed to 40 MHz */ + GPIOD->OSPEEDR = 0xFFFF0F0F; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xC00000CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA800A; + /* Configure PEx pins speed to 40 MHz */ + GPIOE->OSPEEDR = 0xFFFFC00F; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00CCCCCC; + GPIOF->AFR[1] = 0xCCCC0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA000AAA; + /* Configure PFx pins speed to 40 MHz */ + GPIOF->OSPEEDR = 0xFF000FFF; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00CCCCCC; + GPIOG->AFR[1] = 0x00000C00; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00200AAA; + /* Configure PGx pins speed to 40 MHz */ + GPIOG->OSPEEDR = 0x00300FFF; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHBENR = 0x400080D8; + + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN); + + (void)(tmpreg); + + /* Configure and enable Bank1_SRAM3 */ + FSMC_Bank1->BTCR[4] = 0x00001011; + FSMC_Bank1->BTCR[5] = 0x00000300; + FSMC_Bank1E->BWTR[4] = 0x0FFFFFFF; +/* + Bank1_SRAM3 is configured as follow: + + p.FSMC_AddressSetupTime = 0; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 3; + p.FSMC_BusTurnAroundDuration = 0; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; + + FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); + + FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE); +*/ + +} +#endif /* DATA_IN_ExtSRAM */ +#endif /* STM32L151xD || STM32L152xD || STM32L162xD */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + + diff --git a/TP1/Core/Startup/startup_stm32l152retx.s b/TP1/Core/Startup/startup_stm32l152retx.s new file mode 100644 index 0000000..d3dd841 --- /dev/null +++ b/TP1/Core/Startup/startup_stm32l152retx.s @@ -0,0 +1,413 @@ +/** + ****************************************************************************** + * @file startup_stm32l152xe.s + * @author MCD Application Team + * @brief STM32L152XE 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 + * - Configure the clock system + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017-2021 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-m3 + .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 + +.equ BootRAM, 0xF108F85F +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + + +/* 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 + bx lr +.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 M3. 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 MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler + .word PVD_IRQHandler + .word TAMPER_STAMP_IRQHandler + .word RTC_WKUP_IRQHandler + .word FLASH_IRQHandler + .word RCC_IRQHandler + .word EXTI0_IRQHandler + .word EXTI1_IRQHandler + .word EXTI2_IRQHandler + .word EXTI3_IRQHandler + .word EXTI4_IRQHandler + .word DMA1_Channel1_IRQHandler + .word DMA1_Channel2_IRQHandler + .word DMA1_Channel3_IRQHandler + .word DMA1_Channel4_IRQHandler + .word DMA1_Channel5_IRQHandler + .word DMA1_Channel6_IRQHandler + .word DMA1_Channel7_IRQHandler + .word ADC1_IRQHandler + .word USB_HP_IRQHandler + .word USB_LP_IRQHandler + .word DAC_IRQHandler + .word COMP_IRQHandler + .word EXTI9_5_IRQHandler + .word LCD_IRQHandler + .word TIM9_IRQHandler + .word TIM10_IRQHandler + .word TIM11_IRQHandler + .word TIM2_IRQHandler + .word TIM3_IRQHandler + .word TIM4_IRQHandler + .word I2C1_EV_IRQHandler + .word I2C1_ER_IRQHandler + .word I2C2_EV_IRQHandler + .word I2C2_ER_IRQHandler + .word SPI1_IRQHandler + .word SPI2_IRQHandler + .word USART1_IRQHandler + .word USART2_IRQHandler + .word USART3_IRQHandler + .word EXTI15_10_IRQHandler + .word RTC_Alarm_IRQHandler + .word USB_FS_WKUP_IRQHandler + .word TIM6_IRQHandler + .word TIM7_IRQHandler + .word 0 + .word TIM5_IRQHandler + .word SPI3_IRQHandler + .word UART4_IRQHandler + .word UART5_IRQHandler + .word DMA2_Channel1_IRQHandler + .word DMA2_Channel2_IRQHandler + .word DMA2_Channel3_IRQHandler + .word DMA2_Channel4_IRQHandler + .word DMA2_Channel5_IRQHandler + .word 0 + .word COMP_ACQ_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word BootRAM /* @0x108. This is for boot in RAM mode for + STM32L152XE devices. */ + +/******************************************************************************* +* +* 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 MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_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_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMPER_STAMP_IRQHandler + .thumb_set TAMPER_STAMP_IRQHandler,Default_Handler + + .weak RTC_WKUP_IRQHandler + .thumb_set RTC_WKUP_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak RCC_IRQHandler + .thumb_set RCC_IRQHandler,Default_Handler + + .weak EXTI0_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak ADC1_IRQHandler + .thumb_set ADC1_IRQHandler,Default_Handler + + .weak USB_HP_IRQHandler + .thumb_set USB_HP_IRQHandler,Default_Handler + + .weak USB_LP_IRQHandler + .thumb_set USB_LP_IRQHandler,Default_Handler + + .weak DAC_IRQHandler + .thumb_set DAC_IRQHandler,Default_Handler + + .weak COMP_IRQHandler + .thumb_set COMP_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak LCD_IRQHandler + .thumb_set LCD_IRQHandler,Default_Handler + + .weak TIM9_IRQHandler + .thumb_set TIM9_IRQHandler,Default_Handler + + .weak TIM10_IRQHandler + .thumb_set TIM10_IRQHandler,Default_Handler + + .weak TIM11_IRQHandler + .thumb_set TIM11_IRQHandler,Default_Handler + + .weak TIM2_IRQHandler + .thumb_set TIM2_IRQHandler,Default_Handler + + .weak TIM3_IRQHandler + .thumb_set TIM3_IRQHandler,Default_Handler + + .weak TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_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_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTC_Alarm_IRQHandler + .thumb_set RTC_Alarm_IRQHandler,Default_Handler + + .weak USB_FS_WKUP_IRQHandler + .thumb_set USB_FS_WKUP_IRQHandler,Default_Handler + + .weak TIM6_IRQHandler + .thumb_set TIM6_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + + .weak TIM5_IRQHandler + .thumb_set TIM5_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak DMA2_Channel1_IRQHandler + .thumb_set DMA2_Channel1_IRQHandler,Default_Handler + + .weak DMA2_Channel2_IRQHandler + .thumb_set DMA2_Channel2_IRQHandler,Default_Handler + + .weak DMA2_Channel3_IRQHandler + .thumb_set DMA2_Channel3_IRQHandler,Default_Handler + + .weak DMA2_Channel4_IRQHandler + .thumb_set DMA2_Channel4_IRQHandler,Default_Handler + + .weak DMA2_Channel5_IRQHandler + .thumb_set DMA2_Channel5_IRQHandler,Default_Handler + + .weak COMP_ACQ_IRQHandler + .thumb_set COMP_ACQ_IRQHandler,Default_Handler + + + diff --git a/TP1/Debug/Core/Src/main.cyclo b/TP1/Debug/Core/Src/main.cyclo new file mode 100644 index 0000000..a656dd8 --- /dev/null +++ b/TP1/Debug/Core/Src/main.cyclo @@ -0,0 +1,3 @@ +../Core/Src/main.c:64:5:main 2 +../Core/Src/main.c:109:6:SystemClock_Config 3 +../Core/Src/main.c:154:6:Error_Handler 1 diff --git a/TP1/Debug/Core/Src/main.d b/TP1/Debug/Core/Src/main.d new file mode 100644 index 0000000..6776fdf --- /dev/null +++ b/TP1/Debug/Core/Src/main.d @@ -0,0 +1,50 @@ +Core/Src/main.o: ../Core/Src/main.c ../Core/Inc/main.h \ + ../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal.h \ + ../Core/Inc/stm32l1xx_hal_conf.h \ + ../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_rcc.h \ + ../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32L1xx/Include/stm32l1xx.h \ + ../Drivers/CMSIS/Device/ST/STM32L1xx/Include/stm32l152xe.h \ + ../Drivers/CMSIS/Include/core_cm3.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32L1xx/Include/system_stm32l1xx.h \ + ../Drivers/STM32L1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_rcc_ex.h \ + ../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_gpio.h \ + ../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_gpio_ex.h \ + ../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_dma.h \ + ../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_cortex.h \ + ../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash.h \ + ../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash_ex.h \ + ../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash_ramfunc.h \ + ../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_pwr.h \ + ../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_pwr_ex.h \ + ../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_exti.h +../Core/Inc/main.h: +../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal.h: +../Core/Inc/stm32l1xx_hal_conf.h: +../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_rcc.h: +../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32L1xx/Include/stm32l1xx.h: +../Drivers/CMSIS/Device/ST/STM32L1xx/Include/stm32l152xe.h: +../Drivers/CMSIS/Include/core_cm3.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32L1xx/Include/system_stm32l1xx.h: +../Drivers/STM32L1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_rcc_ex.h: +../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_gpio.h: +../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_gpio_ex.h: +../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_dma.h: +../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_cortex.h: +../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash.h: +../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash_ex.h: +../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash_ramfunc.h: +../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_pwr.h: +../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_pwr_ex.h: +../Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_exti.h: diff --git a/TP1/Debug/Core/Src/main.o b/TP1/Debug/Core/Src/main.o new file mode 100644 index 0000000000000000000000000000000000000000..b6d3c87cd38f9079197643dbb7a31d82520e00a5 GIT binary patch literal 702600 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%0A&4 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