From 0f5ae3cd7333189a1657d8621f92fe15a82e05ac Mon Sep 17 00:00:00 2001 From: Jan Mrna Date: Thu, 9 Nov 2023 20:49:16 +0100 Subject: [PATCH] Cleanup: deleted fw_old --- fw_old/.cproject | 396 - fw_old/.mxproject | 24 - fw_old/.project | 33 - .../org.eclipse.cdt.codan.core.prefs | 72 - fw_old/.settings/org.eclipse.cdt.core.prefs | 6 - fw_old/.settings/stm32cubeide.project.prefs | 3 - fw_old/Core/Inc/config.h | 145 - fw_old/Core/Inc/crc8.h | 22 - fw_old/Core/Inc/i2c.h | 46 - fw_old/Core/Inc/main.h | 120 - fw_old/Core/Inc/modbus.h | 181 - fw_old/Core/Inc/scd4x.h | 57 - fw_old/Core/Inc/sht4x.h | 57 - fw_old/Core/Inc/sps30.h | 78 - fw_old/Core/Inc/stm32_assert.h | 53 - fw_old/Core/Inc/stm32l0xx_it.h | 65 - fw_old/Core/Src/config.c | 243 - fw_old/Core/Src/crc8.c | 28 - fw_old/Core/Src/i2c.c | 78 - fw_old/Core/Src/main.c | 829 -- fw_old/Core/Src/modbus.c | 265 - fw_old/Core/Src/scd4x.c | 109 - fw_old/Core/Src/sht4x.c | 63 - fw_old/Core/Src/sps30.c | 193 - fw_old/Core/Src/stm32l0xx_it.c | 208 - fw_old/Core/Src/syscalls.c | 159 - fw_old/Core/Src/sysmem.c | 80 - fw_old/Core/Src/system_stm32l0xx.c | 275 - fw_old/Core/Startup/startup_stm32l011f4ux.s | 278 - fw_old/Debug/Core/Src/config.d | 24 - fw_old/Debug/Core/Src/config.o | Bin 292824 -> 0 bytes fw_old/Debug/Core/Src/config.su | 7 - fw_old/Debug/Core/Src/crc8.d | 3 - fw_old/Debug/Core/Src/crc8.o | Bin 30152 -> 0 bytes fw_old/Debug/Core/Src/crc8.su | 1 - fw_old/Debug/Core/Src/i2c.d | 30 - fw_old/Debug/Core/Src/i2c.o | Bin 300824 -> 0 bytes fw_old/Debug/Core/Src/i2c.su | 11 - fw_old/Debug/Core/Src/main.d | 80 - fw_old/Debug/Core/Src/main.o | Bin 388516 -> 0 bytes fw_old/Debug/Core/Src/main.su | 65 - fw_old/Debug/Core/Src/modbus.d | 3 - fw_old/Debug/Core/Src/modbus.o | Bin 39004 -> 0 bytes fw_old/Debug/Core/Src/modbus.su | 4 - fw_old/Debug/Core/Src/scd4x.d | 82 - fw_old/Debug/Core/Src/scd4x.o | Bin 347904 -> 0 bytes fw_old/Debug/Core/Src/scd4x.su | 6 - fw_old/Debug/Core/Src/sht4x.d | 82 - fw_old/Debug/Core/Src/sht4x.o | Bin 346516 -> 0 bytes fw_old/Debug/Core/Src/sht4x.su | 3 - fw_old/Debug/Core/Src/sps30.d | 35 - fw_old/Debug/Core/Src/sps30.o | Bin 298636 -> 0 bytes fw_old/Debug/Core/Src/sps30.su | 11 - fw_old/Debug/Core/Src/stm32l0xx_it.d | 84 - fw_old/Debug/Core/Src/stm32l0xx_it.o | Bin 351652 -> 0 bytes fw_old/Debug/Core/Src/stm32l0xx_it.su | 15 - fw_old/Debug/Core/Src/subdir.mk | 53 - fw_old/Debug/Core/Src/syscalls.d | 1 - fw_old/Debug/Core/Src/syscalls.o | Bin 81360 -> 0 bytes fw_old/Debug/Core/Src/syscalls.su | 18 - fw_old/Debug/Core/Src/sysmem.d | 1 - fw_old/Debug/Core/Src/sysmem.o | Bin 51340 -> 0 bytes fw_old/Debug/Core/Src/sysmem.su | 1 - fw_old/Debug/Core/Src/system_stm32l0xx.d | 22 - fw_old/Debug/Core/Src/system_stm32l0xx.o | Bin 286844 -> 0 bytes fw_old/Debug/Core/Src/system_stm32l0xx.su | 2 - .../Core/Startup/startup_stm32l011f4ux.d | 2 - .../Core/Startup/startup_stm32l011f4ux.o | Bin 4056 -> 0 bytes fw_old/Debug/Core/Startup/subdir.mk | 20 - .../Src/stm32l0xx_ll_dma.d | 29 - .../Src/stm32l0xx_ll_dma.o | Bin 303160 -> 0 bytes .../Src/stm32l0xx_ll_dma.su | 15 - .../Src/stm32l0xx_ll_exti.d | 26 - .../Src/stm32l0xx_ll_exti.o | Bin 292488 -> 0 bytes .../Src/stm32l0xx_ll_exti.su | 11 - .../Src/stm32l0xx_ll_gpio.d | 29 - .../Src/stm32l0xx_ll_gpio.o | Bin 296644 -> 0 bytes .../Src/stm32l0xx_ll_gpio.su | 11 - .../Src/stm32l0xx_ll_i2c.d | 29 - .../Src/stm32l0xx_ll_i2c.o | Bin 299768 -> 0 bytes .../Src/stm32l0xx_ll_i2c.su | 14 - .../Src/stm32l0xx_ll_lpuart.d | 32 - .../Src/stm32l0xx_ll_lpuart.o | Bin 306244 -> 0 bytes .../Src/stm32l0xx_ll_lpuart.su | 9 - .../Src/stm32l0xx_ll_pwr.d | 29 - .../Src/stm32l0xx_ll_pwr.o | Bin 289908 -> 0 bytes .../Src/stm32l0xx_ll_pwr.su | 3 - .../Src/stm32l0xx_ll_rcc.d | 26 - .../Src/stm32l0xx_ll_rcc.o | Bin 310736 -> 0 bytes .../Src/stm32l0xx_ll_rcc.su | 35 - .../Src/stm32l0xx_ll_tim.d | 29 - .../Src/stm32l0xx_ll_tim.o | Bin 320336 -> 0 bytes .../Src/stm32l0xx_ll_tim.su | 29 - .../Src/stm32l0xx_ll_utils.d | 35 - .../Src/stm32l0xx_ll_utils.o | Bin 316324 -> 0 bytes .../Src/stm32l0xx_ll_utils.su | 27 - .../STM32L0xx_HAL_Driver/Src/subdir.mk | 44 - fw_old/Debug/iaq_wired_sensor.bin | Bin 14248 -> 0 bytes fw_old/Debug/iaq_wired_sensor.elf | Bin 532612 -> 0 bytes fw_old/Debug/iaq_wired_sensor.list | 9403 ----------------- fw_old/Debug/iaq_wired_sensor.map | 2393 ----- fw_old/Debug/makefile | 100 - fw_old/Debug/objects.list | 22 - fw_old/Debug/objects.mk | 9 - fw_old/Debug/sources.mk | 26 - .../Device/ST/STM32L0xx/Include/stm32l011xx.h | 5939 ----------- .../Device/ST/STM32L0xx/Include/stm32l0xx.h | 235 - .../ST/STM32L0xx/Include/system_stm32l0xx.h | 109 - fw_old/Drivers/CMSIS/Include/cmsis_armcc.h | 865 -- fw_old/Drivers/CMSIS/Include/cmsis_armclang.h | 1869 ---- fw_old/Drivers/CMSIS/Include/cmsis_compiler.h | 266 - fw_old/Drivers/CMSIS/Include/cmsis_gcc.h | 2085 ---- fw_old/Drivers/CMSIS/Include/cmsis_iccarm.h | 935 -- fw_old/Drivers/CMSIS/Include/cmsis_version.h | 39 - fw_old/Drivers/CMSIS/Include/core_armv8mbl.h | 1918 ---- fw_old/Drivers/CMSIS/Include/core_armv8mml.h | 2927 ----- fw_old/Drivers/CMSIS/Include/core_cm0.h | 949 -- fw_old/Drivers/CMSIS/Include/core_cm0plus.h | 1083 -- fw_old/Drivers/CMSIS/Include/core_cm1.h | 976 -- fw_old/Drivers/CMSIS/Include/core_cm23.h | 1993 ---- fw_old/Drivers/CMSIS/Include/core_cm3.h | 1941 ---- fw_old/Drivers/CMSIS/Include/core_cm33.h | 3002 ------ fw_old/Drivers/CMSIS/Include/core_cm4.h | 2129 ---- fw_old/Drivers/CMSIS/Include/core_cm7.h | 2671 ----- fw_old/Drivers/CMSIS/Include/core_sc000.h | 1022 -- fw_old/Drivers/CMSIS/Include/core_sc300.h | 1915 ---- fw_old/Drivers/CMSIS/Include/mpu_armv7.h | 270 - fw_old/Drivers/CMSIS/Include/mpu_armv8.h | 333 - fw_old/Drivers/CMSIS/Include/tz_context.h | 70 - .../Inc/stm32l0xx_ll_bus.h | 1171 -- .../Inc/stm32l0xx_ll_cortex.h | 590 -- .../Inc/stm32l0xx_ll_crs.h | 798 -- .../Inc/stm32l0xx_ll_dma.h | 2129 ---- .../Inc/stm32l0xx_ll_exti.h | 1016 -- .../Inc/stm32l0xx_ll_gpio.h | 945 -- .../Inc/stm32l0xx_ll_i2c.h | 2230 ---- .../Inc/stm32l0xx_ll_lpuart.h | 2198 ---- .../Inc/stm32l0xx_ll_pwr.h | 746 -- .../Inc/stm32l0xx_ll_rcc.h | 2497 ----- .../Inc/stm32l0xx_ll_system.h | 1089 -- .../Inc/stm32l0xx_ll_tim.h | 3289 ------ .../Inc/stm32l0xx_ll_utils.h | 269 - .../Src/stm32l0xx_ll_dma.c | 379 - .../Src/stm32l0xx_ll_exti.c | 214 - .../Src/stm32l0xx_ll_gpio.c | 263 - .../Src/stm32l0xx_ll_i2c.c | 239 - .../Src/stm32l0xx_ll_lpuart.c | 264 - .../Src/stm32l0xx_ll_pwr.c | 85 - .../Src/stm32l0xx_ll_rcc.c | 698 -- .../Src/stm32l0xx_ll_tim.c | 847 -- .../Src/stm32l0xx_ll_utils.c | 591 -- fw_old/STM32L011F4UX_FLASH.ld | 177 - fw_old/iaq_wired_sensor Debug.launch | 73 - fw_old/iaq_wired_sensor.ioc | 150 - 154 files changed, 75735 deletions(-) delete mode 100644 fw_old/.cproject delete mode 100644 fw_old/.mxproject delete mode 100644 fw_old/.project delete mode 100644 fw_old/.settings/org.eclipse.cdt.codan.core.prefs delete mode 100644 fw_old/.settings/org.eclipse.cdt.core.prefs delete mode 100644 fw_old/.settings/stm32cubeide.project.prefs delete mode 100644 fw_old/Core/Inc/config.h delete mode 100644 fw_old/Core/Inc/crc8.h delete mode 100644 fw_old/Core/Inc/i2c.h delete mode 100644 fw_old/Core/Inc/main.h delete mode 100644 fw_old/Core/Inc/modbus.h delete mode 100644 fw_old/Core/Inc/scd4x.h delete mode 100644 fw_old/Core/Inc/sht4x.h delete mode 100644 fw_old/Core/Inc/sps30.h delete mode 100644 fw_old/Core/Inc/stm32_assert.h delete mode 100644 fw_old/Core/Inc/stm32l0xx_it.h delete mode 100644 fw_old/Core/Src/config.c delete mode 100644 fw_old/Core/Src/crc8.c delete mode 100644 fw_old/Core/Src/i2c.c delete mode 100644 fw_old/Core/Src/main.c delete mode 100644 fw_old/Core/Src/modbus.c delete mode 100644 fw_old/Core/Src/scd4x.c delete mode 100644 fw_old/Core/Src/sht4x.c delete mode 100644 fw_old/Core/Src/sps30.c delete mode 100644 fw_old/Core/Src/stm32l0xx_it.c delete mode 100644 fw_old/Core/Src/syscalls.c delete mode 100644 fw_old/Core/Src/sysmem.c delete mode 100644 fw_old/Core/Src/system_stm32l0xx.c delete mode 100644 fw_old/Core/Startup/startup_stm32l011f4ux.s delete mode 100644 fw_old/Debug/Core/Src/config.d delete mode 100644 fw_old/Debug/Core/Src/config.o delete mode 100644 fw_old/Debug/Core/Src/config.su delete mode 100644 fw_old/Debug/Core/Src/crc8.d delete mode 100644 fw_old/Debug/Core/Src/crc8.o delete mode 100644 fw_old/Debug/Core/Src/crc8.su delete mode 100644 fw_old/Debug/Core/Src/i2c.d delete mode 100644 fw_old/Debug/Core/Src/i2c.o delete mode 100644 fw_old/Debug/Core/Src/i2c.su delete mode 100644 fw_old/Debug/Core/Src/main.d delete mode 100644 fw_old/Debug/Core/Src/main.o delete mode 100644 fw_old/Debug/Core/Src/main.su delete mode 100644 fw_old/Debug/Core/Src/modbus.d delete mode 100644 fw_old/Debug/Core/Src/modbus.o delete mode 100644 fw_old/Debug/Core/Src/modbus.su delete mode 100644 fw_old/Debug/Core/Src/scd4x.d delete mode 100644 fw_old/Debug/Core/Src/scd4x.o delete mode 100644 fw_old/Debug/Core/Src/scd4x.su delete mode 100644 fw_old/Debug/Core/Src/sht4x.d delete mode 100644 fw_old/Debug/Core/Src/sht4x.o delete mode 100644 fw_old/Debug/Core/Src/sht4x.su delete mode 100644 fw_old/Debug/Core/Src/sps30.d delete mode 100644 fw_old/Debug/Core/Src/sps30.o delete mode 100644 fw_old/Debug/Core/Src/sps30.su delete mode 100644 fw_old/Debug/Core/Src/stm32l0xx_it.d delete mode 100644 fw_old/Debug/Core/Src/stm32l0xx_it.o delete mode 100644 fw_old/Debug/Core/Src/stm32l0xx_it.su delete mode 100644 fw_old/Debug/Core/Src/subdir.mk delete mode 100644 fw_old/Debug/Core/Src/syscalls.d delete mode 100644 fw_old/Debug/Core/Src/syscalls.o delete mode 100644 fw_old/Debug/Core/Src/syscalls.su delete mode 100644 fw_old/Debug/Core/Src/sysmem.d delete mode 100644 fw_old/Debug/Core/Src/sysmem.o delete mode 100644 fw_old/Debug/Core/Src/sysmem.su delete mode 100644 fw_old/Debug/Core/Src/system_stm32l0xx.d delete mode 100644 fw_old/Debug/Core/Src/system_stm32l0xx.o delete mode 100644 fw_old/Debug/Core/Src/system_stm32l0xx.su delete mode 100644 fw_old/Debug/Core/Startup/startup_stm32l011f4ux.d delete mode 100644 fw_old/Debug/Core/Startup/startup_stm32l011f4ux.o delete mode 100644 fw_old/Debug/Core/Startup/subdir.mk delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_dma.d delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_dma.o delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_dma.su delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_exti.d delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_exti.o delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_exti.su delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_gpio.d delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_gpio.o delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_gpio.su delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_i2c.d delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_i2c.o delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_i2c.su delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_lpuart.d delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_lpuart.o delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_lpuart.su delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_pwr.d delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_pwr.o delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_pwr.su delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_rcc.d delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_rcc.o delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_rcc.su delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_tim.d delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_tim.o delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_tim.su delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_utils.d delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_utils.o delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_utils.su delete mode 100644 fw_old/Debug/Drivers/STM32L0xx_HAL_Driver/Src/subdir.mk delete mode 100755 fw_old/Debug/iaq_wired_sensor.bin delete mode 100755 fw_old/Debug/iaq_wired_sensor.elf delete mode 100644 fw_old/Debug/iaq_wired_sensor.list delete mode 100644 fw_old/Debug/iaq_wired_sensor.map delete mode 100644 fw_old/Debug/makefile delete mode 100644 fw_old/Debug/objects.list delete mode 100644 fw_old/Debug/objects.mk delete mode 100644 fw_old/Debug/sources.mk delete mode 100644 fw_old/Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l011xx.h delete mode 100644 fw_old/Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h delete mode 100644 fw_old/Drivers/CMSIS/Device/ST/STM32L0xx/Include/system_stm32l0xx.h delete mode 100644 fw_old/Drivers/CMSIS/Include/cmsis_armcc.h delete mode 100644 fw_old/Drivers/CMSIS/Include/cmsis_armclang.h delete mode 100644 fw_old/Drivers/CMSIS/Include/cmsis_compiler.h delete mode 100644 fw_old/Drivers/CMSIS/Include/cmsis_gcc.h delete mode 100644 fw_old/Drivers/CMSIS/Include/cmsis_iccarm.h delete mode 100644 fw_old/Drivers/CMSIS/Include/cmsis_version.h delete mode 100644 fw_old/Drivers/CMSIS/Include/core_armv8mbl.h delete mode 100644 fw_old/Drivers/CMSIS/Include/core_armv8mml.h delete mode 100644 fw_old/Drivers/CMSIS/Include/core_cm0.h delete mode 100644 fw_old/Drivers/CMSIS/Include/core_cm0plus.h delete mode 100644 fw_old/Drivers/CMSIS/Include/core_cm1.h delete mode 100644 fw_old/Drivers/CMSIS/Include/core_cm23.h delete mode 100644 fw_old/Drivers/CMSIS/Include/core_cm3.h delete mode 100644 fw_old/Drivers/CMSIS/Include/core_cm33.h delete mode 100644 fw_old/Drivers/CMSIS/Include/core_cm4.h delete mode 100644 fw_old/Drivers/CMSIS/Include/core_cm7.h delete mode 100644 fw_old/Drivers/CMSIS/Include/core_sc000.h delete mode 100644 fw_old/Drivers/CMSIS/Include/core_sc300.h delete mode 100644 fw_old/Drivers/CMSIS/Include/mpu_armv7.h delete mode 100644 fw_old/Drivers/CMSIS/Include/mpu_armv8.h delete mode 100644 fw_old/Drivers/CMSIS/Include/tz_context.h delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_bus.h delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_cortex.h delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_crs.h delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_dma.h delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_exti.h delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_gpio.h delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_i2c.h delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_lpuart.h delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_pwr.h delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_rcc.h delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_system.h delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_tim.h delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_utils.h delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_dma.c delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_exti.c delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_gpio.c delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_i2c.c delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_lpuart.c delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_pwr.c delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_rcc.c delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_tim.c delete mode 100644 fw_old/Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_utils.c delete mode 100644 fw_old/STM32L011F4UX_FLASH.ld delete mode 100644 fw_old/iaq_wired_sensor Debug.launch delete mode 100644 fw_old/iaq_wired_sensor.ioc diff --git a/fw_old/.cproject b/fw_old/.cproject deleted file mode 100644 index 30a87ca..0000000 --- a/fw_old/.cproject +++ /dev/null @@ -1,396 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/fw_old/.mxproject b/fw_old/.mxproject deleted file mode 100644 index 4d4db74..0000000 --- a/fw_old/.mxproject +++ /dev/null @@ -1,24 +0,0 @@ -[PreviousLibFiles] -LibFiles=Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_gpio.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_i2c.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_dma.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_bus.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_cortex.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_rcc.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_system.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_utils.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_exti.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_pwr.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_crs.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_lpuart.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_tim.h;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_gpio.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_i2c.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_dma.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_rcc.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_utils.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_exti.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_lpuart.c;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_rcc.h;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_pwr.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_tim.c;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_gpio.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_i2c.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_dma.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_bus.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_cortex.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_rcc.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_system.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_utils.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_exti.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_pwr.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_crs.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_lpuart.h;Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_tim.h;Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l011xx.h;Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h;Drivers/CMSIS/Device/ST/STM32L0xx/Include/system_stm32l0xx.h;Drivers/CMSIS/Device/ST/STM32L0xx/Source/Templates/system_stm32l0xx.c;Drivers/CMSIS/Include/cmsis_iccarm.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/cmsis_armclang.h;Drivers/CMSIS/Include/core_cm1.h;Drivers/CMSIS/Include/core_armv8mbl.h;Drivers/CMSIS/Include/core_cm33.h;Drivers/CMSIS/Include/cmsis_version.h;Drivers/CMSIS/Include/cmsis_compiler.h;Drivers/CMSIS/Include/mpu_armv7.h;Drivers/CMSIS/Include/mpu_armv8.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/tz_context.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cm23.h;Drivers/CMSIS/Include/core_armv8mml.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/core_cm3.h; - -[PreviousUsedCubeIDEFiles] -SourceFiles=Core/Src/main.c;Core/Src/stm32l0xx_it.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_gpio.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_i2c.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_dma.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_rcc.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_utils.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_exti.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_lpuart.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_pwr.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_tim.c;Core/Src/system_stm32l0xx.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_gpio.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_i2c.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_dma.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_rcc.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_utils.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_exti.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_lpuart.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_pwr.c;Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_ll_tim.c;Core/Src/system_stm32l0xx.c;Drivers/CMSIS/Device/ST/STM32L0xx/Source/Templates/system_stm32l0xx.c;; -HeaderPath=Drivers/STM32L0xx_HAL_Driver/Inc;Drivers/CMSIS/Device/ST/STM32L0xx/Include;Drivers/CMSIS/Include;Core/Inc; -CDefines=USE_FULL_LL_DRIVER;HSE_VALUE:8000000;HSE_STARTUP_TIMEOUT:100;LSE_STARTUP_TIMEOUT:5000;LSE_VALUE:32768;MSI_VALUE:2097000;HSI_VALUE:16000000;LSI_VALUE:37000;VDD_VALUE:3300;PREFETCH_ENABLE:0;INSTRUCTION_CACHE_ENABLE:1;DATA_CACHE_ENABLE:1;STM32L011xx;USE_FULL_LL_DRIVER;HSE_VALUE:8000000;HSE_STARTUP_TIMEOUT:100;LSE_STARTUP_TIMEOUT:5000;LSE_VALUE:32768;MSI_VALUE:2097000;HSI_VALUE:16000000;LSI_VALUE:37000;VDD_VALUE:3300;PREFETCH_ENABLE:0;INSTRUCTION_CACHE_ENABLE:1;DATA_CACHE_ENABLE:1; - -[PreviousGenFiles] -AdvancedFolderStructure=true -HeaderFileListSize=3 -HeaderFiles#0=/home/mrs/Personal/HDIoT/Smart_Household/iaq_wired_sensor/fw/Core/Inc/stm32l0xx_it.h -HeaderFiles#1=/home/mrs/Personal/HDIoT/Smart_Household/iaq_wired_sensor/fw/Core/Inc/stm32_assert.h -HeaderFiles#2=/home/mrs/Personal/HDIoT/Smart_Household/iaq_wired_sensor/fw/Core/Inc/main.h -HeaderFolderListSize=1 -HeaderPath#0=/home/mrs/Personal/HDIoT/Smart_Household/iaq_wired_sensor/fw/Core/Inc -HeaderFiles=; -SourceFileListSize=2 -SourceFiles#0=/home/mrs/Personal/HDIoT/Smart_Household/iaq_wired_sensor/fw/Core/Src/stm32l0xx_it.c -SourceFiles#1=/home/mrs/Personal/HDIoT/Smart_Household/iaq_wired_sensor/fw/Core/Src/main.c -SourceFolderListSize=1 -SourcePath#0=/home/mrs/Personal/HDIoT/Smart_Household/iaq_wired_sensor/fw/Core/Src -SourceFiles=; - diff --git a/fw_old/.project b/fw_old/.project deleted file mode 100644 index 6232ccb..0000000 --- a/fw_old/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - iaq_wired_sensor - - - - - - 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.MCUEndUserDisabledTrustZoneProjectNature - 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/fw_old/.settings/org.eclipse.cdt.codan.core.prefs b/fw_old/.settings/org.eclipse.cdt.codan.core.prefs deleted file mode 100644 index 19f7155..0000000 --- a/fw_old/.settings/org.eclipse.cdt.codan.core.prefs +++ /dev/null @@ -1,72 +0,0 @@ -com.st.stm32cube.ide.mcu.ide.oss.source.checker.libnano.problem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Float formatting support\\")"} -eclipse.preferences.version=1 -org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} -org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} -org.eclipse.cdt.codan.checkers.localvarreturn=-Warning -org.eclipse.cdt.codan.checkers.localvarreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Returning the address of a local variable\\")"} -org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} -org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} -org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} -org.eclipse.cdt.codan.internal.checkers.BlacklistProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.BlacklistProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function or method is blacklisted\\")",blacklist\=>()} -org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")",checkMacro\=>true} -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} -org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} -org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} -org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.FloatCompareProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.FloatCompareProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Direct float comparison\\")"} -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} -org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} -org.eclipse.cdt.codan.internal.checkers.MagicNumberProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MagicNumberProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Avoid magic numbers\\")",checkArray\=>true,checkOperatorParen\=>true,exceptions\=>(1,0,-1,2,1.0,0.0,-1.0)} -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} -org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} -org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} -org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} -org.eclipse.cdt.codan.internal.checkers.MultipleDeclarationsProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MultipleDeclarationsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Multiple variable declaration\\")"} -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} -org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} -org.eclipse.cdt.codan.internal.checkers.ShallowCopyProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ShallowCopyProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Miss copy constructor or assignment operator\\")",onlynew\=>false} -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.StaticVariableInHeaderProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.StaticVariableInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Static variable in header file\\")"} -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} -org.eclipse.cdt.codan.internal.checkers.SymbolShadowingProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.SymbolShadowingProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol shadowing\\")",paramFuncParameters\=>true} -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} -org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error -org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} diff --git a/fw_old/.settings/org.eclipse.cdt.core.prefs b/fw_old/.settings/org.eclipse.cdt.core.prefs deleted file mode 100644 index c8ec5df..0000000 --- a/fw_old/.settings/org.eclipse.cdt.core.prefs +++ /dev/null @@ -1,6 +0,0 @@ -doxygen/doxygen_new_line_after_brief=true -doxygen/doxygen_use_brief_tag=false -doxygen/doxygen_use_javadoc_tags=true -doxygen/doxygen_use_pre_tag=false -doxygen/doxygen_use_structural_commands=false -eclipse.preferences.version=1 diff --git a/fw_old/.settings/stm32cubeide.project.prefs b/fw_old/.settings/stm32cubeide.project.prefs deleted file mode 100644 index ae186d6..0000000 --- a/fw_old/.settings/stm32cubeide.project.prefs +++ /dev/null @@ -1,3 +0,0 @@ -8DF89ED150041C4CBC7CB9A9CAA90856=295E78E9D51884086204F31037537306 -DC22A860405A8BF2F2C095E5B6529F12=295E78E9D51884086204F31037537306 -eclipse.preferences.version=1 diff --git a/fw_old/Core/Inc/config.h b/fw_old/Core/Inc/config.h deleted file mode 100644 index c512299..0000000 --- a/fw_old/Core/Inc/config.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - * config.h - * - * Created on: Sep 5, 2021 - * Author: david - */ - -#ifndef INC_CONFIG_H_ -#define INC_CONFIG_H_ - -/* TODO: add comments to everything */ - -/* EXAMPLE of USAGE */ -/* -config_t new_config; -new_config.led_co2_alert_limit1 = 1000; -new_config.led_co2_alert_limit2 = 2000; -new_config.led_on = 1; -new_config.modbus_addr = 0x11; -config_write(&new_config); - -config_t config; -config_read(&config); -*/ - -#include "stdint.h" -#include "stm32l0xx.h" -/* DESCRIPTION OF THE DATA STRUCTURE */ -/* - * Data are divided into two groups: - * A) DEVICE DESCRIPTION - * Can not be changed by the user. - * These data can be only read. - * These data are: - * * VENDOR NAME - * * PRODUCT CODE - * * PRODUCT NAME - * * REVISION - * * SERIAL NUMBER - * B) DEVICE CONFIGURATION - * Can be changed by the user. - * These data are: - * * MODBUS ADDRESS - Modbus Address of the device. Default is 254 - * * LED ON - Whether the CO2 Level Indication LED should be on or off - * * LED CO2 ALERT LIMIT 1 - CO2 Level when the LED color changes Green<->Yellow - * * LED CO2 ALERT LIMIT 2 - CO2 Level when the LED color changes Yellow<->Red - * - * Device description data can be accessed using direct readout from the memory - * Device configuration data can be accessed using config_t struct. - */ -#define CONFIG_DEFAULT_LED_ON 1 -#define CONFIG_DEFAULT_LED_BRIGHTNESS 100 /* TODO: set according to the timers when this will be implemented */ -#define CONFIG_DEFAULT_LED_ALERT1_LIMIT 1500 -#define CONFIG_DEFAULT_LED_ALERT2_LIMIT 3000 -#define CONFIG_DEFAULT_LED_SMOOTH 0 -#define CONFIG_DEFAULT_SCD4x_T_OFFSET 0 -#define CONFIG_DEFAULT_BAUDRATE_INDEX 0 - -#define CONFIG_MODBUS_ADDR_LENGTH 2 -#define CONFIG_BAUDRATE_INDEX_LENGTH 2 -#define CONFIG_LED_ON_LENGTH 2 -#define CONFIG_LED_BRIGHTNESS_LENGTH 2 -#define CONFIG_LED_SMOOTH_LENGTH 2 -#define CONFIG_LED_ALERT1_LENGTH 2 -#define CONFIG_LED_ALERT2_LENGTH 2 -#define CONFIG_LED_ALERT2_LENGTH 2 -#define CONFIG_SCD4x_T_OFFSET_LENGTH 2 -#define VENDOR_NAME_LENGTH 64 -#define PRODUCT_CODE_LENGTH 64 -#define PRODUCT_NAME_LENGTH 64 -#define REVISION_LENGTH 16 -#define SERIAL_NUMBER_LENGTH 64 - -#define EEPROM_EMPTY_BYTE 0x00 - -#define EEPROM_ADDR_START ((uint32_t)0x08080000) -#define EEPROM_ADDR_END ((uint32_t)0x080801FF) - -#define CONFIG_EEPROM_ADDR_MODBUS_ADDR EEPROM_ADDR_START -#define CONFIG_EEPROM_ADDR_BAUDRATE_INDEX (CONFIG_EEPROM_ADDR_MODBUS_ADDR + CONFIG_MODBUS_ADDR_LENGTH) -#define CONFIG_EEPROM_ADDR_LED_ON (CONFIG_EEPROM_ADDR_BAUDRATE_INDEX + CONFIG_BAUDRATE_INDEX_LENGTH) -#define CONFIG_EEPROM_ADDR_LED_BRIGHTNESS (CONFIG_EEPROM_ADDR_LED_ON + CONFIG_LED_ON_LENGTH) -#define CONFIG_EEPROM_ADDR_LED_SMOOTH (CONFIG_EEPROM_ADDR_LED_BRIGHTNESS + CONFIG_LED_BRIGHTNESS_LENGTH) -#define CONFIG_EEPROM_ADDR_LED_ALERT1 (CONFIG_EEPROM_ADDR_LED_SMOOTH + CONFIG_LED_SMOOTH_LENGTH) -#define CONFIG_EEPROM_ADDR_LED_ALERT2 (CONFIG_EEPROM_ADDR_LED_ALERT1 + CONFIG_LED_ALERT1_LENGTH) -#define CONFIG_EEPROM_ADDR_SCD4x_T_OFFSET (CONFIG_EEPROM_ADDR_LED_ALERT2 + CONFIG_LED_ALERT2_LENGTH) - -#define CONFIG_EEPROM_ADDR_VENDOR_NAME (CONFIG_EEPROM_ADDR_SCD4x_T_OFFSET + CONFIG_SCD4x_T_OFFSET_LENGTH) -#define CONFIG_EEPROM_ADDR_PRODUCT_CODE (CONFIG_EEPROM_ADDR_VENDOR_NAME + VENDOR_NAME_LENGTH) -#define CONFIG_EEPROM_ADDR_PRODUCT_NAME (CONFIG_EEPROM_ADDR_PRODUCT_CODE + PRODUCT_CODE_LENGTH) -#define CONFIG_EEPROM_ADDR_REVISION (CONFIG_EEPROM_ADDR_PRODUCT_NAME + PRODUCT_NAME_LENGTH) -#define CONFIG_EEPROM_ADDR_SERIAL_NUMBER (CONFIG_EEPROM_ADDR_REVISION + REVISION_LENGTH) - -#define FLASH_PEKEY1 ((uint32_t)0x89ABCDEF) -#define FLASH_PEKEY2 ((uint32_t)0x02030405) - -#define CONFIG_OK 0 -#define CONFIG_ERROR -1 - -#define EEPROM_OK 0 -#define EEPROM_ERROR -1 -#define EEPROM_UNLOCK_ERROR -2 -#define EEPROM_LOCK_ERROR -3 -#define EEPROM_WRITE_ERROR -4 -#define EEPROM_ADDR_ERROR -5 - -#define SYSTICK_FREQ_HZ 12000000 -#define EEPROM_TIMEOUT_MAX_MS_INV 200 - -/* - * Variables - */ - -extern const uint32_t config_baudrates[]; -extern const uint8_t config_baudrates_length; - -/* - * Type definitions - */ - -typedef struct -{ - /* LED CONFIG */ - uint8_t led_on; - uint16_t led_brightness; - uint8_t led_smooth; - uint16_t led_co2_alert_limit1; - uint16_t led_co2_alert_limit2; - - /* SCD4x Temperature sensor offset */ - int16_t scd4x_t_offset; - - /* MODBUS CONFIG */ - uint16_t modbus_addr; - uint32_t baudrate_index; -} config_t; - - -/* const uint32_t baudrates [] = {19200, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 76800, 115200}; */ - -int8_t config_read(config_t *config); -int8_t config_write(config_t *config); - -#endif /* INC_CONFIG_H_ */ - diff --git a/fw_old/Core/Inc/crc8.h b/fw_old/Core/Inc/crc8.h deleted file mode 100644 index e799f7e..0000000 --- a/fw_old/Core/Inc/crc8.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * crc.h - * - * Created on: Jun 9, 2021 - * Author: user - */ - -#ifndef INC_CRC8_H_ -#define INC_CRC8_H_ - -#include "stdint.h" - -/* - * Definitions & macros - */ - -#define CRC8_POLYNOMIAL 0x31 -#define CRC8_INIT 0xFF - -uint8_t crc8_calculate(const uint8_t *data, uint16_t count); - -#endif /* INC_CRC8_H_ */ diff --git a/fw_old/Core/Inc/i2c.h b/fw_old/Core/Inc/i2c.h deleted file mode 100644 index f346e68..0000000 --- a/fw_old/Core/Inc/i2c.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * i2c.h - * - * Created on: Jun 8, 2021 - * Author: user - */ - -#ifndef INC_I2C_H_ -#define INC_I2C_H_ - -#include "stdint.h" -#include "stm32l0xx_ll_i2c.h" - -/* - * Defines & macros - */ - -#define NULL 0 - -/* - * Return values for I2C functions - */ - -#define I2C_OK 0 -#define I2C_ERROR -1 // generic error -#define I2C_ERROR_NACK -2 // NACK was received during transfer -#define I2C_ERROR_TX_INCOMPLETE -3 // number of TXed bytes != buffer length -#define I2C_ERROR_RX_INCOMPLETE -4 // number of RXed bytes != buffer length - -/* - * Type definitions - */ - -typedef struct { - I2C_TypeDef *i2c; -} i2c_context_t; - -/* - * Function declarations - */ - -int i2c_init(i2c_context_t *context); -int i2c_transmit(uint8_t address, uint8_t *buffer, int len); -int i2c_receive(uint8_t address, uint8_t *buffer, int len); - -#endif /* INC_I2C_H_ */ diff --git a/fw_old/Core/Inc/main.h b/fw_old/Core/Inc/main.h deleted file mode 100644 index a144a49..0000000 --- a/fw_old/Core/Inc/main.h +++ /dev/null @@ -1,120 +0,0 @@ -/* 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) 2021 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __MAIN_H -#define __MAIN_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32l0xx_ll_i2c.h" -#include "stm32l0xx_ll_lpuart.h" -#include "stm32l0xx_ll_rcc.h" -#include "stm32l0xx_ll_crs.h" -#include "stm32l0xx_ll_bus.h" -#include "stm32l0xx_ll_system.h" -#include "stm32l0xx_ll_exti.h" -#include "stm32l0xx_ll_cortex.h" -#include "stm32l0xx_ll_utils.h" -#include "stm32l0xx_ll_pwr.h" -#include "stm32l0xx_ll_dma.h" -#include "stm32l0xx_ll_tim.h" -#include "stm32l0xx_ll_gpio.h" - -#if defined(USE_FULL_ASSERT) -#include "stm32_assert.h" -#endif /* USE_FULL_ASSERT */ - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include "i2c.h" -#include "scd4x.h" -#include "sht4x.h" -#include "sps30.h" -#include "modbus.h" -#include "config.h" -/* 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 */ -int8_t uart_disable_interrupts(void); -int8_t uart_enable_interrupts(void); - -/* USER CODE END EFP */ - -/* Private defines -----------------------------------------------------------*/ -#define LED_B_Pin LL_GPIO_PIN_5 -#define LED_B_GPIO_Port GPIOA -#define LED_G_Pin LL_GPIO_PIN_6 -#define LED_G_GPIO_Port GPIOA -#define LED_R_Pin LL_GPIO_PIN_7 -#define LED_R_GPIO_Port GPIOA -#ifndef NVIC_PRIORITYGROUP_0 -#define NVIC_PRIORITYGROUP_0 ((uint32_t)0x00000007) /*!< 0 bit for pre-emption priority, - 4 bits for subpriority */ -#define NVIC_PRIORITYGROUP_1 ((uint32_t)0x00000006) /*!< 1 bit for pre-emption priority, - 3 bits for subpriority */ -#define NVIC_PRIORITYGROUP_2 ((uint32_t)0x00000005) /*!< 2 bits for pre-emption priority, - 2 bits for subpriority */ -#define NVIC_PRIORITYGROUP_3 ((uint32_t)0x00000004) /*!< 3 bits for pre-emption priority, - 1 bit for subpriority */ -#define NVIC_PRIORITYGROUP_4 ((uint32_t)0x00000003) /*!< 4 bits for pre-emption priority, - 0 bit for subpriority */ -#endif -/* USER CODE BEGIN Private defines */ -#define MEASUREMENT_PERIOD_MS 600000 - -extern uint16_t lpuart1_rx_message_index; -extern uint16_t lpuart1_rx_message_len; -extern uint8_t lpuart1_rx_done; -extern uint8_t lpuart1_rx_message_too_long; - -extern uint8_t tim21_elapsed_period; - -/* USER CODE END Private defines */ - -#ifdef __cplusplus -} -#endif - -#endif /* __MAIN_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/fw_old/Core/Inc/modbus.h b/fw_old/Core/Inc/modbus.h deleted file mode 100644 index a215328..0000000 --- a/fw_old/Core/Inc/modbus.h +++ /dev/null @@ -1,181 +0,0 @@ -/* - * modbus.h - * - * Created on: Jul 18, 2021 - * Author: user - * - * Modbus slave RTU library (does NOT support ASCII and TCP) - * - * Useful links: - * https://www.picotech.com/library/oscilloscopes/modbus-serial-protocol-decoding - * https://ipc2u.com/articles/knowledge-base/modbus-rtu-made-simple-with-detailed-descriptions-and-examples/ - * https://modbus.org/docs/Modbus_over_serial_line_V1_02.pdf - * https://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf - * - * Note that byte order is big endian. - * - * USAGE: - * - * 1) Implement functions modbus_callback_function() and modbus_uart_transmit_function() - * - modbus_uart_transmit_function() sends data via UART - * - modbus_callback_function() does the real work: read sensors, set outputs... - * note that when filling buffers (e.g. input_registers[]) user must - * ensure that all data is big-endian - * These functions are implementation-specific. - * 2) Set device address (variable modbus_device_address); you can do this either - * - setting modbus_device_address directly (modbus.h needs to be included, duh) - * - using modbus_set_device_address(uint8_t address) function - * Or you can leave address as-is (MODBUS_DEFAULT_SLAVE_ADDRESS) and set it via - * Modbus during runtime - * 3) Call modbus_process_msg() after message reception; you need to observe Modbus RTU timing: - * - pauses between chars in frame are less or equal to 1.5 char - * - pauses between frames are at least 3.5 chars (of silence) - * For more information see section 2.5.1.1 (MODBUS Message RTU Framing) - * in "MODBUS over Serial Line: Specification and Implementation Guide" - * - */ - -#ifndef SRC_MODBUS_H_ -#define SRC_MODBUS_H_ - -#include "stdint.h" - -/* - * Defines & macros - */ - -#define MODBUS_BROADCAST_ADDR 0 -#define MODBUS_DEFAULT_SLAVE_ADDRESS 254 /* 255 may be used for bridge device */ -/* minimal frame length is 4 bytes: 1 B slave address, 1 B function code, 2 B CRC */ -#define MODBUS_MINIMAL_FRAME_LEN 4 -#define MODBUS_MAX_RTU_FRAME_SIZE 256 -#define MODBUS_BUFFER_SIZE MODBUS_MAX_RTU_FRAME_SIZE /* alias */ -#define MODBUS_ERROR_FLAG 0x80 -#define MODBUS_MAX_REGISTERS 125 - -/* - * Return values - */ - -#define MODBUS_OK 0 -#define MODBUS_ERROR -1 // generic error -#define MODBUS_ERROR_CRC -2 // checksum failed -#define MODBUS_ERROR_FRAME_INVALID -3 // invalid frame format / length -#define MODBUS_ERROR_OUT_OF_BOUNDS -4 // requested register is out of bounds -#define MODBUS_ERROR_FUNCTION_NOT_IMPLEMENTED -5 // function not implemented in callback -#define MODBUS_ERROR_REGISTER_NOT_IMPLEMENTED -6 // register not implemented in callback - -/* - * Data types - */ - -/* Public functions codes (Modbus Application protocol specification, section 5.1) */ -typedef enum { - /* single bit access functions */ - MODBUS_READ_COILS = 1, - MODBUS_READ_DO = 1, // alias - MODBUS_READ_DISCRETE_INPUTS = 2, - MODBUS_READ_DI = 2, // alias - MODBUS_WRITE_SINGLE_COIL = 5, - MODBUS_WRITE_SINGLE_DO = 5, // alias - MODBUS_WRITE_MULTIPLE_COILS = 15, - MODBUS_WRITE_MULTIPLE_DO = 15, // alias - /* 16-bit access functions */ - MODBUS_READ_HOLDING_REGISTERS = 3, - MODBUS_READ_AO = 3, // alias - MODBUS_READ_INPUT_REGISTERS = 4, - MODBUS_READ_AI = 4, // alias - MODBUS_WRITE_SINGLE_REGISTER = 6, - MODBUS_WRITE_SINGLE_AO = 6, // alias - MODBUS_WRITE_MULTIPLE_REGISTERS = 16, - MODBUS_WRITE_MULTIPLE_AO = 16, // alias - MODBUS_MASK_WRITE_REGISTER = 22, - MODBUS_READ_WRITE_MULTIPLE_REGISTERS = 23, - MODBUS_READ_FIFO_QUEUE = 24, - /* file record access */ - MODBUS_READ_FILE_RECORD = 20, - MODBUS_WRITE_FILE_RECORD = 21, - /* diagnostics */ - MODBUS_READ_EXCEPTION_STATUS = 7, - MODBUS_DIAGNOSTIC = 8, /* sub codes: 00-18,20 */ - MODBUS_GET_COM_EVENT_COUNTER = 11, - MODBUS_GET_COM_EVENT_LOG = 12, - MODBUS_REPORT_SLAVE_ID = 17, - MODBUS_READ_DEVICE_IDENTIFICATION = 43, /* sub codes: 14 */ -} modbus_function_code_t; - -typedef enum { - MODBUS_EXCEPTION_ILLEGAL_FUNCTION = 1, - MODBUS_EXCEPTION_ILLEGAL_DATA_ADDRESS = 2, - MODBUS_EXCEPTION_ILLEGAL_REGISTER_QUANTITY = 2, - MODBUS_EXCEPTION_ILLEGAL_DATA_VALUE = 3, - MODBUS_EXCEPTION_SLAVE_DEVICE_FAILURE = 4, - MODBUS_EXCEPTION_ACKNOWLEDGE = 5, - MODBUS_EXCEPTION_SLAVE_DEVICE_BUSY = 6, - MODBUS_EXCEPTION_MEMORY_PARITY_ERROR = 8, - MODBUS_EXCEPTION_GATEWAY_PATH_UNAVAILABLE = 10, - MODBUS_EXCEPTION_GATEWAY_TARGET_DEVICE_FAILED_TO_RESPOND = 11, -} modbus_exception_code_t; - -typedef struct { - uint8_t exception_code; -} exception_t; - -typedef struct { - modbus_function_code_t function_code : 8; - uint16_t register_address; // e.g. first register of A0: 0 - uint16_t register_number; // e.g. first register of A0: 40001 - uint8_t register_count; // number of registers to be read/written - - exception_t exception; - - union { - uint8_t buffer8b[MODBUS_MAX_RTU_FRAME_SIZE]; - uint16_t buffer16b[MODBUS_MAX_RTU_FRAME_SIZE/2]; - uint16_t input_registers[MODBUS_MAX_REGISTERS]; - uint16_t holding_registers[MODBUS_MAX_REGISTERS]; - int16_t input_registers_signed[MODBUS_MAX_REGISTERS]; - int16_t holding_registers_signed[MODBUS_MAX_REGISTERS]; - }; -} modbus_transaction_t; - -typedef enum { - MODBUS_DO_START_NUMBER = 1, // Discrete output coils - MODBUS_DO_END_NUMBER = 9999, - MODBUS_DI_START_NUMBER = 10001, // Discrete input contacts - MODBUS_DI_END_NUMBER = 19999, - MODBUS_AI_START_NUMBER = 30001, // Analog input registers - MODBUS_AI_END_NUMBER = 39999, - MODBUS_AO_START_NUMBER = 40001, // Analog output (holding registers) - MODBUS_AO_END_NUMBER = 49999 -} modbus_register_number_t; - - -/* - * Global variables - */ - -/* device address: declared in modbus.c */ -extern uint8_t modbus_slave_address; - -/* shared modbus buffer; defined in modbus.c; may be used elsewhere in code */ -extern uint8_t modbus_buffer[]; - -/* - * Function prototypes - */ - -/* process message: should be called in when modbus message was received (e.g. in main.c) - * modbus_process_msg() may call following functions: - * - modbus_callback_function() if data readout is requested - * - modbus_uart_transmit_function() if response is required - * Both functions have to be implemented by user. - */ -int8_t modbus_slave_process_msg(const uint8_t *buffer, int len); -int8_t modbus_slave_set_address(uint8_t address); -/* modbus callback function type - should be implemented by user (e.g. in main.c) */ -int8_t modbus_slave_callback(modbus_transaction_t *transaction); -/* UART transmit function type - should be implemented by user (e.g. in main.c) */ -int8_t modbus_transmit_function(uint8_t *buffer, uint16_t data_len); - -#endif /* SRC_MODBUS_H_ */ diff --git a/fw_old/Core/Inc/scd4x.h b/fw_old/Core/Inc/scd4x.h deleted file mode 100644 index 921f9ee..0000000 --- a/fw_old/Core/Inc/scd4x.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * sht4x.h - * - * Created on: Jun 8, 2021 - * Author: user - */ - -#ifndef INC_SCD4X_H_ -#define INC_SCD4X_H_ - -#include "stdint.h" -#include "stm32l0xx_ll_i2c.h" -#include "stm32l0xx_ll_utils.h" -#include "i2c.h" -#include "crc8.h" - -/* - * Defines & macros - */ - -#define SCD4X_I2C_ADDRESS 0x62 - -/* - * Return values - */ - -#define SCD4X_OK 0 -#define SCD4X_ERROR -1 // generic error -#define SCD4X_CRC8_ERROR -2 // checksum failed - -/* - * Data types - */ - -typedef enum { - SCD4X_START_PERIODIC_MEASUREMENT = 0x21B1, - SCD4X_READ_MEASUREMENT = 0xEC05, - SCD4X_STOP_PERIODIC_MEASUREMENT = 0x3F86, - SCD4X_GET_DATA_READY_STATUS = 0xe4b8, - SCD4X_PERFORM_FACTORY_RESET = 0x3632 -} scd4x_cmd_t; - -/* - * Function prototypes - */ - -int8_t scd4x_send_cmd(scd4x_cmd_t cmd); -int8_t scd4x_read_data(uint8_t *buffer, int len); - -int8_t scd4x_start_periodic_measurement( void ); -int8_t scd4x_stop_periodic_measurement( void ); - -int8_t scd4x_perform_factory_reset( void ); - -int8_t scd4x_read_measurement(uint16_t * co2, int16_t *temperature, uint16_t *relative_humidity); - -#endif /* INC_SCD4X_H_ */ diff --git a/fw_old/Core/Inc/sht4x.h b/fw_old/Core/Inc/sht4x.h deleted file mode 100644 index 36c4351..0000000 --- a/fw_old/Core/Inc/sht4x.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * sht4x.h - * - * Created on: Jun 8, 2021 - * Author: user - */ - -#ifndef INC_SHT4X_H_ -#define INC_SHT4X_H_ - -#include "stdint.h" -#include "stm32l0xx_ll_i2c.h" -#include "stm32l0xx_ll_utils.h" -#include "i2c.h" -#include "crc8.h" - -/* - * Defines & macros - */ - -#define SHT4X_I2C_ADDRESS 0x44 - -/* - * Return values - */ - -#define SHT4X_OK 0 -#define SHT4X_ERROR -1 // generic error -#define SHT4X_CRC8_ERROR -2 // checksum failed - -/* - * Data types - */ - -typedef enum { - SHT4X_START_MEAS_HIGH_PRECISION = 0xFD, - SHT4X_START_MEAS_MEDIUM_PRECISION = 0xF6, - SHT4X_START_MEAS_LOW_PRECISION = 0xE0, - SHT4X_READ_SERIAL = 0x89, - SHT4X_SOFT_RESET = 0x94, - SHT4X_HEATER_200_mW_1_s = 0x39, - SHT4X_HEATER_200_mW_01_s = 0x32, - SHT4X_HEATER_110_mW_1_s = 0x2F, - SHT4X_HEATER_110_mW_01_s = 0x24, - SHT4X_HEATER_20_mW_1_s = 0x1E, - SHT4X_HEATER_20_mW_01_s = 0x15 -} sht4x_cmd_t; - -/* - * Function prototypes - */ - -int8_t sht4x_send_cmd(sht4x_cmd_t cmd); -int8_t sht4x_read_data(uint8_t *buffer, int len); -int8_t sht4x_measure(int16_t *temperature, uint16_t *relative_humidity); - -#endif /* INC_SHT4X_H_ */ diff --git a/fw_old/Core/Inc/sps30.h b/fw_old/Core/Inc/sps30.h deleted file mode 100644 index 9ca3c45..0000000 --- a/fw_old/Core/Inc/sps30.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * sps30.h - * - * Created on: Jul 18, 2021 - * Author: mrs - */ - -#ifndef INC_SPS30_H_ -#define INC_SPS30_H_ - -#include "stdint.h" -#include "stm32l0xx_ll_i2c.h" -#include "stm32l0xx_ll_utils.h" -#include "i2c.h" -#include "crc8.h" - -/* - * Defines & macros - */ - -#define SPS30_I2C_ADDRESS 0x69 - -/* - * Return values - */ - -#define SPS30_OK 0 -#define SPS30_ERROR -1 // generic error -#define SPS30_CRC8_ERROR -2 // checksum failed - -/* - * Data types - */ - -typedef enum { - SPS30_START_MEASUREMENT = 0x0010, - SPS30_STOP_MEASUREMENT = 0x0104, - SPS30_READ_DATA_READY_FLAG = 0x0202, - SPS30_READ_MEASURED_VALUES = 0x0300, - SPS30_SLEEP = 0x1001, - SPS30_WAKE_UP = 0x1103, - SPS30_START_FAN_CLEANING = 0x5607, - SPS30_READ_AUTO_CLEANING_INTERVAL = 0x8004, - SPS30_WRITE_AUTO_CLEANING_INTERVAL = 0x8004, - SPS30_READ_PRODUCT_TYPE = 0xD002, - SPS30_READ_SERIAL_NUMBER = 0xD033, - SPS30_READ_VERSION = 0xD100, - SPS30_READ_DEVICE_STATUS_REGISTER = 0xD206, - SPS30_CLEAR_DEVICE_STATUS_REGISTER = 0xD210, - SPS30_RESET = 0xD304 - -} sps30_cmd_t; - -typedef enum { - SPS30_FLOAT_FORMAT = 0x03, - SPS30_UINT16_FORMAT = 0x05 -} sps30_data_format; - -int8_t sps30_send_cmd(sps30_cmd_t cmd); - -int8_t sps30_start_measurement( void ); -int8_t sps30_stop_measurement( void ); -int8_t sps30_read_measured_values(uint16_t *measured_values, uint8_t measured_values_len); - -int8_t sps30_sleep( void ); -int8_t sps30_wake_up( void ); - -int8_t sps30_start_fan_cleaning( void ); - -int8_t sps30_reset( void ); - -int8_t sps30_read_status_register ( void ); - -int8_t sps30_read_firmware_version ( uint8_t * fw_ver_hi, uint8_t * fw_ver_lo ); - -uint8_t calculate_crc(uint8_t data[2]); - -#endif /* INC_SPS30_H_ */ diff --git a/fw_old/Core/Inc/stm32_assert.h b/fw_old/Core/Inc/stm32_assert.h deleted file mode 100644 index ca09699..0000000 --- a/fw_old/Core/Inc/stm32_assert.h +++ /dev/null @@ -1,53 +0,0 @@ -/** - ****************************************************************************** - * @file stm32_assert.h - * @brief STM32 assert file. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2018 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32_ASSERT_H -#define __STM32_ASSERT_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ -/* Includes ------------------------------------------------------------------*/ -/* 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 /* __STM32_ASSERT_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/fw_old/Core/Inc/stm32l0xx_it.h b/fw_old/Core/Inc/stm32l0xx_it.h deleted file mode 100644 index e4fecd6..0000000 --- a/fw_old/Core/Inc/stm32l0xx_it.h +++ /dev/null @@ -1,65 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file stm32l0xx_it.h - * @brief This file contains the headers of the interrupt handlers. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2021 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32L0xx_IT_H -#define __STM32L0xx_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 SVC_Handler(void); -void PendSV_Handler(void); -void SysTick_Handler(void); -void TIM21_IRQHandler(void); -void LPUART1_IRQHandler(void); -/* USER CODE BEGIN EFP */ -/* USER CODE END EFP */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32L0xx_IT_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/fw_old/Core/Src/config.c b/fw_old/Core/Src/config.c deleted file mode 100644 index 08f6112..0000000 --- a/fw_old/Core/Src/config.c +++ /dev/null @@ -1,243 +0,0 @@ -/* - * config.c - * - * Created on: Sep 5, 2021 - * Author: david - */ - -#include "config.h" - -/* - * Variables - */ -/* Baudrates - STM32L0xx can do baudrates from 1200 to 115200 - * - default value has index 0 */ -const uint32_t config_baudrates[] = { - 19200, // 0 - 4800, // 1 - 9600, // 2 - 14400, // 3 - 19200, // 4 - 28800, // 5 - 38400, // 6 - 57600, // 7 - 76800, // 8 - 115200 // 9 -}; -const uint8_t config_baudrates_length = 10; - -/* Function to lock the EEPROM */ -static int8_t eeprom_lock(void); -/* Function to unlock the EEPROM */ -static int8_t eeprom_unlock(void); -/* Function to write one byte to the EEPROM */ -/* IMPORTANT: EEPROM must be unlocked first */ -static int8_t eeprom_program_byte(uint32_t addr, uint8_t ee_data); -/* Function to write two bytes to the EEPROM */ -/* IMPORTANT: EEPROM must be unlocked first */ -static int8_t eeprom_program_halfword(uint32_t addr, uint16_t ee_data); -/* Function to write four bytes to the EEPROM */ -/* IMPORTANT: EEPROM must be unlocked first */ -static int8_t eeprom_program_word(uint32_t addr, uint32_t ee_data); - -int8_t config_read(config_t *config) -{ - config->modbus_addr = *(uint16_t *) (CONFIG_EEPROM_ADDR_MODBUS_ADDR); - config->baudrate_index = *(uint16_t *) (CONFIG_EEPROM_ADDR_BAUDRATE_INDEX); - config->led_on = *(uint16_t *) (CONFIG_EEPROM_ADDR_LED_ON); - config->led_brightness = *(uint16_t *) (CONFIG_EEPROM_ADDR_LED_BRIGHTNESS); - config->led_smooth = *(uint16_t *) (CONFIG_EEPROM_ADDR_LED_SMOOTH); - config->led_co2_alert_limit1 = *(uint16_t *) (CONFIG_EEPROM_ADDR_LED_ALERT1); - config->led_co2_alert_limit2 = *(uint16_t *) (CONFIG_EEPROM_ADDR_LED_ALERT2); - config->scd4x_t_offset = *(int16_t *) (CONFIG_EEPROM_ADDR_SCD4x_T_OFFSET); - - /* Check if the EEPROM is initialized - do not check: - * LED ON - * LED SMOOTH - * SCD4x T OFFSET - * BAUDRATE INDEX - * those can be 0 */ - if ((config->modbus_addr == EEPROM_EMPTY_BYTE) || - (config->led_co2_alert_limit1 == EEPROM_EMPTY_BYTE) || - (config->led_co2_alert_limit2 == EEPROM_EMPTY_BYTE) || - (config->led_brightness == EEPROM_EMPTY_BYTE)) - { - return CONFIG_ERROR; - } - return CONFIG_OK; -} - -int8_t config_write(config_t *config) -{ - /* Unlock the EEPROM */ - if (eeprom_unlock() != EEPROM_OK) - { - return EEPROM_UNLOCK_ERROR; - } - /* Reset the ERASE and DATA bits in the FLASH_PECR register to disable any residual erase */ - FLASH->PECR = FLASH->PECR & ~(FLASH_PECR_ERASE | FLASH_PECR_DATA); - - /* Write MODBUS ADDRESS */ - if (eeprom_program_halfword(CONFIG_EEPROM_ADDR_MODBUS_ADDR, config->modbus_addr) != EEPROM_OK) - { - return EEPROM_WRITE_ERROR; - } - /* Write BAUDRATE */ - if (eeprom_program_halfword(CONFIG_EEPROM_ADDR_BAUDRATE_INDEX, config->baudrate_index) != EEPROM_OK) - { - return EEPROM_WRITE_ERROR; - } - - /* Write LED ON */ - if (eeprom_program_byte(CONFIG_EEPROM_ADDR_LED_ON, config->led_on) != EEPROM_OK) - { - return EEPROM_WRITE_ERROR; - } - - /* Write LED BRIGHTNESS */ - if (eeprom_program_halfword(CONFIG_EEPROM_ADDR_LED_BRIGHTNESS, config->led_brightness) != EEPROM_OK) - { - return EEPROM_WRITE_ERROR; - } - - /* Write LED SMOOTH */ - if (eeprom_program_byte(CONFIG_EEPROM_ADDR_LED_SMOOTH, config->led_smooth) != EEPROM_OK) - { - return EEPROM_WRITE_ERROR; - } - - /* Write LED CO2 ALERT LIMIT 1 */ - if (eeprom_program_halfword(CONFIG_EEPROM_ADDR_LED_ALERT1, config->led_co2_alert_limit1) != EEPROM_OK) - { - return EEPROM_WRITE_ERROR; - } - - /* Write LED CO2 ALERT LIMIT 2 */ - if (eeprom_program_halfword(CONFIG_EEPROM_ADDR_LED_ALERT2, config->led_co2_alert_limit2) != EEPROM_OK) - { - return EEPROM_WRITE_ERROR; - } - - /* Write LED SCD4x TEMPERATURE OFFSET */ - if (eeprom_program_halfword(CONFIG_EEPROM_ADDR_SCD4x_T_OFFSET, config->scd4x_t_offset) != EEPROM_OK) - { - return EEPROM_WRITE_ERROR; - } - - /* Lock EEPROM*/ - if (eeprom_lock() != EEPROM_OK) - { - return EEPROM_LOCK_ERROR; - } - return CONFIG_OK; -} - -static int8_t eeprom_lock(void) -{ - uint32_t tick_start = SysTick->VAL; - while ((FLASH->SR & FLASH_SR_BSY) != 0) /* Wait for FLASH to be free */ - { - /* Timeout test */ - /* The maximum writing time is 3.94ms (half-word) */ - uint32_t tick_last = SysTick->VAL; - uint32_t tick_diff; - if (tick_start <= tick_last) - { - tick_diff = tick_last - tick_start; - } else - { - tick_diff = (0xFFFFFFFF - tick_last) + tick_start; - } - - /* If the time difference is more than 5ms */ - if (tick_diff >= (uint32_t)((uint32_t)SYSTICK_FREQ_HZ*(uint32_t)EEPROM_TIMEOUT_MAX_MS_INV)) - { - return EEPROM_LOCK_ERROR; - } - } - - FLASH->PECR = FLASH->PECR & ~(FLASH_PECR_ERRIE | FLASH_PECR_EOPIE); /* disable flash interrupts */ - FLASH->PECR = FLASH->PECR | FLASH_PECR_PELOCK; /* Lock memory with PELOCK */ - - return EEPROM_OK; -} - -static int8_t eeprom_unlock(void) -{ - uint32_t tick_start = SysTick->VAL; - while ((FLASH->SR & FLASH_SR_BSY) != 0) /* Wait for FLASH to be free */ - { - /* Timeout test */ - /* The maximum writing time is 3.94ms (half-word) */ - uint32_t tick_last = SysTick->VAL; - uint32_t tick_diff; - if (tick_start <= tick_last) - { - tick_diff = tick_last - tick_start; - } else - { - tick_diff = (0xFFFFFFFF - tick_last) + tick_start; - } - - /* If the time difference is more than 5ms */ - if (tick_diff >= (uint32_t)((uint32_t)SYSTICK_FREQ_HZ*(uint32_t)EEPROM_TIMEOUT_MAX_MS_INV)) - { - return EEPROM_UNLOCK_ERROR; - } - } - if ((FLASH->PECR & FLASH_PECR_PELOCK) != 0) /* If PELOCK is locked */ - { - /* Unlock PELOCK */ - FLASH->PEKEYR = FLASH_PEKEY1; /* PEKEY1 */ - FLASH->PEKEYR = FLASH_PEKEY2; /* PEKEY2 */ - } - FLASH->PECR = FLASH->PECR | (FLASH_PECR_ERRIE | FLASH_PECR_EOPIE); /* enable flash interrupts */ - return EEPROM_OK; -} - -static int8_t eeprom_program_byte(uint32_t addr, uint8_t ee_data) -{ - if ((EEPROM_ADDR_START <= addr) && (addr <= EEPROM_ADDR_END - 1)) - { - *(uint8_t *)(addr) = ee_data; /* write data to EEPROM */ - if (*(uint8_t *)(addr) != ee_data) - { - return EEPROM_WRITE_ERROR; - } - return EEPROM_OK; - } else - { - return EEPROM_ADDR_ERROR; - } -} -static int8_t eeprom_program_halfword(uint32_t addr, uint16_t ee_data) -{ - if ((EEPROM_ADDR_START <= addr) && (addr <= EEPROM_ADDR_END - 2)) - { - *(uint16_t *)(addr) = ee_data; /* write data to EEPROM */ - if (*(uint16_t *)(addr) != ee_data) - { - return EEPROM_WRITE_ERROR; - } - return EEPROM_OK; - } else - { - return EEPROM_ADDR_ERROR; - } -} - -static int8_t eeprom_program_word(uint32_t addr, uint32_t ee_data) -{ - if ((EEPROM_ADDR_START <= addr) && (addr <= EEPROM_ADDR_END - 4)) - { - *(uint32_t *)(addr) = ee_data; /* write data to EEPROM */ - if (*(uint32_t *)(addr) != ee_data) - { - return EEPROM_WRITE_ERROR; - } - return EEPROM_OK; - } else - { - return EEPROM_ADDR_ERROR; - } -} diff --git a/fw_old/Core/Src/crc8.c b/fw_old/Core/Src/crc8.c deleted file mode 100644 index 312cdf4..0000000 --- a/fw_old/Core/Src/crc8.c +++ /dev/null @@ -1,28 +0,0 @@ -/* - * crc.c - * - * Created on: Jun 9, 2021 - * Author: user - */ - -#include "crc8.h" - -/* Stolen from Sensirion SCD4x datasheet, section 3.11 */ -uint8_t crc8_calculate(const uint8_t *data, uint16_t count) -{ - uint16_t current_byte; - uint8_t crc = CRC8_INIT; - uint8_t crc_bit; - /* calculates 8-Bit checksum with given polynomial */ - for (current_byte = 0; current_byte < count; ++current_byte) { - crc ^= (data[current_byte]); - for(crc_bit = 8; crc_bit > 0; --crc_bit) { - if (crc & 0x80) { - crc =(crc << 1) ^ CRC8_POLYNOMIAL; - } else { - crc = (crc << 1); - } - } - } - return crc; -} diff --git a/fw_old/Core/Src/i2c.c b/fw_old/Core/Src/i2c.c deleted file mode 100644 index 07aeaaf..0000000 --- a/fw_old/Core/Src/i2c.c +++ /dev/null @@ -1,78 +0,0 @@ -/* - * i2c.c - * - * Created on: Jun 8, 2021 - * Author: user - */ - -#include "i2c.h" -#include "stm32l0xx_ll_lpuart.h" - -i2c_context_t *i2c_context; - -int i2c_init(i2c_context_t *context) -{ - if (context == NULL) { - return I2C_ERROR; - } - i2c_context = context; - return I2C_OK; -} - -int i2c_transmit(uint8_t address, uint8_t *buffer, int len) -{ - /* prevent interrupts during I2C communication (e.g. collision with MODBUS) */ -// LL_LPUART_Disable(LPUART1); -// LL_LPUART_DisableIT_RXNE(LPUART1); -// __disable_irq(); - LL_I2C_HandleTransfer(i2c_context->i2c, address, LL_I2C_ADDRSLAVE_7BIT, len, - LL_I2C_MODE_AUTOEND, LL_I2C_GENERATE_START_WRITE); - int i = 0; - // Autoend mode will raise STOP flag if NACK is detected - // (or if desired number of bytes is transmitted) - while (!LL_I2C_IsActiveFlag_STOP(i2c_context->i2c)) { - if (LL_I2C_IsActiveFlag_TXE(i2c_context->i2c)) { - if (i < len) { - LL_I2C_TransmitData8(i2c_context->i2c, buffer[i++]); - } - } - } - LL_I2C_ClearFlag_STOP(i2c_context->i2c); - if (LL_I2C_IsActiveFlag_NACK(i2c_context->i2c)) { - return I2C_ERROR_NACK; - } - if (len != i) { - // this will probably never happen, as NACK flag - // is raised everytime len != number of TXed bytes - return I2C_ERROR_TX_INCOMPLETE; - } -// __enable_irq(); -// LL_LPUART_Enable(LPUART1); -// LL_LPUART_EnableIT_RXNE(LPUART1); - return I2C_OK; -} - -int i2c_receive(uint8_t address, uint8_t *buffer, int len) -{ -// __disable_irq(); -// LL_LPUART_Disable(LPUART1); -// LL_LPUART_DisableIT_RXNE(LPUART1); - LL_I2C_HandleTransfer(i2c_context->i2c, address, LL_I2C_ADDRSLAVE_7BIT, len, - LL_I2C_MODE_AUTOEND, LL_I2C_GENERATE_START_READ); - int i = 0; - while (!LL_I2C_IsActiveFlag_STOP(i2c_context->i2c)) { - if (LL_I2C_IsActiveFlag_RXNE(i2c_context->i2c)) { - if (i < len) { - buffer[i++] = LL_I2C_ReceiveData8(i2c_context->i2c); - } - } - } - LL_I2C_ClearFlag_STOP(i2c_context->i2c); - if (len != i) { - return I2C_ERROR_RX_INCOMPLETE; - } -// __enable_irq(); -// LL_LPUART_Enable(LPUART1); -// LL_LPUART_EnableIT_RXNE(LPUART1); - return I2C_OK; // TODO error detection -} diff --git a/fw_old/Core/Src/main.c b/fw_old/Core/Src/main.c deleted file mode 100644 index 99cd483..0000000 --- a/fw_old/Core/Src/main.c +++ /dev/null @@ -1,829 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file : main.c - * @brief : Main program body - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2021 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ -/* 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 */ -/* - * BASE CLOCK 12MHz - * Desired interrupt period 60s - */ -const uint16_t tim21_prescaler = 60000-1; // 100Hz -//const uint16_t tim21_period = 12000-1; // 60s -const uint16_t tim21_period = 1200-1; // 6s -//const uint16_t tim21_period = 200-1; // 1s - -/* Input register memory map - * (All registers are 16-bit) - * ------------------------- - * - * 30010 : CO2 [ppm] Unsigned value in range [0,40000] - * 30011 : T [deg_C * 10] From SHT4x; unsigned value in range [0; 1250]; e.g. 21.5 C => 215 - * 30012 : RH [%] From SHT4x; unsigned value in range [0; 100] - * - * Backup T and RH sensor: - * 30013 : T [deg_C * 10] From SCD4x; unsigned value in range [0; 600]; e.g. 21.5 C => 215 - * 30014 : RH [%] From SCD4x; unsigned value in range [0; 100] - * - * Extended temperature range (signed values): - * 30015 : T [deg_C * 10] From SHT4x; signed value (two's complement) in range [-400;1250] - * 30016 : T [deg_C * 10] From SCD4x; signed value (two's complement) in range [-100;600]; e.g. -12.3 C => -123 - * - */ -/* Input registers memory map implementation */ -enum -{ - REGISTER_NUM_CO2 = 30010, - REGISTER_NUM_T_SHT4x = 30011, - REGISTER_NUM_RH_SHT4x = 30012, - REGISTER_NUM_T_SCD4x = 30013, - REGISTER_NUM_RH_SCD4x = 30014, - REGISTER_NUM_T_SHT4x_SIGNED = 30015, - REGISTER_NUM_T_SCD4x_SIGNED = 30016 -} data_registers_numbers; - -enum -{ - REGISTER_NUM_LED_ON = 40001, - REGISTER_NUM_LED_BRIGHTNESS = 40002, - REGISTER_NUM_LED_SMOOTH = 40003, - REGISTER_NUM_CO2_ALERT_LIMIT1 = 40004, - REGISTER_NUM_CO2_ALERT_LIMIT2 = 40005, - REGISTER_NUM_SCD4x_T_OFFSET = 40006, - REGISTER_NUM_MODBUS_ADDR = 40007, - REGISTER_NUM_BAUDRATE = 40008 -} config_registers_numbers; - -enum -{ - REGISTER_NUM_VENDOR_NAME = 30010, - REGISTER_NUM_PRODUCT_CODE = 30011, - REGISTER_NUM_REVISION = 30012, - REGISTER_NUM_PRODUCT_NAME = 30013, - REGISTER_NUM_SERIAL_NUMBER = 30014 -} identification_registers_numbers; - -/* Variables to store the measured data */ -int CO2, T_SCD4x, RH_SCD4x; -int T_SHT4x, RH_SHT4x; -uint16_t sps30_measured_data[10]; - -/* Struct to store the sensor config */ -config_t sensor_config; -uint8_t sensor_config_pending_write = 0; -uint8_t baudrate_changed = 0; -uint8_t modbus_address_changed = 0; -uint8_t co2_valid = 0; -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_I2C1_Init(void); -static void MX_LPUART1_UART_Init(void); -static void MX_TIM21_Init(void); -/* USER CODE BEGIN PFP */ -void LPUART1_TX_Buffer(uint8_t* buffer_tx, uint16_t buffer_tx_len); -/* 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. */ - - LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG); - LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR); - - /* System interrupt init*/ - - /* USER CODE BEGIN Init */ - - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* Read config from EEPROM - if unsuccessful, set the default values*/ - int8_t config_read_status = config_read(&sensor_config); - if (config_read_status != CONFIG_OK) - { - sensor_config.modbus_addr = MODBUS_DEFAULT_SLAVE_ADDRESS; - sensor_config.led_co2_alert_limit1 = CONFIG_DEFAULT_LED_ALERT1_LIMIT; - sensor_config.led_co2_alert_limit2 = CONFIG_DEFAULT_LED_ALERT2_LIMIT; - sensor_config.led_on = CONFIG_DEFAULT_LED_ON; - sensor_config.led_brightness = CONFIG_DEFAULT_LED_BRIGHTNESS; - sensor_config.led_smooth = CONFIG_DEFAULT_LED_SMOOTH; - sensor_config.scd4x_t_offset = CONFIG_DEFAULT_SCD4x_T_OFFSET; - sensor_config.baudrate_index = CONFIG_DEFAULT_BAUDRATE_INDEX; - } - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_I2C1_Init(); - MX_LPUART1_UART_Init(); - MX_TIM21_Init(); - /* USER CODE BEGIN 2 */ - - /* Turn on MAGENTA LED to signal startup state */ - LL_GPIO_ResetOutputPin(LED_R_GPIO_Port, LED_R_Pin); - LL_GPIO_ResetOutputPin(LED_G_GPIO_Port, LED_G_Pin); - LL_GPIO_ResetOutputPin(LED_B_GPIO_Port, LED_B_Pin); - - /* Enable I2C for sensors */ - LL_I2C_Enable(I2C1); - - - /* Set the modbus address */ - modbus_slave_set_address(sensor_config.modbus_addr); - - /* Enable UART for RS485 */ - LL_LPUART_Enable(LPUART1); - - /* Start the timer for measurement triggering */ - LL_TIM_EnableCounter(TIM21); - LL_TIM_EnableIT_UPDATE(TIM21); - - /* I2C context init (for SHT4x and SCD4x) */ - i2c_context_t i2c_context; - i2c_context.i2c = I2C1; - i2c_init(&i2c_context); - - scd4x_start_periodic_measurement(); - uint8_t scd4x_is_connected = 1; - uint8_t sps30_is_connected = 0; - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - /*uint8_t scd4x_is_connected = 0; - if (scd4x_start_periodic_measurement() == SCD4X_OK) - { - scd4x_is_connected = 1; - }*/ - - /* Attempt to start SPS30 measurement and check if it's connected */ - /*sps30_reset(); - uint8_t sps30_is_connected = 0; - if (sps30_start_measurement() == SPS30_OK) - { - sps30_is_connected = 1; - }*/ - - /* Wait 1000ms for sensors initialization */ - /* SHT4x Init Time: max 1 ms (datasheet pg. 8) */ - /* SCD4x Init Time: max 1000 ms (datasheet pg. 6) */ - /* SPS30 Init Time: max 30000 ms (datasheet pg. 2) */ - LL_mDelay(1000); - - static uint32_t new_baud; - - /* Enter the main loop */ - while (1) - { - if (lpuart1_rx_done == 1) - { - /* Process the message */ - if (lpuart1_rx_message_too_long) - { - /* Do nothing, just delete the buffer and set the flag back to zero*/ - lpuart1_rx_message_too_long = 0; - } else - { - /* Process the message: - * message is stored in modbus_buffer[], no copying necessary; - * but we need to make sure that modbus_buffer[] will not be used while - * processing the message: this can be done by disabling RX interrupt */ - LL_LPUART_DisableIT_RXNE(LPUART1); - modbus_slave_process_msg(modbus_buffer, lpuart1_rx_message_len); - /* Reset the RX DONE flag */ - lpuart1_rx_done = 0; - LL_LPUART_EnableIT_RXNE(LPUART1); - } - /* Reset the RX DONE flag */ - lpuart1_rx_done = 0; - } - /* if config changed (MODBUS write), reflect changes to EEPROM */ - if (sensor_config_pending_write) { - config_write(&sensor_config); - sensor_config_pending_write = 0; - } - if (modbus_address_changed) - { - modbus_slave_set_address(sensor_config.modbus_addr); - modbus_address_changed = 0; - } - if (baudrate_changed) - { - while (!LL_LPUART_IsActiveFlag_TXE(LPUART1)); - uart_disable_interrupts(); -// LL_LPUART_Disable(LPUART1); -// LL_LPUART_DisableIT_IDLE(LPUART1); -// LL_LPUART_EnableIT_RXNE(LPUART1); - - LL_LPUART_SetBaudRate(LPUART1, SYSTICK_FREQ_HZ, config_baudrates[sensor_config.baudrate_index]); - -// LL_LPUART_Enable(LPUART1); -// LL_LPUART_EnableIT_IDLE(LPUART1); -// LL_LPUART_EnableIT_RXNE(LPUART1); - uart_enable_interrupts(); - LL_LPUART_EnableDirectionRx(LPUART1); - LL_LPUART_EnableDirectionTx(LPUART1); - baudrate_changed = 0; - - new_baud = LL_LPUART_GetBaudRate(LPUART1, SYSTICK_FREQ_HZ); - } - - /* It is time for measurement */ - if (tim21_elapsed_period == 1) - { - /* TODO: Check the data */ - /* Read SHT4x data (always connected) */ - sht4x_measure(&T_SHT4x, &RH_SHT4x); - - /* Read SCD4x data (if connected) */ - if (scd4x_is_connected == 1) - { - scd4x_read_measurement(&CO2, - &T_SCD4x, - &RH_SCD4x); - if (CO2 > 0) { - co2_valid = 1; - } else { - co2_valid = 0; - } - } - - /* Read SPS30 data (if connected) */ - if (sps30_is_connected == 1) - { - sps30_read_measured_values(sps30_measured_data, 10); - } - /* TODO: Process data and light a desired color of LED */ - /* TODO: Add hystheresis */ - - /* Reset the TIM21 Elapsed Period Flag */ - tim21_elapsed_period = 0; - } - /* TEST END */ - if (sensor_config.led_on) { - if (co2_valid == 1) { - if (CO2 <= sensor_config.led_co2_alert_limit1) { - /* CO2 is OK -> GREEN */ - LL_GPIO_SetOutputPin(LED_R_GPIO_Port, LED_R_Pin); - LL_GPIO_ResetOutputPin(LED_G_GPIO_Port, LED_G_Pin); - LL_GPIO_SetOutputPin(LED_B_GPIO_Port, LED_B_Pin); - - } else if ((sensor_config.led_co2_alert_limit1 < CO2) && (CO2 <= sensor_config.led_co2_alert_limit2)) { - /* CO2 is NOT OK -> YELLOW */ - LL_GPIO_ResetOutputPin(LED_R_GPIO_Port, LED_R_Pin); - LL_GPIO_ResetOutputPin(LED_G_GPIO_Port, LED_G_Pin); - LL_GPIO_SetOutputPin(LED_B_GPIO_Port, LED_B_Pin); - - } else if (sensor_config.led_co2_alert_limit2 < CO2) { - /* CO2 is CRITICAL -> RED */ - LL_GPIO_ResetOutputPin(LED_R_GPIO_Port, LED_R_Pin); - LL_GPIO_SetOutputPin(LED_G_GPIO_Port, LED_G_Pin); - LL_GPIO_SetOutputPin(LED_B_GPIO_Port, LED_B_Pin); - } - } else { - - LL_GPIO_ResetOutputPin(LED_R_GPIO_Port, LED_R_Pin); - LL_GPIO_SetOutputPin(LED_G_GPIO_Port, LED_G_Pin); - LL_GPIO_ResetOutputPin(LED_B_GPIO_Port, LED_B_Pin); - } - - } else { - LL_GPIO_SetOutputPin(LED_R_GPIO_Port, LED_R_Pin); - LL_GPIO_SetOutputPin(LED_G_GPIO_Port, LED_G_Pin); - LL_GPIO_SetOutputPin(LED_B_GPIO_Port, LED_B_Pin); - } - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - LL_FLASH_SetLatency(LL_FLASH_LATENCY_0); - while(LL_FLASH_GetLatency()!= LL_FLASH_LATENCY_0) - { - } - LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE1); - LL_RCC_HSI_Enable(); - - /* Wait till HSI is ready */ - while(LL_RCC_HSI_IsReady() != 1) - { - - } - LL_RCC_HSI_SetCalibTrimming(16); - LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSI, LL_RCC_PLL_MUL_3, LL_RCC_PLL_DIV_4); - LL_RCC_PLL_Enable(); - - /* Wait till PLL is ready */ - while(LL_RCC_PLL_IsReady() != 1) - { - - } - LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1); - LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1); - LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1); - LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL); - - /* Wait till System clock is ready */ - while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL) - { - - } - - LL_Init1msTick(12000000); - - LL_SetSystemCoreClock(12000000); - LL_RCC_SetLPUARTClockSource(LL_RCC_LPUART1_CLKSOURCE_PCLK1); - LL_RCC_SetI2CClockSource(LL_RCC_I2C1_CLKSOURCE_PCLK1); -} - -/** - * @brief I2C1 Initialization Function - * @param None - * @retval None - */ -static void MX_I2C1_Init(void) -{ - - /* USER CODE BEGIN I2C1_Init 0 */ - - /* USER CODE END I2C1_Init 0 */ - - LL_I2C_InitTypeDef I2C_InitStruct = {0}; - - LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; - - LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); - /**I2C1 GPIO Configuration - PA9 ------> I2C1_SCL - PA10 ------> I2C1_SDA - */ - GPIO_InitStruct.Pin = LL_GPIO_PIN_9; - GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; - GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN; - GPIO_InitStruct.Pull = LL_GPIO_PULL_UP; - GPIO_InitStruct.Alternate = LL_GPIO_AF_1; - LL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = LL_GPIO_PIN_10; - GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; - GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN; - GPIO_InitStruct.Pull = LL_GPIO_PULL_UP; - GPIO_InitStruct.Alternate = LL_GPIO_AF_1; - LL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - /* Peripheral clock enable */ - LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1); - - /* USER CODE BEGIN I2C1_Init 1 */ - - /* USER CODE END I2C1_Init 1 */ - /** I2C Initialization - */ - LL_I2C_EnableAutoEndMode(I2C1); - LL_I2C_DisableOwnAddress2(I2C1); - LL_I2C_DisableGeneralCall(I2C1); - LL_I2C_EnableClockStretching(I2C1); - I2C_InitStruct.PeripheralMode = LL_I2C_MODE_I2C; - I2C_InitStruct.Timing = 0x40000A0B; - I2C_InitStruct.AnalogFilter = LL_I2C_ANALOGFILTER_ENABLE; - I2C_InitStruct.DigitalFilter = 0; - I2C_InitStruct.OwnAddress1 = 0; - I2C_InitStruct.TypeAcknowledge = LL_I2C_ACK; - I2C_InitStruct.OwnAddrSize = LL_I2C_OWNADDRESS1_7BIT; - LL_I2C_Init(I2C1, &I2C_InitStruct); - LL_I2C_SetOwnAddress2(I2C1, 0, LL_I2C_OWNADDRESS2_NOMASK); - /* USER CODE BEGIN I2C1_Init 2 */ - /* USER CODE END I2C1_Init 2 */ - -} - -/** - * @brief LPUART1 Initialization Function - * @param None - * @retval None - */ -static void MX_LPUART1_UART_Init(void) -{ - - /* USER CODE BEGIN LPUART1_Init 0 */ - - /* USER CODE END LPUART1_Init 0 */ - - LL_LPUART_InitTypeDef LPUART_InitStruct = {0}; - - LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; - - /* Peripheral clock enable */ - LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_LPUART1); - - LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); - LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB); - /**LPUART1 GPIO Configuration - PA0-CK_IN ------> LPUART1_RX - PA1 ------> LPUART1_TX - PB1 ------> LPUART1_DE - */ - GPIO_InitStruct.Pin = LL_GPIO_PIN_0; - GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; - GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; - GPIO_InitStruct.Pull = LL_GPIO_PULL_UP; - GPIO_InitStruct.Alternate = LL_GPIO_AF_6; - LL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = LL_GPIO_PIN_1; - GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; - GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; - GPIO_InitStruct.Pull = LL_GPIO_PULL_UP; - GPIO_InitStruct.Alternate = LL_GPIO_AF_6; - LL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = LL_GPIO_PIN_1; - GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; - GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; - GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; - GPIO_InitStruct.Alternate = LL_GPIO_AF_4; - LL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /* LPUART1 interrupt Init */ - NVIC_SetPriority(LPUART1_IRQn, 0); - NVIC_EnableIRQ(LPUART1_IRQn); - - /* USER CODE BEGIN LPUART1_Init 1 */ - - /* USER CODE END LPUART1_Init 1 */ - LPUART_InitStruct.BaudRate = config_baudrates[sensor_config.baudrate_index]; - LPUART_InitStruct.DataWidth = LL_LPUART_DATAWIDTH_9B; - LPUART_InitStruct.StopBits = LL_LPUART_STOPBITS_1; - LPUART_InitStruct.Parity = LL_LPUART_PARITY_EVEN; - LPUART_InitStruct.TransferDirection = LL_LPUART_DIRECTION_TX_RX; - LPUART_InitStruct.HardwareFlowControl = LL_LPUART_HWCONTROL_NONE; - LL_LPUART_Init(LPUART1, &LPUART_InitStruct); - LL_LPUART_EnableDEMode(LPUART1); - LL_LPUART_SetDESignalPolarity(LPUART1, LL_LPUART_DE_POLARITY_HIGH); - LL_LPUART_SetDEAssertionTime(LPUART1, 0); - LL_LPUART_SetDEDeassertionTime(LPUART1, 0); - /* USER CODE BEGIN LPUART1_Init 2 */ - - /* Enable IDLE Interrupt */ - LL_LPUART_EnableIT_IDLE(LPUART1); - - /* Enable RX Not Empty Interrupt */ - LL_LPUART_EnableIT_RXNE(LPUART1); - - LL_LPUART_EnableDirectionRx(LPUART1); - LL_LPUART_EnableDirectionTx(LPUART1); - LL_LPUART_Enable(LPUART1); - /* USER CODE END LPUART1_Init 2 */ - -} - -/** - * @brief TIM21 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM21_Init(void) -{ - - /* USER CODE BEGIN TIM21_Init 0 */ - - /* USER CODE END TIM21_Init 0 */ - - LL_TIM_InitTypeDef TIM_InitStruct = {0}; - - /* Peripheral clock enable */ - LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_TIM21); - - /* TIM21 interrupt Init */ - NVIC_SetPriority(TIM21_IRQn, 0); - NVIC_EnableIRQ(TIM21_IRQn); - - /* USER CODE BEGIN TIM21_Init 1 */ - - /* USER CODE END TIM21_Init 1 */ - TIM_InitStruct.Prescaler = tim21_prescaler; - TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP; - TIM_InitStruct.Autoreload = tim21_period; - TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1; - LL_TIM_Init(TIM21, &TIM_InitStruct); - LL_TIM_EnableARRPreload(TIM21); - LL_TIM_SetClockSource(TIM21, LL_TIM_CLOCKSOURCE_INTERNAL); - LL_TIM_SetTriggerOutput(TIM21, LL_TIM_TRGO_RESET); - LL_TIM_DisableMasterSlaveMode(TIM21); - /* USER CODE BEGIN TIM21_Init 2 */ - - /* USER CODE END TIM21_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; - - /* GPIO Ports Clock Enable */ - LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); - - /**/ - LL_GPIO_SetOutputPin(LED_B_GPIO_Port, LED_B_Pin); - - /**/ - LL_GPIO_SetOutputPin(LED_G_GPIO_Port, LED_G_Pin); - - /**/ - LL_GPIO_SetOutputPin(LED_R_GPIO_Port, LED_R_Pin); - - /**/ - GPIO_InitStruct.Pin = LED_B_Pin; - GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; - GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; - GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; - LL_GPIO_Init(LED_B_GPIO_Port, &GPIO_InitStruct); - - /**/ - GPIO_InitStruct.Pin = LED_G_Pin; - GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; - GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; - GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; - LL_GPIO_Init(LED_G_GPIO_Port, &GPIO_InitStruct); - - /**/ - GPIO_InitStruct.Pin = LED_R_Pin; - GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; - GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; - GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; - LL_GPIO_Init(LED_R_GPIO_Port, &GPIO_InitStruct); - -} - -/* USER CODE BEGIN 4 */ -void LPUART1_TX_Buffer(uint8_t* buffer_tx, uint16_t buffer_tx_len) -{ - __disable_irq(); - for (uint16_t i = 0; i < buffer_tx_len; i++) - { - LL_LPUART_TransmitData9(LPUART1, buffer_tx[i]); - while (!LL_LPUART_IsActiveFlag_TXE(LPUART1)); - } - __enable_irq(); -} - -int8_t uart_disable_interrupts(void) -{ - LL_LPUART_Disable(LPUART1); - LL_LPUART_DisableIT_IDLE(LPUART1); - LL_LPUART_EnableIT_RXNE(LPUART1); - - return 0; -} - -int8_t uart_enable_interrupts(void) -{ - LL_LPUART_Enable(LPUART1); - LL_LPUART_ClearFlag_IDLE(LPUART1); - LL_LPUART_ClearFlag_NE(LPUART1); - LL_LPUART_EnableIT_IDLE(LPUART1); - LL_LPUART_EnableIT_RXNE(LPUART1); - - return 0; -} - -int8_t modbus_slave_callback(modbus_transaction_t *transaction) -{ - uint16_t register_number = transaction->register_number; - switch (transaction->function_code) - { - case MODBUS_READ_INPUT_REGISTERS: - for (int i = 0; i < transaction->register_count; i++, register_number++) - { - switch (register_number) - { - case REGISTER_NUM_CO2: - transaction->input_registers[i] = (uint16_t)CO2; - break; - case REGISTER_NUM_T_SHT4x: - transaction->input_registers[i] = (uint16_t)T_SHT4x; - break; - case REGISTER_NUM_RH_SHT4x: - transaction->input_registers[i] = (uint16_t)RH_SHT4x; - break; - case REGISTER_NUM_T_SCD4x: - transaction->input_registers[i] = (uint16_t)T_SCD4x; - break; - case REGISTER_NUM_RH_SCD4x: - transaction->input_registers[i] = (uint16_t)RH_SCD4x; - break; - case REGISTER_NUM_T_SHT4x_SIGNED: - transaction->input_registers_signed[i] = (int16_t)T_SHT4x; - break; - case REGISTER_NUM_T_SCD4x_SIGNED: - transaction->input_registers_signed[i] = (int16_t)T_SCD4x; - break; - default: - return MODBUS_ERROR_FUNCTION_NOT_IMPLEMENTED; - } - } - return MODBUS_OK; - case MODBUS_READ_HOLDING_REGISTERS: - for (int i = 0; i < transaction->register_count; i++, register_number++) - { - switch (register_number) - { - case REGISTER_NUM_LED_ON: - transaction->holding_registers[i] = (uint16_t)(sensor_config.led_on); - break; - case REGISTER_NUM_LED_BRIGHTNESS: - transaction->holding_registers[i] = (uint16_t)(sensor_config.led_brightness); - break; - case REGISTER_NUM_LED_SMOOTH: - transaction->holding_registers[i] = (uint16_t)(sensor_config.led_smooth); - break; - case REGISTER_NUM_CO2_ALERT_LIMIT1: - transaction->holding_registers[i] = (uint16_t)(sensor_config.led_co2_alert_limit1); - break; - case REGISTER_NUM_CO2_ALERT_LIMIT2: - transaction->holding_registers[i] = (uint16_t)(sensor_config.led_co2_alert_limit2); - break; - case REGISTER_NUM_SCD4x_T_OFFSET: - transaction->holding_registers[i] = (uint16_t)(sensor_config.scd4x_t_offset); - break; - case REGISTER_NUM_MODBUS_ADDR: - transaction->holding_registers[i] = (uint16_t)(sensor_config.modbus_addr); - break; - case REGISTER_NUM_BAUDRATE: - transaction->holding_registers[i] = (uint16_t)(sensor_config.baudrate_index); - break; - default: - return MODBUS_ERROR_FUNCTION_NOT_IMPLEMENTED; - } - } - return MODBUS_OK; - case MODBUS_WRITE_SINGLE_REGISTER: - transaction->register_count = 1; - case MODBUS_WRITE_MULTIPLE_REGISTERS: - for (int i = 0; i < transaction->register_count; i++, register_number++) - { - switch (register_number) - { - case REGISTER_NUM_LED_ON: - sensor_config.led_on = (uint8_t) transaction->holding_registers[i]; - break; - case REGISTER_NUM_LED_BRIGHTNESS: - sensor_config.led_brightness = (uint16_t) transaction->holding_registers[i]; - break; - case REGISTER_NUM_LED_SMOOTH: - sensor_config.led_smooth = (uint16_t) transaction->holding_registers[i]; - break; - case REGISTER_NUM_CO2_ALERT_LIMIT1: - sensor_config.led_co2_alert_limit1 = (uint16_t) transaction->holding_registers[i]; - break; - case REGISTER_NUM_CO2_ALERT_LIMIT2: - sensor_config.led_co2_alert_limit2 = (uint16_t) transaction->holding_registers[i]; - break; - case REGISTER_NUM_SCD4x_T_OFFSET: - sensor_config.scd4x_t_offset = (int16_t) transaction->holding_registers[i]; - break; - case REGISTER_NUM_MODBUS_ADDR: - sensor_config.modbus_addr = (uint16_t) transaction->holding_registers[i]; - modbus_address_changed = 1; - break; - case REGISTER_NUM_BAUDRATE: - if (transaction->holding_registers[0] < config_baudrates_length) - { - sensor_config.baudrate_index = (uint16_t) (transaction->holding_registers[i]); - baudrate_changed = 1; - } - break; - default: - return MODBUS_ERROR_FUNCTION_NOT_IMPLEMENTED; - } - } - sensor_config_pending_write = 1; - return MODBUS_OK; - default: - return MODBUS_ERROR_FUNCTION_NOT_IMPLEMENTED; - } - /* Catch-all error */ - return MODBUS_ERROR_FUNCTION_NOT_IMPLEMENTED; /* nothing implemented yet! TODO */ -} - -int8_t modbus_transmit_function(uint8_t *buffer, uint16_t data_len) -{ - /* TODO */ - LPUART1_TX_Buffer(buffer, data_len); - return MODBUS_OK; -} -/* 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 */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/fw_old/Core/Src/modbus.c b/fw_old/Core/Src/modbus.c deleted file mode 100644 index 4ec6e09..0000000 --- a/fw_old/Core/Src/modbus.c +++ /dev/null @@ -1,265 +0,0 @@ -/* - * modbus.c - * - * Created on: Jul 18, 2021 - * Author: user - */ - -#include "modbus.h" - -/* - * Global variables - */ - -/* Modbus TX buffer; can be also used for RX in memory constrained systems (e.g. in main.c); - * NOTE if shared buffer is used for TX/RX, care must be taken to prevent writing into buffer - * during execution of modbus_process_message() */ -uint8_t modbus_buffer[MODBUS_MAX_RTU_FRAME_SIZE]; - -/* device address: declared */ -uint8_t modbus_slave_address = MODBUS_DEFAULT_SLAVE_ADDRESS; - -/* - * CRC16 functions - * see https://modbus.org/docs/Modbus_over_serial_line_V1_02.pdf - * section 6.2.2 - */ - -/* CRC16 (without memory mapped values) - * taken from https://ctlsys.com/support/how_to_compute_the_modbus_rtu_message_crc/ */ -uint16_t modbus_CRC16(const uint8_t *buf, int len) -{ - uint16_t crc = 0xFFFF; - - for (int pos = 0; pos < len; pos++) { - crc ^= (uint16_t)buf[pos]; // XOR byte into least sig. byte of crc - - for (int i = 8; i != 0; i--) { // Loop over each bit - if ((crc & 0x0001) != 0) { // If the LSB is set - crc >>= 1; // Shift right and XOR 0xA001 - crc ^= 0xA001; - } else { // Else LSB is not set - crc >>= 1; // Just shift right - } - } - } - // Note, this number has low and high bytes swapped, so use it accordingly (or swap bytes) - return crc; -} - -/* - * Private functions - */ - -/* here we assume buffer has minimal size of MODBUS_MAX_RTU_FRAME_SIZE; - * this function is private, so hopefully it's going to be ok */ -int8_t modbus_copy_reply_to_buffer(uint8_t *buffer, uint8_t *msg_len, modbus_transaction_t *transaction) -{ - uint16_t crc16; - uint8_t byte_count; - - // TODO use relative indices (increments) instead of absolute - buffer[0] = modbus_slave_address; - buffer[1] = transaction->function_code; - *msg_len = 5; - - if (transaction->function_code & MODBUS_ERROR_FLAG) { - /* sending error reply */ - buffer[2] = transaction->exception.exception_code; - } else { - switch (transaction->function_code) { - case MODBUS_READ_HOLDING_REGISTERS: - case MODBUS_READ_INPUT_REGISTERS: - byte_count = transaction->register_count * 2; - buffer[2] = byte_count; - *msg_len = byte_count + 5; - for (int i = 0; i < transaction->register_count; i++) { - // TODO endianness handling - /* buffer16b is alias for both holding and input register buffers */ - buffer[3 + 2*i] = transaction->buffer16b[i] >> 8; - buffer[4 + 2*i] = transaction->buffer16b[i] & 0xff; - } - break; - case MODBUS_WRITE_SINGLE_REGISTER: - buffer[2] = (uint8_t) (transaction->register_address >> 8); - buffer[3] = (uint8_t) transaction->register_address; - buffer[4] = (uint8_t) (transaction->holding_registers[0] >> 8); - buffer[5] = (uint8_t) transaction->holding_registers[0]; - *msg_len = 8; - break; - case MODBUS_WRITE_MULTIPLE_REGISTERS: - buffer[2] = (uint8_t) (transaction->register_address >> 8); - buffer[3] = (uint8_t) transaction->register_address; - buffer[4] = (uint8_t) (transaction->register_count >> 8); - buffer[5] = (uint8_t) transaction->register_count; - *msg_len = 8; - break; - } - } - crc16 = modbus_CRC16(buffer, *msg_len - 2); /* last two bytes is the checksum itself */ - buffer[*msg_len - 2] = crc16 & 0xff; - buffer[*msg_len - 1] = crc16 >> 8; -} - -/* - * Public function definitions - */ - -int8_t modbus_slave_set_address(uint8_t address) -{ - if (address == 0) { - /* address 0 is broadcast address */ - return MODBUS_ERROR; - } - modbus_slave_address = address; - return MODBUS_OK; -} - -int8_t modbus_slave_process_msg(const uint8_t *buffer, int len) -{ - /* - * TODO list: - * - * 1) check that errors and exceptions are handled according to Modbus_Application_Protocol_V1_1b.pdf - * 2) buffer overflow prevention: for each function code, check that buffer is long enough - */ - /* transaction holds message context and content: - * it wraps all necessary buffers and variables */ - modbus_transaction_t transaction; - int8_t callback_result; - uint8_t buffer_pos = 0; - uint8_t byte_count; - - if (len < MODBUS_MINIMAL_FRAME_LEN) { - /* frame too short; return error */ - return MODBUS_ERROR_FRAME_INVALID; - } - /* check CRC first */ - uint16_t crc_received = (buffer[len - 1] << 8) | buffer[len - 2]; - uint16_t crc_calculated = modbus_CRC16(buffer, len - 2); - if (crc_received != crc_calculated) { - /* CRC mismatch, return error */ - //printf("crc mismatch: received 0x%x, calculated 0x%x\n", crc_received, crc_calculated); - return MODBUS_ERROR_CRC; - } - /* check if address matches ours */ - uint8_t address = buffer[buffer_pos++]; - if (address != modbus_slave_address && address != MODBUS_BROADCAST_ADDR) { - /* Message is not for us */ - return MODBUS_OK; - } - /* get function code */ - transaction.function_code = buffer[buffer_pos++]; - transaction.exception.exception_code = 0; - - if (transaction.function_code == MODBUS_READ_DEVICE_IDENTIFICATION) { - // TODO - goto modbus_send; - } - - /* set starting register number */ - switch (transaction.function_code) { - /* coils */ - case MODBUS_READ_DO: - case MODBUS_WRITE_SINGLE_DO: - case MODBUS_WRITE_MULTIPLE_DO: - transaction.register_number = MODBUS_DO_START_NUMBER; - break; - /* discrete inputs */ - case MODBUS_READ_DI: - transaction.register_number = MODBUS_DI_START_NUMBER; - break; - /* input registers */ - case MODBUS_READ_AI: - transaction.register_number = MODBUS_AI_START_NUMBER; - break; - /* holding registers */ - case MODBUS_READ_AO: - case MODBUS_WRITE_SINGLE_AO: - case MODBUS_WRITE_MULTIPLE_AO: - case MODBUS_READ_WRITE_MULTIPLE_REGISTERS: - transaction.register_number = MODBUS_AO_START_NUMBER; - break; - } - - #define MODBUS_FLAG_WRITE 0x01 - #define MODBUS_FLAG_SINGLE 0x02 - uint8_t flags = 0x00; - - /* process message */ - switch (transaction.function_code) { - case MODBUS_WRITE_SINGLE_COIL: - case MODBUS_WRITE_SINGLE_REGISTER: /* holding register */ - flags |= MODBUS_FLAG_SINGLE; - case MODBUS_WRITE_MULTIPLE_COILS: - case MODBUS_WRITE_MULTIPLE_REGISTERS: - flags |= MODBUS_FLAG_WRITE; - case MODBUS_READ_DISCRETE_INPUTS: - case MODBUS_READ_COILS: - case MODBUS_READ_INPUT_REGISTERS: - case MODBUS_READ_HOLDING_REGISTERS: - if (len < (MODBUS_MINIMAL_FRAME_LEN + 4)) { - /* buffer too short to contain everything we need */ - return MODBUS_ERROR; - } - transaction.register_address = (buffer[buffer_pos++] << 8) | buffer[buffer_pos++]; - // TODO check length! - if (flags & MODBUS_FLAG_WRITE) { - if (flags & MODBUS_FLAG_SINGLE) { - transaction.holding_registers[0] = (buffer[buffer_pos++] << 8) | buffer[buffer_pos++]; - } else { - /* Write multiple registers */ - transaction.register_count = (buffer[buffer_pos++] << 8) | buffer[buffer_pos++]; - byte_count = buffer[buffer_pos++]; - if (transaction.register_count > 123 || 2*transaction.register_count != byte_count) { - /* Max number of register is defined by Modbus_Application_Protocol_V1_1b, section 6.12 */ - transaction.exception.exception_code = MODBUS_EXCEPTION_ILLEGAL_REGISTER_QUANTITY; - } else { - for (uint8_t i = 0; i < transaction.register_count; i++) { - transaction.holding_registers[i] = (buffer[buffer_pos++] << 8) | buffer[buffer_pos++]; - } - } - } - } else { - transaction.register_count = (buffer[buffer_pos++] << 8) | buffer[buffer_pos++]; - if ( - transaction.register_count < 1 || - transaction.register_count > MODBUS_MAX_REGISTERS - ) { - transaction.exception.exception_code = MODBUS_EXCEPTION_ILLEGAL_DATA_VALUE; - } - } - // add offset to register number - transaction.register_number += transaction.register_address; - break; - default: - /* function code not known / not implemented, reply with - * ExceptionCode 1 */ - transaction.exception.exception_code = MODBUS_EXCEPTION_ILLEGAL_FUNCTION; - break; - } - /* data in modbus_buffer have been processed and buffer can be re-used for TX */ - /* handle reply */ - if (transaction.exception.exception_code != 0) { - /* indicate error */ - transaction.function_code |= MODBUS_ERROR_FLAG; - } else { - callback_result = modbus_slave_callback(&transaction); - /* error handling */ - if (callback_result != MODBUS_OK) { - transaction.function_code |= MODBUS_ERROR_FLAG; - if (callback_result == MODBUS_ERROR_FUNCTION_NOT_IMPLEMENTED) { - transaction.exception.exception_code = MODBUS_EXCEPTION_ILLEGAL_FUNCTION; - } else if (callback_result == MODBUS_ERROR_REGISTER_NOT_IMPLEMENTED) { - transaction.exception.exception_code = MODBUS_EXCEPTION_ILLEGAL_DATA_ADDRESS; - } - } - } - uint8_t msg_len = 0; -modbus_send: - if (address != MODBUS_BROADCAST_ADDR) { - /* send only if master request was not broadcast */ - modbus_copy_reply_to_buffer(modbus_buffer, &msg_len, &transaction); - modbus_transmit_function(modbus_buffer, msg_len); - } -} diff --git a/fw_old/Core/Src/scd4x.c b/fw_old/Core/Src/scd4x.c deleted file mode 100644 index 57ea366..0000000 --- a/fw_old/Core/Src/scd4x.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - * sht4x.c - * - * Created on: Jun 8, 2021 - * Author: user - */ - -#include "scd4x.h" -#include "main.h" /* for uart_disable_interrupts() */ - -int8_t scd4x_send_cmd(scd4x_cmd_t cmd) -{ - uint8_t buffer[32]; - int result; - - // start measurement - buffer[0] = cmd >> 8; - buffer[1] = cmd & 0x00ff; - result = i2c_transmit(SCD4X_I2C_ADDRESS<<1, buffer, 2); - if (result != I2C_OK) { - return SCD4X_ERROR; - } - - return SCD4X_OK; -} - -int8_t scd4x_read_data(uint8_t *buffer, int len) -{ - return SCD4X_OK; -} - -int8_t scd4x_start_periodic_measurement( void ) -{ - return scd4x_send_cmd(SCD4X_START_PERIODIC_MEASUREMENT); -} - -int8_t scd4x_stop_periodic_measurement( void ) -{ - return scd4x_send_cmd(SCD4X_STOP_PERIODIC_MEASUREMENT); -} - -int8_t scd4x_perform_factory_reset( void ) -{ - return scd4x_send_cmd(SCD4X_PERFORM_FACTORY_RESET); -} - -int8_t scd4x_read_measurement(uint16_t * co2, int16_t *temperature, uint16_t *relative_humidity) -{ - uint8_t buffer[32]; - int result; - - // start measurement - // TODO: Check for data ready - /* - buffer[0] = GET_DATA_READY_STATUS >> 8; - buffer[1] = GET_DATA_READY_STATUS & 0x00ff; - result = i2c_transmit(SCD4X_I2C_ADDRESS<<1, buffer, 2); - if (result != I2C_OK) { - return SCD4X_ERROR; - } - LL_mDelay(100); // 10 ms should be enough - // read out - result = i2c_receive(SCD4X_I2C_ADDRESS<<1, buffer, 6); - if (result != I2C_OK) { - return SCD4X_ERROR; - }*/ - - - // disable interrupts to prevent MODBUS/I2C conflict - uart_disable_interrupts(); - // start measurement - buffer[0] = SCD4X_READ_MEASUREMENT >> 8; - buffer[1] = SCD4X_READ_MEASUREMENT & 0x00ff; - result = i2c_transmit(SCD4X_I2C_ADDRESS<<1, buffer, 2); - - // TODO: Proc to vraci NACK? Vyresit. - /*if (result != I2C_OK) { - return SCD4X_ERROR; - }*/ - uart_enable_interrupts(); - LL_mDelay(1); // 10 ms should be enough - uart_disable_interrupts(); - // read out - result = i2c_receive(SCD4X_I2C_ADDRESS<<1, buffer, 9); - uart_enable_interrupts(); - if (result != I2C_OK) - { - return SCD4X_ERROR; - } - - // TODO checksum - // Convert to T and RH; taken directly from pseudocode in SHT4x datasheet, page 3 - uint32_t co2_ticks = (buffer[0] << 8) + buffer[1]; - uint32_t t_ticks = (buffer[3] << 8) + buffer[4]; - uint32_t rh_ticks = (buffer[6] << 8) + buffer[7]; - int t_degC = -450 + 10 * 175 * t_ticks / 65535; - int rh_pRH = 100 * rh_ticks / 65535; - if (rh_pRH > 100) { - rh_pRH = 100; - } - if (rh_pRH < 0) { - rh_pRH = 0; - } - *co2 = co2_ticks; - *temperature = t_degC; - *relative_humidity = rh_pRH; - - return SCD4X_OK; -} diff --git a/fw_old/Core/Src/sht4x.c b/fw_old/Core/Src/sht4x.c deleted file mode 100644 index 70ce26f..0000000 --- a/fw_old/Core/Src/sht4x.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * sht4x.c - * - * Created on: Jun 8, 2021 - * Author: user - */ - -#include "sht4x.h" -#include "main.h" /* for uart_disable_interrupts() */ - -int8_t sht4x_send_cmd(sht4x_cmd_t cmd) -{ - return SHT4X_OK; -} - -int8_t sht4x_read_data(uint8_t *buffer, int len) -{ - return SHT4X_OK; -} - -int8_t sht4x_measure(int16_t *temperature, uint16_t *relative_humidity) -{ - uint8_t buffer[32]; - int result; - - // disable interrupts - uart_disable_interrupts(); - // start measurement - buffer[0] = SHT4X_START_MEAS_HIGH_PRECISION; - result = i2c_transmit(SHT4X_I2C_ADDRESS<<1, buffer, 1); - // TODO: Proc to vraci NACK? Vyresit. - /* - if (result != I2C_OK) { - return SHT4X_ERROR; - }*/ - // enable interrupts while waiting - uart_enable_interrupts(); - LL_mDelay(10); // 10 ms should be enough - uart_disable_interrupts(); - // read out - result = i2c_receive(SHT4X_I2C_ADDRESS<<1, buffer, 6); - // enable interrupts again - uart_enable_interrupts(); - if (result != I2C_OK) { - return SHT4X_ERROR; - } - // TODO checksum - // Convert to T and RH; taken directly from pseudocode in SHT4x datasheet, page 3 - uint32_t t_ticks = (buffer[0] << 8) + buffer[1]; - uint32_t rh_ticks = (buffer[3] << 8) + buffer[4]; - int t_degC = -450 + 10 * 175 * t_ticks / 65535; /* temperature * 10 */ - int rh_pRH = -6 + 125 * rh_ticks / 65535; - if (rh_pRH > 100) { - rh_pRH = 100; - } - if (rh_pRH < 0) { - rh_pRH = 0; - } - *temperature = t_degC; - *relative_humidity = rh_pRH; - - return SHT4X_OK; -} diff --git a/fw_old/Core/Src/sps30.c b/fw_old/Core/Src/sps30.c deleted file mode 100644 index c05a273..0000000 --- a/fw_old/Core/Src/sps30.c +++ /dev/null @@ -1,193 +0,0 @@ -/* - * sps30.c - * - * Created on: Jul 18, 2021 - * Author: david - */ - -#include "sps30.h" - -int8_t sps30_send_cmd(sps30_cmd_t cmd) -{ - uint8_t buffer[32]; - uint8_t result; - - // start measurement - buffer[0] = cmd >> 8; - buffer[1] = cmd & 0x00ff; - result = i2c_transmit(SPS30_I2C_ADDRESS<<1, buffer, 2); - // TODO: Proc to vraci NACK? Vyresit. - if (result != I2C_OK) { - return SPS30_ERROR; - } - - return SPS30_OK; -} - -int8_t sps30_start_measurement( void ) -{ - uint8_t i2c_tx_buffer[5]; - uint8_t data_for_crc = {SPS30_UINT16_FORMAT, 0x00}; - - uint8_t result; - - i2c_tx_buffer[0] = SPS30_START_MEASUREMENT >> 8; - i2c_tx_buffer[1] = SPS30_START_MEASUREMENT & 0x00ff; - i2c_tx_buffer[2] = SPS30_UINT16_FORMAT; - i2c_tx_buffer[3] = 0x00; - i2c_tx_buffer[4] = calculate_crc(data_for_crc); - - result = i2c_transmit(SPS30_I2C_ADDRESS<<1, i2c_tx_buffer, 5); - - // TODO: Proc to vraci NACK? Vyresit. - if (result != I2C_OK) { - return SPS30_ERROR; - } - return SPS30_OK; -} - -int8_t sps30_stop_measurement( void ) -{ - return sps30_send_cmd(SPS30_STOP_MEASUREMENT); -} - -int8_t sps30_read_measured_values(uint16_t *measured_values, uint8_t measured_values_len) -{ - - if (measured_values_len != 10) - { - return -5; - } - - uint8_t i2c_tx_buffer[2]; - uint8_t i2c_rx_buffer[30]; - - uint8_t result; - - // start measurement - i2c_tx_buffer[0] = SPS30_READ_MEASURED_VALUES >> 8; - i2c_tx_buffer[1] = SPS30_READ_MEASURED_VALUES & 0x00ff; - result = i2c_transmit(SPS30_I2C_ADDRESS<<1, i2c_tx_buffer, 2); - - // TODO: Proc to vraci NACK? Vyresit. - /*if (result != I2C_OK) { - return SPS30_ERROR; - } - return SPS30_OK;*/ - - LL_mDelay(1); // 10 ms should be enough - // read out - result = i2c_receive(SPS30_I2C_ADDRESS<<1, i2c_rx_buffer, 30); - if (result != I2C_OK) - { - return SPS30_ERROR; - } - - uint8_t checksums[10]; - - uint8_t j = 0; - for (uint8_t i = 0; i < 10; i++) - { - - measured_values[i] = (i2c_rx_buffer[j++] << 8) + i2c_rx_buffer[j++]; - checksums[i] = i2c_rx_buffer[j++]; - } - - return SPS30_OK; -} - -int8_t sps30_sleep( void ) -{ - return sps30_send_cmd(SPS30_SLEEP); -} - -int8_t sps30_wake_up( void ) -{ - return sps30_send_cmd(SPS30_WAKE_UP); - return sps30_send_cmd(SPS30_WAKE_UP); -} - -int8_t sps30_start_fan_cleaning( void ) -{ - return sps30_send_cmd(SPS30_START_FAN_CLEANING); -} - -int8_t sps30_reset( void ) -{ - return sps30_send_cmd(SPS30_RESET); -} - - -int8_t sps30_read_status_register ( void ) -{ - uint8_t i2c_tx_buffer[2]; - uint8_t i2c_rx_buffer[6]; - - uint8_t result; - - // start measurement - i2c_tx_buffer[0] = SPS30_READ_DEVICE_STATUS_REGISTER >> 8; - i2c_tx_buffer[1] = SPS30_READ_DEVICE_STATUS_REGISTER & 0x00ff; - result = i2c_transmit(SPS30_I2C_ADDRESS<<1, i2c_tx_buffer, 2); - - // TODO: Proc to vraci NACK? Vyresit. - /*if (result != I2C_OK) { - return SPS30_ERROR; - } - return SPS30_OK;*/ - - LL_mDelay(1); // 10 ms should be enough - // read out - result = i2c_receive(SPS30_I2C_ADDRESS<<1, i2c_rx_buffer, 6); - - return 0; -} - -int8_t sps30_read_firmware_version ( uint8_t * fw_ver_hi, uint8_t * fw_ver_lo ) -{ - uint8_t i2c_tx_buffer[2]; - uint8_t i2c_rx_buffer[3]; - - uint8_t result; - - // start measurement - i2c_tx_buffer[0] = SPS30_READ_VERSION >> 8; - i2c_tx_buffer[1] = SPS30_READ_VERSION & 0x00ff; - result = i2c_transmit(SPS30_I2C_ADDRESS<<1, i2c_tx_buffer, 2); - - // TODO: Proc to vraci NACK? Vyresit. - /*if (result != I2C_OK) { - return SPS30_ERROR; - } - return SPS30_OK;*/ - - LL_mDelay(1); // 10 ms should be enough - // read out - result = i2c_receive(SPS30_I2C_ADDRESS<<1, i2c_rx_buffer, 3); - /*if (result != I2C_OK) - { - return SPS30_ERROR; - }*/ - - *fw_ver_hi = i2c_rx_buffer[0]; - *fw_ver_lo = i2c_rx_buffer[1]; - - return SPS30_OK; -} - - -uint8_t calculate_crc(uint8_t data[2]) -{ - uint8_t crc = 0xFF; - for(uint8_t i = 0; i < 2; i++) { - crc ^= data[i]; - for(uint8_t bit = 8; bit > 0; --bit) { - if(crc & 0x80) { - crc = (crc << 1) ^ 0x31u; - } else { - crc = (crc << 1); - } - } - } - return crc; -} diff --git a/fw_old/Core/Src/stm32l0xx_it.c b/fw_old/Core/Src/stm32l0xx_it.c deleted file mode 100644 index 504a5a5..0000000 --- a/fw_old/Core/Src/stm32l0xx_it.c +++ /dev/null @@ -1,208 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file stm32l0xx_it.c - * @brief Interrupt Service Routines. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2021 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "stm32l0xx_it.h" -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include "modbus.h" -/* 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 */ -uint16_t lpuart1_rx_message_index = 0; -uint16_t lpuart1_rx_message_len = 0; -uint8_t lpuart1_rx_done = 0; -uint8_t lpuart1_rx_message_too_long = 0; - -uint8_t tim21_elapsed_period = 0; -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -/* USER CODE BEGIN PFP */ -void LPUART1_CharReception_Callback( void ); -/* 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-M0+ 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 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 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 */ - - /* USER CODE BEGIN SysTick_IRQn 1 */ - /* USER CODE END SysTick_IRQn 1 */ -} - -/******************************************************************************/ -/* STM32L0xx 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_stm32l0xx.s). */ -/******************************************************************************/ - -/** - * @brief This function handles TIM21 global interrupt. - */ -void TIM21_IRQHandler(void) -{ - /* USER CODE BEGIN TIM21_IRQn 0 */ - LL_TIM_ClearFlag_UPDATE(TIM21); - tim21_elapsed_period = 1; - - /* USER CODE END TIM21_IRQn 0 */ - /* USER CODE BEGIN TIM21_IRQn 1 */ - - /* USER CODE END TIM21_IRQn 1 */ -} - -/** - * @brief This function handles LPUART1 global interrupt / LPUART1 wake-up interrupt through EXTI line 28. - */ -void LPUART1_IRQHandler(void) -{ - /* USER CODE BEGIN LPUART1_IRQn 0 */ - /* Check RXNE flag value in SR register */ - if(LL_LPUART_IsActiveFlag_RXNE(LPUART1) && LL_LPUART_IsEnabledIT_RXNE(LPUART1)) - { - /* RXNE flag will be cleared by reading of DR register (done in call) */ - /* Call function in charge of handling Character reception */ - LPUART1_CharReception_Callback(); - } - /* USER CODE END LPUART1_IRQn 0 */ - /* USER CODE BEGIN LPUART1_IRQn 1 */ - /* If the IDLE flag is active */ - if (LL_LPUART_IsActiveFlag_IDLE(LPUART1) && LL_LPUART_IsEnabledIT_IDLE(LPUART1)) - { - /* Clear the IDLE flag */ - LL_LPUART_ClearFlag_IDLE(LPUART1); - - /* Reset the buffer index */ - lpuart1_rx_message_len = lpuart1_rx_message_index; - lpuart1_rx_message_index = 0; - lpuart1_rx_done = 1; - if (lpuart1_rx_message_len > MODBUS_MAX_RTU_FRAME_SIZE) - { - lpuart1_rx_message_too_long = 1; - } - } - /* USER CODE END LPUART1_IRQn 1 */ -} - -/* USER CODE BEGIN 1 */ -void LPUART1_CharReception_Callback( void ) -{ - uint16_t lpuart1_rx_bit = LL_LPUART_ReceiveData9(LPUART1); - if (lpuart1_rx_message_index < MODBUS_MAX_RTU_FRAME_SIZE) - { - modbus_buffer[lpuart1_rx_message_index] = (uint8_t)lpuart1_rx_bit; - } - lpuart1_rx_message_index++; -} -/* USER CODE END 1 */ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/fw_old/Core/Src/syscalls.c b/fw_old/Core/Src/syscalls.c deleted file mode 100644 index 4ec9584..0000000 --- a/fw_old/Core/Src/syscalls.c +++ /dev/null @@ -1,159 +0,0 @@ -/** - ****************************************************************************** - * @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 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Includes */ -#include -#include -#include -#include -#include -#include -#include -#include - - -/* Variables */ -//#undef errno -extern int errno; -extern int __io_putchar(int ch) __attribute__((weak)); -extern int __io_getchar(void) __attribute__((weak)); - -register char * stack_ptr asm("sp"); - -char *__env[1] = { 0 }; -char **environ = __env; - - -/* Functions */ -void initialise_monitor_handles() -{ -} - -int _getpid(void) -{ - return 1; -} - -int _kill(int pid, int 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) -{ - int DataIdx; - - for (DataIdx = 0; DataIdx < len; DataIdx++) - { - *ptr++ = __io_getchar(); - } - -return len; -} - -__attribute__((weak)) int _write(int file, char *ptr, int len) -{ - int DataIdx; - - for (DataIdx = 0; DataIdx < len; DataIdx++) - { - __io_putchar(*ptr++); - } - return len; -} - -int _close(int file) -{ - return -1; -} - - -int _fstat(int file, struct stat *st) -{ - st->st_mode = S_IFCHR; - return 0; -} - -int _isatty(int file) -{ - return 1; -} - -int _lseek(int file, int ptr, int dir) -{ - return 0; -} - -int _open(char *path, int flags, ...) -{ - /* Pretend like we always fail */ - return -1; -} - -int _wait(int *status) -{ - errno = ECHILD; - return -1; -} - -int _unlink(char *name) -{ - errno = ENOENT; - return -1; -} - -int _times(struct tms *buf) -{ - return -1; -} - -int _stat(char *file, struct stat *st) -{ - st->st_mode = S_IFCHR; - return 0; -} - -int _link(char *old, char *new) -{ - errno = EMLINK; - return -1; -} - -int _fork(void) -{ - errno = EAGAIN; - return -1; -} - -int _execve(char *name, char **argv, char **env) -{ - errno = ENOMEM; - return -1; -} diff --git a/fw_old/Core/Src/sysmem.c b/fw_old/Core/Src/sysmem.c deleted file mode 100644 index d7cc52c..0000000 --- a/fw_old/Core/Src/sysmem.c +++ /dev/null @@ -1,80 +0,0 @@ -/** - ****************************************************************************** - * @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) 2020 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* 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/fw_old/Core/Src/system_stm32l0xx.c b/fw_old/Core/Src/system_stm32l0xx.c deleted file mode 100644 index 9189ed8..0000000 --- a/fw_old/Core/Src/system_stm32l0xx.c +++ /dev/null @@ -1,275 +0,0 @@ -/** - ****************************************************************************** - * @file system_stm32l0xx.c - * @author MCD Application Team - * @brief CMSIS Cortex-M0+ 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_stm32l0xx.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) 2016 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup stm32l0xx_system - * @{ - */ - -/** @addtogroup STM32L0xx_System_Private_Includes - * @{ - */ - -#include "stm32l0xx.h" - -#if !defined (HSE_VALUE) - #define HSE_VALUE ((uint32_t)8000000U) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (MSI_VALUE) - #define MSI_VALUE ((uint32_t)2097152U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -#if !defined (HSI_VALUE) - #define HSI_VALUE ((uint32_t)16000000U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - - -/** - * @} - */ - -/** @addtogroup STM32L0xx_System_Private_TypesDefinitions - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32L0xx_System_Private_Defines - * @{ - */ -/************************* Miscellaneous Configuration ************************/ - -/* 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. */ -#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset 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. */ -#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. - This value must be a multiple of 0x200. */ -#endif /* VECT_TAB_SRAM */ -#endif /* USER_VECT_TAB_ADDRESS */ - -/******************************************************************************/ -/** - * @} - */ - -/** @addtogroup STM32L0xx_System_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32L0xx_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 = 2097152U; /* 32.768 kHz * 2^6 */ - 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}; - const uint8_t PLLMulTable[9] = {3U, 4U, 6U, 8U, 12U, 16U, 24U, 32U, 48U}; - -/** - * @} - */ - -/** @addtogroup STM32L0xx_System_Private_FunctionPrototypes - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32L0xx_System_Private_Functions - * @{ - */ - -/** - * @brief Setup the microcontroller system. - * @param None - * @retval None - */ -void SystemInit (void) -{ - /* Configure the Vector Table location add offset address ------------------*/ -#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 variable 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 stm32l0xx_hal.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 stm32l0xx_hal.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 = 0U, pllmul = 0U, plldiv = 0U, pllsource = 0U, msirange = 0U; - - /* Get SYSCLK source -------------------------------------------------------*/ - tmp = RCC->CFGR & RCC_CFGR_SWS; - - switch (tmp) - { - case 0x00U: /* MSI used as system clock */ - msirange = (RCC->ICSCR & RCC_ICSCR_MSIRANGE) >> RCC_ICSCR_MSIRANGE_Pos; - SystemCoreClock = (32768U * (1U << (msirange + 1U))); - break; - case 0x04U: /* HSI used as system clock */ - if ((RCC->CR & RCC_CR_HSIDIVF) != 0U) - { - SystemCoreClock = HSI_VALUE / 4U; - } - else - { - SystemCoreClock = HSI_VALUE; - } - break; - case 0x08U: /* HSE used as system clock */ - SystemCoreClock = HSE_VALUE; - break; - default: /* 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 >> RCC_CFGR_PLLMUL_Pos)]; - plldiv = (plldiv >> RCC_CFGR_PLLDIV_Pos) + 1U; - - pllsource = RCC->CFGR & RCC_CFGR_PLLSRC; - - if (pllsource == 0x00U) - { - /* HSI oscillator clock selected as PLL clock entry */ - if ((RCC->CR & RCC_CR_HSIDIVF) != 0U) - { - SystemCoreClock = (((HSI_VALUE / 4U) * pllmul) / plldiv); - } - else - { - SystemCoreClock = (((HSI_VALUE) * pllmul) / plldiv); - } - } - else - { - /* HSE selected as PLL clock entry */ - SystemCoreClock = (((HSE_VALUE) * pllmul) / plldiv); - } - break; - } - /* Compute HCLK clock frequency --------------------------------------------*/ - /* Get HCLK prescaler */ - tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos)]; - /* HCLK clock frequency */ - SystemCoreClock >>= tmp; -} - - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/fw_old/Core/Startup/startup_stm32l011f4ux.s b/fw_old/Core/Startup/startup_stm32l011f4ux.s deleted file mode 100644 index a3c31f9..0000000 --- a/fw_old/Core/Startup/startup_stm32l011f4ux.s +++ /dev/null @@ -1,278 +0,0 @@ -/** - ****************************************************************************** - * @file startup_stm32l011xx.s - * @author MCD Application Team - * @brief STM32L011xx 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 component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - - .syntax unified - .cpu cortex-m0plus - .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 */ - -/*Check if boot space corresponds to system memory*/ - - LDR R0,=0x00000004 - LDR R1, [R0] - LSRS R1, R1, #24 - LDR R2,=0x1F - CMP R1, R2 - BNE ApplicationStart - - /*SYSCFG clock enable*/ - LDR R0,=0x40021034 - LDR R1,=0x00000001 - STR R1, [R0] - -/*Set CFGR1 register with flash memory remap at address 0*/ - LDR R0,=0x40010000 - LDR R1,=0x00000000 - STR R1, [R0] - -ApplicationStart: -/* 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 the clock system intitialization function.*/ - bl SystemInit -/* 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_IRQHandler /* PVD through EXTI Line detection */ - .word RTC_IRQHandler /* RTC through the EXTI line */ - .word FLASH_IRQHandler /* FLASH */ - .word RCC_IRQHandler /* RCC */ - .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 0 /* Reserved */ - .word DMA1_Channel1_IRQHandler /* DMA1 Channel 1 */ - .word DMA1_Channel2_3_IRQHandler /* DMA1 Channel 2 and Channel 3 */ - .word DMA1_Channel4_5_IRQHandler /* DMA1 Channel 4 and Channel 5 */ - .word ADC1_COMP_IRQHandler /* ADC1, COMP1 and COMP2 */ - .word LPTIM1_IRQHandler /* LPTIM1 */ - .word 0 /* Reserved */ - .word TIM2_IRQHandler /* TIM2 */ - .word 0 /* Reserved */ - .word 0 /* Reserved */ - .word 0 /* Reserved */ - .word 0 /* Reserved */ - .word TIM21_IRQHandler /* TIM21 */ - .word 0 /* Reserved */ - .word 0 /* Reserved */ - .word I2C1_IRQHandler /* I2C1 */ - .word 0 /* Reserved */ - .word SPI1_IRQHandler /* SPI1 */ - .word 0 /* Reserved */ - .word 0 /* Reserved */ - .word USART2_IRQHandler /* USART2 */ - .word LPUART1_IRQHandler /* LPUART1 */ - .word 0 /* Reserved */ - .word 0 /* Reserved */ - -/******************************************************************************* -* -* 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_IRQHandler - .thumb_set PVD_IRQHandler,Default_Handler - - .weak RTC_IRQHandler - .thumb_set RTC_IRQHandler,Default_Handler - - .weak FLASH_IRQHandler - .thumb_set FLASH_IRQHandler,Default_Handler - - .weak RCC_IRQHandler - .thumb_set RCC_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 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_IRQHandler - .thumb_set DMA1_Channel4_5_IRQHandler,Default_Handler - - .weak ADC1_COMP_IRQHandler - .thumb_set ADC1_COMP_IRQHandler,Default_Handler - - .weak LPTIM1_IRQHandler - .thumb_set LPTIM1_IRQHandler,Default_Handler - - .weak TIM2_IRQHandler - .thumb_set TIM2_IRQHandler,Default_Handler - - .weak TIM21_IRQHandler - .thumb_set TIM21_IRQHandler,Default_Handler - - .weak I2C1_IRQHandler - .thumb_set I2C1_IRQHandler,Default_Handler - - .weak SPI1_IRQHandler - .thumb_set SPI1_IRQHandler,Default_Handler - - .weak USART2_IRQHandler - .thumb_set USART2_IRQHandler,Default_Handler - - .weak LPUART1_IRQHandler - .thumb_set LPUART1_IRQHandler,Default_Handler - - - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/fw_old/Debug/Core/Src/config.d b/fw_old/Debug/Core/Src/config.d deleted file mode 100644 index b31ca43..0000000 --- a/fw_old/Debug/Core/Src/config.d +++ /dev/null @@ -1,24 +0,0 @@ -Core/Src/config.o: ../Core/Src/config.c ../Core/Inc/config.h \ - ../Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h \ - ../Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l011xx.h \ - ../Drivers/CMSIS/Include/core_cm0plus.h \ - ../Drivers/CMSIS/Include/cmsis_version.h \ - ../Drivers/CMSIS/Include/cmsis_compiler.h \ - ../Drivers/CMSIS/Include/cmsis_gcc.h \ - ../Drivers/CMSIS/Device/ST/STM32L0xx/Include/system_stm32l0xx.h - -../Core/Inc/config.h: - -../Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h: - -../Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l011xx.h: - -../Drivers/CMSIS/Include/core_cm0plus.h: - -../Drivers/CMSIS/Include/cmsis_version.h: - -../Drivers/CMSIS/Include/cmsis_compiler.h: - -../Drivers/CMSIS/Include/cmsis_gcc.h: - -../Drivers/CMSIS/Device/ST/STM32L0xx/Include/system_stm32l0xx.h: diff --git a/fw_old/Debug/Core/Src/config.o b/fw_old/Debug/Core/Src/config.o deleted file mode 100644 index 08442519b9c8e5d785fec2d2ff0af10f03152f7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 292824 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∋Q7f7@D7% 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 diff --git a/fw_old/Debug/Core/Src/crc8.su b/fw_old/Debug/Core/Src/crc8.su deleted file mode 100644 index d2e1e30..0000000 --- a/fw_old/Debug/Core/Src/crc8.su +++ /dev/null @@ -1 +0,0 @@ -crc8.c:11:9:crc8_calculate 24 static diff --git a/fw_old/Debug/Core/Src/i2c.d b/fw_old/Debug/Core/Src/i2c.d deleted file mode 100644 index 82b3267..0000000 --- a/fw_old/Debug/Core/Src/i2c.d +++ /dev/null @@ -1,30 +0,0 @@ -Core/Src/i2c.o: ../Core/Src/i2c.c ../Core/Inc/i2c.h \ - ../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_i2c.h \ - ../Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h \ - ../Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l011xx.h \ - ../Drivers/CMSIS/Include/core_cm0plus.h \ - ../Drivers/CMSIS/Include/cmsis_version.h \ - ../Drivers/CMSIS/Include/cmsis_compiler.h \ - ../Drivers/CMSIS/Include/cmsis_gcc.h \ - ../Drivers/CMSIS/Device/ST/STM32L0xx/Include/system_stm32l0xx.h \ - ../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_lpuart.h - -../Core/Inc/i2c.h: - -../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_i2c.h: - -../Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h: - -../Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l011xx.h: - -../Drivers/CMSIS/Include/core_cm0plus.h: - -../Drivers/CMSIS/Include/cmsis_version.h: - -../Drivers/CMSIS/Include/cmsis_compiler.h: - -../Drivers/CMSIS/Include/cmsis_gcc.h: - -../Drivers/CMSIS/Device/ST/STM32L0xx/Include/system_stm32l0xx.h: - -../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_lpuart.h: diff --git a/fw_old/Debug/Core/Src/i2c.o b/fw_old/Debug/Core/Src/i2c.o deleted file mode 100644 index 13c53dd1ea0669bb3c0290c2dc3a039f38c81d10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 300824 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

H_@<2)VHw_&ya|n(H2y&1f4~zB4@PQ+@`_8t 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 cn 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 diff --git a/fw_old/Debug/Core/Src/i2c.su b/fw_old/Debug/Core/Src/i2c.su deleted file mode 100644 index f334535..0000000 --- a/fw_old/Debug/Core/Src/i2c.su +++ /dev/null @@ -1,11 +0,0 @@ -stm32l0xx_ll_i2c.h:1511:26:LL_I2C_IsActiveFlag_TXE 16 static -stm32l0xx_ll_i2c.h:1537:26:LL_I2C_IsActiveFlag_RXNE 16 static -stm32l0xx_ll_i2c.h:1563:26:LL_I2C_IsActiveFlag_NACK 16 static -stm32l0xx_ll_i2c.h:1576:26:LL_I2C_IsActiveFlag_STOP 16 static -stm32l0xx_ll_i2c.h:1733:22:LL_I2C_ClearFlag_STOP 16 static -stm32l0xx_ll_i2c.h:2090:22:LL_I2C_HandleTransfer 24 static -stm32l0xx_ll_i2c.h:2174:25:LL_I2C_ReceiveData8 16 static -stm32l0xx_ll_i2c.h:2186:22:LL_I2C_TransmitData8 16 static -i2c.c:13:5:i2c_init 16 static -i2c.c:22:5:i2c_transmit 40 static -i2c.c:55:5:i2c_receive 48 static diff --git a/fw_old/Debug/Core/Src/main.d b/fw_old/Debug/Core/Src/main.d deleted file mode 100644 index a63139f..0000000 --- a/fw_old/Debug/Core/Src/main.d +++ /dev/null @@ -1,80 +0,0 @@ -Core/Src/main.o: ../Core/Src/main.c ../Core/Inc/main.h \ - ../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_i2c.h \ - ../Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h \ - ../Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l011xx.h \ - ../Drivers/CMSIS/Include/core_cm0plus.h \ - ../Drivers/CMSIS/Include/cmsis_version.h \ - ../Drivers/CMSIS/Include/cmsis_compiler.h \ - ../Drivers/CMSIS/Include/cmsis_gcc.h \ - ../Drivers/CMSIS/Device/ST/STM32L0xx/Include/system_stm32l0xx.h \ - ../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_lpuart.h \ - ../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_rcc.h \ - ../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_crs.h \ - ../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_bus.h \ - ../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_system.h \ - ../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_exti.h \ - ../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_cortex.h \ - ../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_utils.h \ - ../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_pwr.h \ - ../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_dma.h \ - ../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_tim.h \ - ../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_gpio.h \ - ../Core/Inc/i2c.h ../Core/Inc/scd4x.h ../Core/Inc/crc8.h \ - ../Core/Inc/sht4x.h ../Core/Inc/sps30.h ../Core/Inc/modbus.h \ - ../Core/Inc/config.h - -../Core/Inc/main.h: - -../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_i2c.h: - -../Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h: - -../Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l011xx.h: - -../Drivers/CMSIS/Include/core_cm0plus.h: - -../Drivers/CMSIS/Include/cmsis_version.h: - -../Drivers/CMSIS/Include/cmsis_compiler.h: - -../Drivers/CMSIS/Include/cmsis_gcc.h: - -../Drivers/CMSIS/Device/ST/STM32L0xx/Include/system_stm32l0xx.h: - -../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_lpuart.h: - -../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_rcc.h: - -../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_crs.h: - -../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_bus.h: - -../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_system.h: - -../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_exti.h: - -../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_cortex.h: - -../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_utils.h: - -../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_pwr.h: - -../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_dma.h: - -../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_tim.h: - -../Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_ll_gpio.h: - -../Core/Inc/i2c.h: - -../Core/Inc/scd4x.h: - -../Core/Inc/crc8.h: - -../Core/Inc/sht4x.h: - -../Core/Inc/sps30.h: - -../Core/Inc/modbus.h: - -../Core/Inc/config.h: diff --git a/fw_old/Debug/Core/Src/main.o b/fw_old/Debug/Core/Src/main.o deleted file mode 100644 index 8366dd19a3b06ad3e49bb62399f441790164ba21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388516 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