diff --git a/.mxproject b/.mxproject index bd56161..68f28bb 100644 --- a/.mxproject +++ b/.mxproject @@ -1,43 +1,41 @@ [PreviousLibFiles] -LibFiles=Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_iwdg.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rtc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rtc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_spi.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h;Middlewares/Third_Party/FreeRTOS/Source/include/croutine.h;Middlewares/Third_Party/FreeRTOS/Source/include/deprecated_definitions.h;Middlewares/Third_Party/FreeRTOS/Source/include/event_groups.h;Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h;Middlewares/Third_Party/FreeRTOS/Source/include/list.h;Middlewares/Third_Party/FreeRTOS/Source/include/message_buffer.h;Middlewares/Third_Party/FreeRTOS/Source/include/mpu_prototypes.h;Middlewares/Third_Party/FreeRTOS/Source/include/mpu_wrappers.h;Middlewares/Third_Party/FreeRTOS/Source/include/portable.h;Middlewares/Third_Party/FreeRTOS/Source/include/projdefs.h;Middlewares/Third_Party/FreeRTOS/Source/include/queue.h;Middlewares/Third_Party/FreeRTOS/Source/include/semphr.h;Middlewares/Third_Party/FreeRTOS/Source/include/stack_macros.h;Middlewares/Third_Party/FreeRTOS/Source/include/StackMacros.h;Middlewares/Third_Party/FreeRTOS/Source/include/stream_buffer.h;Middlewares/Third_Party/FreeRTOS/Source/include/task.h;Middlewares/Third_Party/FreeRTOS/Source/include/timers.h;Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.h;Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h;Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3/portmacro.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_iwdg.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;Middlewares/Third_Party/FreeRTOS/Source/croutine.c;Middlewares/Third_Party/FreeRTOS/Source/event_groups.c;Middlewares/Third_Party/FreeRTOS/Source/list.c;Middlewares/Third_Party/FreeRTOS/Source/queue.c;Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c;Middlewares/Third_Party/FreeRTOS/Source/tasks.c;Middlewares/Third_Party/FreeRTOS/Source/timers.c;Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c;Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c;Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_iwdg.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rtc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rtc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_spi.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h;Middlewares/Third_Party/FreeRTOS/Source/include/croutine.h;Middlewares/Third_Party/FreeRTOS/Source/include/deprecated_definitions.h;Middlewares/Third_Party/FreeRTOS/Source/include/event_groups.h;Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h;Middlewares/Third_Party/FreeRTOS/Source/include/list.h;Middlewares/Third_Party/FreeRTOS/Source/include/message_buffer.h;Middlewares/Third_Party/FreeRTOS/Source/include/mpu_prototypes.h;Middlewares/Third_Party/FreeRTOS/Source/include/mpu_wrappers.h;Middlewares/Third_Party/FreeRTOS/Source/include/portable.h;Middlewares/Third_Party/FreeRTOS/Source/include/projdefs.h;Middlewares/Third_Party/FreeRTOS/Source/include/queue.h;Middlewares/Third_Party/FreeRTOS/Source/include/semphr.h;Middlewares/Third_Party/FreeRTOS/Source/include/stack_macros.h;Middlewares/Third_Party/FreeRTOS/Source/include/StackMacros.h;Middlewares/Third_Party/FreeRTOS/Source/include/stream_buffer.h;Middlewares/Third_Party/FreeRTOS/Source/include/task.h;Middlewares/Third_Party/FreeRTOS/Source/include/timers.h;Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.h;Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h;Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3/portmacro.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;Drivers/CMSIS/Include/core_cm23.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm1.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/core_cm33.h;Drivers/CMSIS/Include/cmsis_iccarm.h;Drivers/CMSIS/Include/cmsis_compiler.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_armv8mml.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/mpu_armv8.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/mpu_armv7.h;Drivers/CMSIS/Include/cmsis_armclang.h;Drivers/CMSIS/Include/tz_context.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/cmsis_version.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/core_armv8mbl.h; +LibFiles=Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_iwdg.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_spi.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h;Middlewares/Third_Party/FreeRTOS/Source/include/croutine.h;Middlewares/Third_Party/FreeRTOS/Source/include/deprecated_definitions.h;Middlewares/Third_Party/FreeRTOS/Source/include/event_groups.h;Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h;Middlewares/Third_Party/FreeRTOS/Source/include/list.h;Middlewares/Third_Party/FreeRTOS/Source/include/message_buffer.h;Middlewares/Third_Party/FreeRTOS/Source/include/mpu_prototypes.h;Middlewares/Third_Party/FreeRTOS/Source/include/mpu_wrappers.h;Middlewares/Third_Party/FreeRTOS/Source/include/portable.h;Middlewares/Third_Party/FreeRTOS/Source/include/projdefs.h;Middlewares/Third_Party/FreeRTOS/Source/include/queue.h;Middlewares/Third_Party/FreeRTOS/Source/include/semphr.h;Middlewares/Third_Party/FreeRTOS/Source/include/stack_macros.h;Middlewares/Third_Party/FreeRTOS/Source/include/StackMacros.h;Middlewares/Third_Party/FreeRTOS/Source/include/stream_buffer.h;Middlewares/Third_Party/FreeRTOS/Source/include/task.h;Middlewares/Third_Party/FreeRTOS/Source/include/timers.h;Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.h;Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h;Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3/portmacro.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_iwdg.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;Middlewares/Third_Party/FreeRTOS/Source/croutine.c;Middlewares/Third_Party/FreeRTOS/Source/event_groups.c;Middlewares/Third_Party/FreeRTOS/Source/list.c;Middlewares/Third_Party/FreeRTOS/Source/queue.c;Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c;Middlewares/Third_Party/FreeRTOS/Source/tasks.c;Middlewares/Third_Party/FreeRTOS/Source/timers.c;Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c;Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c;Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_iwdg.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_spi.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h;Middlewares/Third_Party/FreeRTOS/Source/include/croutine.h;Middlewares/Third_Party/FreeRTOS/Source/include/deprecated_definitions.h;Middlewares/Third_Party/FreeRTOS/Source/include/event_groups.h;Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h;Middlewares/Third_Party/FreeRTOS/Source/include/list.h;Middlewares/Third_Party/FreeRTOS/Source/include/message_buffer.h;Middlewares/Third_Party/FreeRTOS/Source/include/mpu_prototypes.h;Middlewares/Third_Party/FreeRTOS/Source/include/mpu_wrappers.h;Middlewares/Third_Party/FreeRTOS/Source/include/portable.h;Middlewares/Third_Party/FreeRTOS/Source/include/projdefs.h;Middlewares/Third_Party/FreeRTOS/Source/include/queue.h;Middlewares/Third_Party/FreeRTOS/Source/include/semphr.h;Middlewares/Third_Party/FreeRTOS/Source/include/stack_macros.h;Middlewares/Third_Party/FreeRTOS/Source/include/StackMacros.h;Middlewares/Third_Party/FreeRTOS/Source/include/stream_buffer.h;Middlewares/Third_Party/FreeRTOS/Source/include/task.h;Middlewares/Third_Party/FreeRTOS/Source/include/timers.h;Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.h;Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h;Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3/portmacro.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;Drivers/CMSIS/Include/core_cm23.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm1.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/core_cm33.h;Drivers/CMSIS/Include/cmsis_iccarm.h;Drivers/CMSIS/Include/cmsis_compiler.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_armv8mml.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/mpu_armv8.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/mpu_armv7.h;Drivers/CMSIS/Include/cmsis_armclang.h;Drivers/CMSIS/Include/tz_context.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/cmsis_version.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/core_armv8mbl.h; [PreviousUsedMakefileFiles] -SourceFiles=Core/Src/main.c;Core/Src/gpio.c;Core/Src/freertos.c;Core/Src/adc.c;Core/Src/dma.c;Core/Src/iwdg.c;Core/Src/rtc.c;Core/Src/spi.c;Core/Src/tim.c;Core/Src/usart.c;Core/Src/stm32f1xx_it.c;Core/Src/stm32f1xx_hal_msp.c;Core/Src/stm32f1xx_hal_timebase_tim.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_iwdg.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;Middlewares/Third_Party/FreeRTOS/Source/croutine.c;Middlewares/Third_Party/FreeRTOS/Source/event_groups.c;Middlewares/Third_Party/FreeRTOS/Source/list.c;Middlewares/Third_Party/FreeRTOS/Source/queue.c;Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c;Middlewares/Third_Party/FreeRTOS/Source/tasks.c;Middlewares/Third_Party/FreeRTOS/Source/timers.c;Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c;Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c;Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c;Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;Core/Src/system_stm32f1xx.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_iwdg.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;Middlewares/Third_Party/FreeRTOS/Source/croutine.c;Middlewares/Third_Party/FreeRTOS/Source/event_groups.c;Middlewares/Third_Party/FreeRTOS/Source/list.c;Middlewares/Third_Party/FreeRTOS/Source/queue.c;Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c;Middlewares/Third_Party/FreeRTOS/Source/tasks.c;Middlewares/Third_Party/FreeRTOS/Source/timers.c;Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c;Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c;Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c;Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;Core/Src/system_stm32f1xx.c;;;Middlewares/Third_Party/FreeRTOS/Source/croutine.c;Middlewares/Third_Party/FreeRTOS/Source/event_groups.c;Middlewares/Third_Party/FreeRTOS/Source/list.c;Middlewares/Third_Party/FreeRTOS/Source/queue.c;Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c;Middlewares/Third_Party/FreeRTOS/Source/tasks.c;Middlewares/Third_Party/FreeRTOS/Source/timers.c;Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c;Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c;Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c; +SourceFiles=Core/Src/main.c;Core/Src/gpio.c;Core/Src/freertos.c;Core/Src/adc.c;Core/Src/dma.c;Core/Src/iwdg.c;Core/Src/spi.c;Core/Src/tim.c;Core/Src/usart.c;Core/Src/stm32f1xx_it.c;Core/Src/stm32f1xx_hal_msp.c;Core/Src/stm32f1xx_hal_timebase_tim.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_iwdg.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;Middlewares/Third_Party/FreeRTOS/Source/croutine.c;Middlewares/Third_Party/FreeRTOS/Source/event_groups.c;Middlewares/Third_Party/FreeRTOS/Source/list.c;Middlewares/Third_Party/FreeRTOS/Source/queue.c;Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c;Middlewares/Third_Party/FreeRTOS/Source/tasks.c;Middlewares/Third_Party/FreeRTOS/Source/timers.c;Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c;Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c;Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c;Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;Core/Src/system_stm32f1xx.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_iwdg.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;Middlewares/Third_Party/FreeRTOS/Source/croutine.c;Middlewares/Third_Party/FreeRTOS/Source/event_groups.c;Middlewares/Third_Party/FreeRTOS/Source/list.c;Middlewares/Third_Party/FreeRTOS/Source/queue.c;Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c;Middlewares/Third_Party/FreeRTOS/Source/tasks.c;Middlewares/Third_Party/FreeRTOS/Source/timers.c;Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c;Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c;Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c;Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;Core/Src/system_stm32f1xx.c;;;Middlewares/Third_Party/FreeRTOS/Source/croutine.c;Middlewares/Third_Party/FreeRTOS/Source/event_groups.c;Middlewares/Third_Party/FreeRTOS/Source/list.c;Middlewares/Third_Party/FreeRTOS/Source/queue.c;Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c;Middlewares/Third_Party/FreeRTOS/Source/tasks.c;Middlewares/Third_Party/FreeRTOS/Source/timers.c;Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c;Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c;Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c; HeaderPath=Drivers/STM32F1xx_HAL_Driver/Inc;Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;Middlewares/Third_Party/FreeRTOS/Source/include;Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2;Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3;Drivers/CMSIS/Device/ST/STM32F1xx/Include;Drivers/CMSIS/Include;Core/Inc; CDefines=USE_HAL_DRIVER;STM32F103xB;USE_HAL_DRIVER;USE_HAL_DRIVER; [PreviousGenFiles] AdvancedFolderStructure=true -HeaderFileListSize=12 +HeaderFileListSize=11 HeaderFiles#0=/home/ondra/STM32Cube/BluepillTrouba/Core/Inc/gpio.h HeaderFiles#1=/home/ondra/STM32Cube/BluepillTrouba/Core/Inc/FreeRTOSConfig.h HeaderFiles#2=/home/ondra/STM32Cube/BluepillTrouba/Core/Inc/adc.h HeaderFiles#3=/home/ondra/STM32Cube/BluepillTrouba/Core/Inc/dma.h HeaderFiles#4=/home/ondra/STM32Cube/BluepillTrouba/Core/Inc/iwdg.h -HeaderFiles#5=/home/ondra/STM32Cube/BluepillTrouba/Core/Inc/rtc.h -HeaderFiles#6=/home/ondra/STM32Cube/BluepillTrouba/Core/Inc/spi.h -HeaderFiles#7=/home/ondra/STM32Cube/BluepillTrouba/Core/Inc/tim.h -HeaderFiles#8=/home/ondra/STM32Cube/BluepillTrouba/Core/Inc/usart.h -HeaderFiles#9=/home/ondra/STM32Cube/BluepillTrouba/Core/Inc/stm32f1xx_it.h -HeaderFiles#10=/home/ondra/STM32Cube/BluepillTrouba/Core/Inc/stm32f1xx_hal_conf.h -HeaderFiles#11=/home/ondra/STM32Cube/BluepillTrouba/Core/Inc/main.h +HeaderFiles#5=/home/ondra/STM32Cube/BluepillTrouba/Core/Inc/spi.h +HeaderFiles#6=/home/ondra/STM32Cube/BluepillTrouba/Core/Inc/tim.h +HeaderFiles#7=/home/ondra/STM32Cube/BluepillTrouba/Core/Inc/usart.h +HeaderFiles#8=/home/ondra/STM32Cube/BluepillTrouba/Core/Inc/stm32f1xx_it.h +HeaderFiles#9=/home/ondra/STM32Cube/BluepillTrouba/Core/Inc/stm32f1xx_hal_conf.h +HeaderFiles#10=/home/ondra/STM32Cube/BluepillTrouba/Core/Inc/main.h HeaderFolderListSize=1 HeaderPath#0=/home/ondra/STM32Cube/BluepillTrouba/Core/Inc HeaderFiles=; -SourceFileListSize=13 +SourceFileListSize=12 SourceFiles#0=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/gpio.c SourceFiles#1=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/freertos.c SourceFiles#2=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/adc.c SourceFiles#3=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/dma.c SourceFiles#4=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/iwdg.c -SourceFiles#5=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/rtc.c -SourceFiles#6=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/spi.c -SourceFiles#7=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/tim.c -SourceFiles#8=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/usart.c -SourceFiles#9=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/stm32f1xx_it.c -SourceFiles#10=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/stm32f1xx_hal_msp.c -SourceFiles#11=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/stm32f1xx_hal_timebase_tim.c -SourceFiles#12=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/main.c +SourceFiles#5=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/spi.c +SourceFiles#6=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/tim.c +SourceFiles#7=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/usart.c +SourceFiles#8=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/stm32f1xx_it.c +SourceFiles#9=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/stm32f1xx_hal_msp.c +SourceFiles#10=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/stm32f1xx_hal_timebase_tim.c +SourceFiles#11=/home/ondra/STM32Cube/BluepillTrouba/Core/Src/main.c SourceFolderListSize=1 SourcePath#0=/home/ondra/STM32Cube/BluepillTrouba/Core/Src SourceFiles=; diff --git a/BluepillTrouba.ioc b/BluepillTrouba.ioc index b79f4f3..2280727 100644 --- a/BluepillTrouba.ioc +++ b/BluepillTrouba.ioc @@ -42,51 +42,46 @@ Mcu.CPN=STM32F103CBT6 Mcu.Family=STM32F1 Mcu.IP0=ADC1 Mcu.IP1=DMA -Mcu.IP10=TIM3 -Mcu.IP11=TIM4 -Mcu.IP12=USART1 +Mcu.IP10=TIM4 +Mcu.IP11=USART1 Mcu.IP2=FREERTOS Mcu.IP3=IWDG Mcu.IP4=NVIC Mcu.IP5=RCC -Mcu.IP6=RTC -Mcu.IP7=SPI1 -Mcu.IP8=SYS -Mcu.IP9=TIM2 -Mcu.IPNb=13 +Mcu.IP6=SPI1 +Mcu.IP7=SYS +Mcu.IP8=TIM2 +Mcu.IP9=TIM3 +Mcu.IPNb=12 Mcu.Name=STM32F103C(8-B)Tx Mcu.Package=LQFP48 Mcu.Pin0=PC13-TAMPER-RTC -Mcu.Pin1=PC14-OSC32_IN -Mcu.Pin10=PB0 -Mcu.Pin11=PB1 -Mcu.Pin12=PB10 -Mcu.Pin13=PA9 -Mcu.Pin14=PA10 -Mcu.Pin15=PA13 -Mcu.Pin16=PA14 -Mcu.Pin17=PA15 -Mcu.Pin18=PB6 -Mcu.Pin19=PB7 -Mcu.Pin2=PC15-OSC32_OUT -Mcu.Pin20=PB8 -Mcu.Pin21=VP_ADC1_TempSens_Input -Mcu.Pin22=VP_ADC1_Vref_Input -Mcu.Pin23=VP_FREERTOS_VS_CMSIS_V2 -Mcu.Pin24=VP_IWDG_VS_IWDG -Mcu.Pin25=VP_RTC_VS_RTC_Activate -Mcu.Pin26=VP_RTC_No_RTC_Output -Mcu.Pin27=VP_SYS_VS_tim1 -Mcu.Pin28=VP_TIM2_VS_ClockSourceINT -Mcu.Pin29=VP_TIM3_VS_ClockSourceINT -Mcu.Pin3=PD0-OSC_IN -Mcu.Pin4=PD1-OSC_OUT -Mcu.Pin5=PA0-WKUP -Mcu.Pin6=PA1 -Mcu.Pin7=PA5 -Mcu.Pin8=PA6 -Mcu.Pin9=PA7 -Mcu.PinsNb=30 +Mcu.Pin1=PD0-OSC_IN +Mcu.Pin10=PB10 +Mcu.Pin11=PA9 +Mcu.Pin12=PA10 +Mcu.Pin13=PA13 +Mcu.Pin14=PA14 +Mcu.Pin15=PA15 +Mcu.Pin16=PB6 +Mcu.Pin17=PB7 +Mcu.Pin18=PB8 +Mcu.Pin19=VP_ADC1_TempSens_Input +Mcu.Pin2=PD1-OSC_OUT +Mcu.Pin20=VP_ADC1_Vref_Input +Mcu.Pin21=VP_FREERTOS_VS_CMSIS_V2 +Mcu.Pin22=VP_IWDG_VS_IWDG +Mcu.Pin23=VP_SYS_VS_tim1 +Mcu.Pin24=VP_TIM2_VS_ClockSourceINT +Mcu.Pin25=VP_TIM3_VS_ClockSourceINT +Mcu.Pin3=PA0-WKUP +Mcu.Pin4=PA1 +Mcu.Pin5=PA5 +Mcu.Pin6=PA6 +Mcu.Pin7=PA7 +Mcu.Pin8=PB0 +Mcu.Pin9=PB1 +Mcu.PinsNb=26 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F103CBTx @@ -134,8 +129,9 @@ PA5.GPIOParameters=GPIO_Label PA5.GPIO_Label=OLED_SCLK PA5.Mode=TX_Only_Simplex_Unidirect_Master PA5.Signal=SPI1_SCK -PA6.GPIOParameters=GPIO_Label +PA6.GPIOParameters=GPIO_Speed,GPIO_Label PA6.GPIO_Label=HEATER +PA6.GPIO_Speed=GPIO_SPEED_FREQ_HIGH PA6.Signal=S_TIM3_CH1 PA7.GPIOParameters=GPIO_Label PA7.GPIO_Label=OLED_MOSI @@ -171,10 +167,6 @@ PC13-TAMPER-RTC.GPIOParameters=GPIO_Label PC13-TAMPER-RTC.GPIO_Label=LED PC13-TAMPER-RTC.Locked=true PC13-TAMPER-RTC.Signal=GPIO_Output -PC14-OSC32_IN.Mode=LSE-External-Oscillator -PC14-OSC32_IN.Signal=RCC_OSC32_IN -PC15-OSC32_OUT.Mode=LSE-External-Oscillator -PC15-OSC32_OUT.Signal=RCC_OSC32_OUT PD0-OSC_IN.Mode=HSE-External-Oscillator PD0-OSC_IN.Signal=RCC_OSC_IN PD1-OSC_OUT.Mode=HSE-External-Oscillator @@ -207,7 +199,7 @@ ProjectManager.StackSize=0x400 ProjectManager.TargetToolchain=Makefile ProjectManager.ToolChainLocation= ProjectManager.UnderRoot=false -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_IWDG_Init-IWDG-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_ADC1_Init-ADC1-false-HAL-true,6-MX_SPI1_Init-SPI1-false-HAL-true,7-MX_DMA_Init-DMA-false-HAL-true,8-MX_TIM4_Init-TIM4-false-HAL-true,9-MX_TIM2_Init-TIM2-false-HAL-true,10-MX_RTC_Init-RTC-false-HAL-true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_IWDG_Init-IWDG-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_ADC1_Init-ADC1-false-HAL-true,6-MX_SPI1_Init-SPI1-false-HAL-true,7-MX_DMA_Init-DMA-false-HAL-true,8-MX_TIM4_Init-TIM4-false-HAL-true,9-MX_TIM2_Init-TIM2-false-HAL-true,10-MX_TIM3_Init-TIM3-false-HAL-true RCC.ADCFreqValue=2250000 RCC.ADCPresc=RCC_ADCPCLK2_DIV8 RCC.AHBFreq_Value=72000000 @@ -255,9 +247,10 @@ TIM2.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 TIM2.IPParameters=Channel-PWM Generation1 CH1,Prescaler TIM2.Prescaler=2 TIM3.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 -TIM3.IPParameters=Channel-PWM Generation1 CH1,Prescaler,Pulse-PWM Generation1 CH1 +TIM3.IPParameters=Channel-PWM Generation1 CH1,Prescaler,Pulse-PWM Generation1 CH1,Period +TIM3.Period=65535 TIM3.Prescaler=2 -TIM3.Pulse-PWM\ Generation1\ CH1=32768 +TIM3.Pulse-PWM\ Generation1\ CH1=0 TIM4.IC2Filter=15 TIM4.IPParameters=IC2Filter,Prescaler TIM4.Prescaler=0 @@ -272,10 +265,6 @@ VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2 VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2 VP_IWDG_VS_IWDG.Mode=IWDG_Activate VP_IWDG_VS_IWDG.Signal=IWDG_VS_IWDG -VP_RTC_No_RTC_Output.Mode=RTC_OUT_NO -VP_RTC_No_RTC_Output.Signal=RTC_No_RTC_Output -VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled -VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate VP_SYS_VS_tim1.Mode=TIM1 VP_SYS_VS_tim1.Signal=SYS_VS_tim1 VP_TIM2_VS_ClockSourceINT.Mode=Internal diff --git a/Core/Inc/rtc.h b/Core/Inc/rtc.h deleted file mode 100644 index f56d512..0000000 --- a/Core/Inc/rtc.h +++ /dev/null @@ -1,52 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file rtc.h - * @brief This file contains all the function prototypes for - * the rtc.c file - ****************************************************************************** - * @attention - * - * Copyright (c) 2023 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __RTC_H__ -#define __RTC_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "main.h" - -/* USER CODE BEGIN Includes */ - -/* USER CODE END Includes */ - -extern RTC_HandleTypeDef hrtc; - -/* USER CODE BEGIN Private defines */ - -/* USER CODE END Private defines */ - -void MX_RTC_Init(void); - -/* USER CODE BEGIN Prototypes */ - -/* USER CODE END Prototypes */ - -#ifdef __cplusplus -} -#endif - -#endif /* __RTC_H__ */ - diff --git a/Core/Inc/stm32f1xx_hal_conf.h b/Core/Inc/stm32f1xx_hal_conf.h index 8ab49f0..c30aa21 100644 --- a/Core/Inc/stm32f1xx_hal_conf.h +++ b/Core/Inc/stm32f1xx_hal_conf.h @@ -57,7 +57,7 @@ /*#define HAL_HCD_MODULE_ENABLED */ /*#define HAL_PWR_MODULE_ENABLED */ /*#define HAL_RCC_MODULE_ENABLED */ -#define HAL_RTC_MODULE_ENABLED +/*#define HAL_RTC_MODULE_ENABLED */ /*#define HAL_SD_MODULE_ENABLED */ /*#define HAL_MMC_MODULE_ENABLED */ /*#define HAL_SDRAM_MODULE_ENABLED */ diff --git a/Core/Src/app.c b/Core/Src/app.c index 725d2f3..512df9c 100644 --- a/Core/Src/app.c +++ b/Core/Src/app.c @@ -3,7 +3,6 @@ */ #include -#include #include "FreeRTOS.h" #include "task.h" @@ -12,218 +11,27 @@ #include "ufb/framebuffer.h" #include "iwdg.h" -#include "tim.h" -#include "adc.h" #include "oled.h" #include "ufb/fb_text.h" - -/* DMA dest */ -static volatile uint16_t adc_values[4]; - -const float V_REFINT = 1.23f; - -#define AVERAGEBUF_DEPTH 16 -#define OVENTEMP_HISTORY_DEPTH 10 +#include "app_analog.h" +#include "app_knob.h" +#include "app_buzzer.h" +#include "app_heater.h" static struct App { - bool heating; + float oven_temp; int16_t set_temp; int16_t wheel_normed; - float oven_temp; - float soc_temp; - float v_sensor; uint16_t wheel; - bool push; - uint16_t adc_averagebuf[AVERAGEBUF_DEPTH * 4]; - uint8_t averagebuf_ptr; - float adc_averages[4]; - float oventemp_history[OVENTEMP_HISTORY_DEPTH]; - uint8_t oventemp_history_ptr; + bool heating; } s_app = {}; -#define TSENSE_LOOKUP_LEN 101 -#define TSENSE_T_STEP 5.0f -#define TSENSE_T_MIN 0.0f -#define TSENSE_T_MAX 500.0f -static const float TSENSE_LOOKUP[TSENSE_LOOKUP_LEN] = { - 0.092678405931418f, - 0.0943174479327356f, - 0.095948157844312f, - 0.0975706768542549f, - 0.0991848957506647f, - 0.100791037522732f, - 0.102388993070241f, - 0.103978983136042f, - 0.105560980458654f, - 0.107135039851509f, - 0.108701215616829f, - 0.110259642413441f, - 0.111810211533421f, - 0.113353137226489f, - 0.114888310929339f, - 0.11641594480226f, - 0.117936009906507f, - 0.119448557132363f, - 0.120953636903929f, - 0.122451377845456f, - 0.12394167187544f, - 0.125424725109556f, - 0.126900429638119f, - 0.128368989630084f, - 0.129830374697352f, - 0.131284632150064f, - 0.132731808872517f, - 0.134172027901771f, - 0.135605181883591f, - 0.13703146935069f, - 0.138450783142958f, - 0.139863319976468f, - 0.14126904821384f, - 0.142668011892657f, - 0.144060254660872f, - 0.145445894373796f, - 0.146824824486877f, - 0.14819723645253f, - 0.149563023938454f, - 0.150922376699229f, - 0.15227526202401f, - 0.153621720954182f, - 0.15496179417407f, - 0.156295594725426f, - 0.157623016940038f, - 0.158944245649448f, - 0.160259175412251f, - 0.16156798947087f, - 0.162870654195634f, - 0.164167207880495f, - 0.165457688491696f, - 0.166742204592451f, - 0.168020651444079f, - 0.169293207677971f, - 0.170559768793747f, - 0.171820511933356f, - 0.173075402684405f, - 0.174324476817747f, - 0.175567769803026f, - 0.176805386030345f, - 0.178037221732226f, - 0.179263449725904f, - 0.180483966491086f, - 0.181698943447122f, - 0.182908345518766f, - 0.184112206156428f, - 0.185310558533273f, - 0.186503503145257f, - 0.187690937227925f, - 0.188873028139146f, - 0.190049673368296f, - 0.191221038959601f, - 0.192387089280576f, - 0.193547855644572f, - 0.194703369109397f, - 0.195853726532112f, - 0.196998826174689f, - 0.19813883026229f, - 0.199273637315452f, - 0.200403408323351f, - 0.201528107189346f, - 0.20264776325594f, - 0.203762405629782f, - 0.204872127762998f, - 0.205976828960191f, - 0.207076666615101f, - 0.208171540293999f, - 0.209261606226334f, - 0.210346827933364f, - 0.211427232937629f, - 0.212502848543705f, - 0.213573765013592f, - 0.214639882704581f, - 0.215701354457324f, - 0.216758080892489f, - 0.217810213752734f, - 0.218857716249547f, - 0.219900614222686f, - 0.220938933310224f, - 0.221972760781578f, - 0.223001998051553f, -}; - -static float val_to_c(float val) -{ - // TODO use binary search.. lol - for (int i = 1; i < TSENSE_LOOKUP_LEN; i++) { - float cur = TSENSE_LOOKUP[i]; - if (cur >= val) { - float prev = TSENSE_LOOKUP[i - 1]; - - float ratio = (val - prev) / (cur - prev); - return TSENSE_T_MIN + ((float) i + ratio) * TSENSE_T_STEP; - } - } - return TSENSE_T_MAX; -} - -void calculate_analog_values() -{ - uint32_t sums[4] = {}; - for (int i = 0; i < AVERAGEBUF_DEPTH * 4; i += 4) { - sums[0] += s_app.adc_averagebuf[i]; - sums[1] += s_app.adc_averagebuf[i + 1]; - sums[2] += s_app.adc_averagebuf[i + 2]; - sums[3] += s_app.adc_averagebuf[i + 3]; - } - s_app.adc_averages[0] = (float) sums[0] / AVERAGEBUF_DEPTH; - s_app.adc_averages[1] = (float) sums[1] / AVERAGEBUF_DEPTH; - s_app.adc_averages[2] = (float) sums[2] / AVERAGEBUF_DEPTH; - s_app.adc_averages[3] = (float) sums[3] / AVERAGEBUF_DEPTH; - - /* r_pt100, r_ref, internal_temp, v_ref_int */ - float refint = s_app.adc_averages[3]; - float scale = V_REFINT / refint; - - const float avg_slope = 4.3f * scale; - const float v25 = 1.43f; - const float v_tsen = s_app.adc_averages[2] * scale; - - s_app.soc_temp = (v25 - v_tsen) / avg_slope + 25.f; - s_app.v_sensor = s_app.adc_averages[0] * scale; // good for debug/tuning - - - // using a voltage divider, so assuming the reference resistor is measured well, - // we can just use the ratio and the exact voltage value is not important. - float actual_temp = val_to_c(s_app.adc_averages[0] / s_app.adc_averages[1]); - - s_app.oventemp_history[s_app.oventemp_history_ptr] = actual_temp; - s_app.oventemp_history_ptr = (s_app.oventemp_history_ptr + 1) % OVENTEMP_HISTORY_DEPTH; - - float sum = 0; - for (int i = 0; i < OVENTEMP_HISTORY_DEPTH; i++) { - sum += s_app.oventemp_history[i]; - } - sum /= OVENTEMP_HISTORY_DEPTH; - s_app.oven_temp = sum; -} - -void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) -{ - // notify - memcpy((void *) &s_app.adc_averagebuf[s_app.averagebuf_ptr * 4], (const void *) adc_values, 8); - s_app.averagebuf_ptr = (s_app.averagebuf_ptr + 1) % AVERAGEBUF_DEPTH; -} - static void hw_init() { - HAL_ADCEx_Calibration_Start(&hadc1); - - /* Start periodic reading of the ADC channels */ - HAL_ADC_Start_DMA(&hadc1, (uint32_t *) (void *) adc_values, 4); - - /* Enable the rotary encoder */ - HAL_TIM_Encoder_Start(&htim4, TIM_CHANNEL_ALL); - - /* Enable buzzer PWM */ - HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); + app_analog_init(); + app_buzzer_init(); + app_heater_init(); + app_knob_init(); /* Prepare the framebuffer and OLED interface */ oled_init(); @@ -236,22 +44,13 @@ void app_main_task(void *argument) /* Infinite loop */ for (;;) { - //HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - -// printf("Knob %d (P=%d), ADC %.2f %.2f %.2f %.2f, oven %.2f°C, soc %.2f°C, divider %.3f V \r\n", -// (int) s_app.wheel, s_app.push, -// s_app.adc_averages[0], s_app.adc_averages[1], s_app.adc_averages[2], s_app.adc_averages[3], -// -// s_app.oven_temp, -// s_app.soc_temp, -// s_app.v_sensor -// ); + HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - calculate_analog_values(); + s_app.oven_temp = app_analog_get_temp(); for (int i = 0; i < 50; i++) { uint16_t old_wheel = s_app.wheel; - s_app.wheel = htim4.Instance->CNT; + s_app.wheel = app_knob_get_raw(); int16_t wheel_change = (int16_t)(s_app.wheel - old_wheel); @@ -264,10 +63,16 @@ void app_main_task(void *argument) s_app.wheel_normed = 500; } + int16_t old_temp = s_app.set_temp; + s_app.set_temp = (s_app.wheel_normed / 2) * 5; + + if (old_temp != s_app.set_temp) { + app_buzzer_beep(); + } } - s_app.push = 0 == HAL_GPIO_ReadPin(KNOB_PUSH_GPIO_Port, KNOB_PUSH_Pin); + //s_app.push = 0 == HAL_GPIO_ReadPin(KNOB_PUSH_GPIO_Port, KNOB_PUSH_Pin); if (wheel_change != 0 || i == 0) { fb_clear(); @@ -301,15 +106,7 @@ void app_main_task(void *argument) s_app.heating = false; } - HAL_GPIO_WritePin(HEATER_GPIO_Port, HEATER_Pin, s_app.heating); - - /* - // beep - htim2.Instance->ARR = 12000 + (int16_t)s_app.wheel * 100; - htim2.Instance->CCR1 = htim2.Instance->ARR/2; - vTaskDelay(50); - htim2.Instance->ARR = 0; - */ + app_heater_set(s_app.heating); // feed dogs HAL_IWDG_Refresh(&hiwdg); diff --git a/Core/Src/app_analog.c b/Core/Src/app_analog.c new file mode 100644 index 0000000..f8a9551 --- /dev/null +++ b/Core/Src/app_analog.c @@ -0,0 +1,210 @@ +/** + * TODO file description + */ + +#include "main.h" +#include +#include +#include +#include "app_analog.h" +#include "adc.h" + +/* DMA dest */ +static volatile uint16_t adc_values[4]; + +const float V_REFINT = 1.23f; + +#define AVERAGEBUF_DEPTH 16 +#define OVENTEMP_HISTORY_DEPTH 10 + +static struct App { + float oven_temp; + float soc_temp; + float v_sensor; + uint16_t adc_averagebuf[AVERAGEBUF_DEPTH * 4]; + uint8_t averagebuf_ptr; + float adc_averages[4]; + float oventemp_history[OVENTEMP_HISTORY_DEPTH]; + uint8_t oventemp_history_ptr; +} s_analog = {}; + +#define TSENSE_LOOKUP_LEN 101 +#define TSENSE_T_STEP 5.0f +#define TSENSE_T_MIN 0.0f +#define TSENSE_T_MAX 500.0f +static const float TSENSE_LOOKUP[TSENSE_LOOKUP_LEN] = { + 0.092678405931418f, + 0.0943174479327356f, + 0.095948157844312f, + 0.0975706768542549f, + 0.0991848957506647f, + 0.100791037522732f, + 0.102388993070241f, + 0.103978983136042f, + 0.105560980458654f, + 0.107135039851509f, + 0.108701215616829f, + 0.110259642413441f, + 0.111810211533421f, + 0.113353137226489f, + 0.114888310929339f, + 0.11641594480226f, + 0.117936009906507f, + 0.119448557132363f, + 0.120953636903929f, + 0.122451377845456f, + 0.12394167187544f, + 0.125424725109556f, + 0.126900429638119f, + 0.128368989630084f, + 0.129830374697352f, + 0.131284632150064f, + 0.132731808872517f, + 0.134172027901771f, + 0.135605181883591f, + 0.13703146935069f, + 0.138450783142958f, + 0.139863319976468f, + 0.14126904821384f, + 0.142668011892657f, + 0.144060254660872f, + 0.145445894373796f, + 0.146824824486877f, + 0.14819723645253f, + 0.149563023938454f, + 0.150922376699229f, + 0.15227526202401f, + 0.153621720954182f, + 0.15496179417407f, + 0.156295594725426f, + 0.157623016940038f, + 0.158944245649448f, + 0.160259175412251f, + 0.16156798947087f, + 0.162870654195634f, + 0.164167207880495f, + 0.165457688491696f, + 0.166742204592451f, + 0.168020651444079f, + 0.169293207677971f, + 0.170559768793747f, + 0.171820511933356f, + 0.173075402684405f, + 0.174324476817747f, + 0.175567769803026f, + 0.176805386030345f, + 0.178037221732226f, + 0.179263449725904f, + 0.180483966491086f, + 0.181698943447122f, + 0.182908345518766f, + 0.184112206156428f, + 0.185310558533273f, + 0.186503503145257f, + 0.187690937227925f, + 0.188873028139146f, + 0.190049673368296f, + 0.191221038959601f, + 0.192387089280576f, + 0.193547855644572f, + 0.194703369109397f, + 0.195853726532112f, + 0.196998826174689f, + 0.19813883026229f, + 0.199273637315452f, + 0.200403408323351f, + 0.201528107189346f, + 0.20264776325594f, + 0.203762405629782f, + 0.204872127762998f, + 0.205976828960191f, + 0.207076666615101f, + 0.208171540293999f, + 0.209261606226334f, + 0.210346827933364f, + 0.211427232937629f, + 0.212502848543705f, + 0.213573765013592f, + 0.214639882704581f, + 0.215701354457324f, + 0.216758080892489f, + 0.217810213752734f, + 0.218857716249547f, + 0.219900614222686f, + 0.220938933310224f, + 0.221972760781578f, + 0.223001998051553f, +}; + +void app_analog_init() +{ + HAL_ADCEx_Calibration_Start(&hadc1); + + /* Start periodic reading of the ADC channels */ + HAL_ADC_Start_DMA(&hadc1, (uint32_t *) (void *) adc_values, 4); +} + +static float val_to_c(float val) +{ + // TODO use binary search.. lol + for (int i = 1; i < TSENSE_LOOKUP_LEN; i++) { + float cur = TSENSE_LOOKUP[i]; + if (cur >= val) { + float prev = TSENSE_LOOKUP[i - 1]; + + float ratio = (val - prev) / (cur - prev); + return TSENSE_T_MIN + ((float) i + ratio) * TSENSE_T_STEP; + } + } + return TSENSE_T_MAX; +} + +float app_analog_get_temp() +{ + uint32_t sums[4] = {}; + for (int i = 0; i < AVERAGEBUF_DEPTH * 4; i += 4) { + sums[0] += s_analog.adc_averagebuf[i]; + sums[1] += s_analog.adc_averagebuf[i + 1]; + sums[2] += s_analog.adc_averagebuf[i + 2]; + sums[3] += s_analog.adc_averagebuf[i + 3]; + } + s_analog.adc_averages[0] = (float) sums[0] / AVERAGEBUF_DEPTH; + s_analog.adc_averages[1] = (float) sums[1] / AVERAGEBUF_DEPTH; + s_analog.adc_averages[2] = (float) sums[2] / AVERAGEBUF_DEPTH; + s_analog.adc_averages[3] = (float) sums[3] / AVERAGEBUF_DEPTH; + + /* r_pt100, r_ref, internal_temp, v_ref_int */ + float refint = s_analog.adc_averages[3]; + float scale = V_REFINT / refint; + + const float avg_slope = 4.3f * scale; + const float v25 = 1.43f; + const float v_tsen = s_analog.adc_averages[2] * scale; + + s_analog.soc_temp = (v25 - v_tsen) / avg_slope + 25.f; + s_analog.v_sensor = s_analog.adc_averages[0] * scale; // good for debug/tuning + + + // using a voltage divider, so assuming the reference resistor is measured well, + // we can just use the ratio and the exact voltage value is not important. + float actual_temp = val_to_c(s_analog.adc_averages[0] / s_analog.adc_averages[1]); + + s_analog.oventemp_history[s_analog.oventemp_history_ptr] = actual_temp; + s_analog.oventemp_history_ptr = (s_analog.oventemp_history_ptr + 1) % OVENTEMP_HISTORY_DEPTH; + + float sum = 0; + for (int i = 0; i < OVENTEMP_HISTORY_DEPTH; i++) { + sum += s_analog.oventemp_history[i]; + } + sum /= OVENTEMP_HISTORY_DEPTH; + s_analog.oven_temp = sum; + + return s_analog.oven_temp; +} + +void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) +{ + // notify + memcpy((void *) &s_analog.adc_averagebuf[s_analog.averagebuf_ptr * 4], (const void *) adc_values, 8); + s_analog.averagebuf_ptr = (s_analog.averagebuf_ptr + 1) % AVERAGEBUF_DEPTH; +} diff --git a/Core/Src/app_analog.h b/Core/Src/app_analog.h new file mode 100644 index 0000000..45bba82 --- /dev/null +++ b/Core/Src/app_analog.h @@ -0,0 +1,19 @@ +/** + * TODO file description + */ + +#ifndef BLUEPILLTROUBA_APP_ANALOG_H +#define BLUEPILLTROUBA_APP_ANALOG_H + +void app_analog_init(); + +/** + * Get current oven temp. + * + * A slow float calculation is done here - call only when needed, at a roughly constant rate (e.g. 1s) to make smoothing work properly. + * + * @return the value in celsius + */ +float app_analog_get_temp(); + +#endif //BLUEPILLTROUBA_APP_ANALOG_H diff --git a/Core/Src/app_buzzer.c b/Core/Src/app_buzzer.c new file mode 100644 index 0000000..342093c --- /dev/null +++ b/Core/Src/app_buzzer.c @@ -0,0 +1,25 @@ +/** + * TODO file description + */ + +#include "main.h" +#include "app_buzzer.h" +#include "tim.h" +#include "FreeRTOS.h" +#include "task.h" + +void app_buzzer_init() +{ + /* Enable buzzer PWM */ + HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); +} + +void app_buzzer_beep() { + + // TODO make this non-blocking + TIM2->ARR = 25714; + TIM2->CCR1 = TIM2->ARR/2; + vTaskDelay(50); + TIM2->CCR1 = 0; + vTaskDelay(50); +} diff --git a/Core/Src/app_buzzer.h b/Core/Src/app_buzzer.h new file mode 100644 index 0000000..2c846b5 --- /dev/null +++ b/Core/Src/app_buzzer.h @@ -0,0 +1,13 @@ +/** + * TODO file description + */ + +#ifndef BLUEPILLTROUBA_APP_BUZZER_H +#define BLUEPILLTROUBA_APP_BUZZER_H + +void app_buzzer_init(); + + +void app_buzzer_beep(); + +#endif //BLUEPILLTROUBA_APP_BUZZER_H diff --git a/Core/Src/app_heater.c b/Core/Src/app_heater.c new file mode 100644 index 0000000..77e1f9d --- /dev/null +++ b/Core/Src/app_heater.c @@ -0,0 +1,25 @@ +/** + * TODO file description + */ + +#include "main.h" +#include "app_heater.h" +#include "tim.h" + +void app_heater_init() +{ + HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); + TIM3->ARR = 25714; +} + + +void app_heater_set(bool active) +{ + if (active) { + TIM3->CCR1 = TIM3->ARR / 2; // testing - 50% + } else { + TIM3->CCR1 = 0; + } + + //HAL_GPIO_WritePin(HEATER_GPIO_Port, HEATER_Pin, active); +} diff --git a/Core/Src/app_heater.h b/Core/Src/app_heater.h new file mode 100644 index 0000000..46f310c --- /dev/null +++ b/Core/Src/app_heater.h @@ -0,0 +1,14 @@ +/** + * TODO file description + */ + +#ifndef BLUEPILLTROUBA_APP_HEATER_H +#define BLUEPILLTROUBA_APP_HEATER_H + +#include + +void app_heater_init(); + +void app_heater_set(bool active); + +#endif //BLUEPILLTROUBA_APP_HEATER_H diff --git a/Core/Src/app_knob.c b/Core/Src/app_knob.c new file mode 100644 index 0000000..9b52cdd --- /dev/null +++ b/Core/Src/app_knob.c @@ -0,0 +1,23 @@ +/** + * TODO file description + */ + +#include +#include "main.h" +#include "app_knob.h" +#include "tim.h" + +static struct { + uint16_t wheel; + bool push; +} s_knob = {}; + +void app_knob_init() +{ + /* Enable the rotary encoder */ + HAL_TIM_Encoder_Start(&htim4, TIM_CHANNEL_ALL); +} + +uint16_t app_knob_get_raw() { + return htim4.Instance->CNT; +} diff --git a/Core/Src/app_knob.h b/Core/Src/app_knob.h new file mode 100644 index 0000000..596d261 --- /dev/null +++ b/Core/Src/app_knob.h @@ -0,0 +1,12 @@ +/** + * TODO file description + */ + +#ifndef BLUEPILLTROUBA_APP_KNOB_H +#define BLUEPILLTROUBA_APP_KNOB_H + +void app_knob_init(); + +uint16_t app_knob_get_raw(); + +#endif //BLUEPILLTROUBA_APP_KNOB_H diff --git a/Core/Src/app_pid.c b/Core/Src/app_pid.c new file mode 100644 index 0000000..72946ec --- /dev/null +++ b/Core/Src/app_pid.c @@ -0,0 +1,108 @@ +#include "app_pid.h" +#include +#include +#include +#include + +static void clampOutput(struct PID *self) +{ + if (self->Output > self->outMax) { self->Output = self->outMax; } + else if (self->Output < self->outMin) { self->Output = self->outMin; } +} + +static void clampIterm(struct PID *self) +{ + if (self->ITerm > self->outMax) { self->ITerm = self->outMax; } + else if (self->ITerm < self->outMin) { self->ITerm = self->outMin; } +} + +void PID_Compute(struct PID *self, float Input) +{ + if (!self->ctlMode) { return; } + self->Input = Input; + + uint32_t now = xTaskGetTickCount(); + int32_t timeChange = (now - self->lastTime) * (uint32_t) 1000 / (uint32_t) configTICK_RATE_HZ; + if (timeChange >= self->SampleTime) { + /*Compute all the working error variables*/ + float error = self->Setpoint - Input; + self->ITerm += (self->ki * error); + + clampIterm(self); + + float dInput = (Input - self->lastInput); + + /*Compute PID Output*/ + self->Output = self->kp * error + self->ITerm - self->kd * dInput; + + clampOutput(self); + + /*Remember some variables for next time*/ + self->lastInput = Input; + self->lastTime = now; + } +} + +void PID_SetSetpoint(struct PID *self, float Setpoint) +{ + self->Setpoint = Setpoint; +} + +void PID_SetTunings(struct PID *self, float Kp, float Ki, float Kd) +{ + if (Kp < 0 || Ki < 0 || Kd < 0) { return; } + + float SampleTimeInSec = ((float) self->SampleTime) / 1000; + self->kp = Kp; + self->ki = Ki * SampleTimeInSec; + self->kd = Kd / SampleTimeInSec; + + if (self->controllerDirection == PID_REVERSE) { + self->kp = -self->kp; + self->ki = -self->ki; + self->kd = -self->kd; + } +} + +void PID_SetSampleTime(struct PID *self, uint32_t NewSampleTime) +{ + if (NewSampleTime > 0) { + float ratio = (float) NewSampleTime + / (float) self->SampleTime; + self->ki *= ratio; + self->kd /= ratio; + self->SampleTime = (uint32_t) NewSampleTime; + } +} + +void PID_SetOutputLimits(struct PID *self, float Min, float Max) +{ + if (Min > Max) { return; } + self->outMin = Min; + self->outMax = Max; + + clampOutput(self); + clampIterm(self); +} + +void PID_SetCtlMode(struct PID *self, enum PIDCtlMode Mode) +{ + bool newAuto = (Mode == PID_AUTOMATIC); + if (newAuto == !self->ctlMode) { /*we just went from manual to auto*/ + PID_Initialize(self); + } + self->ctlMode = newAuto; +} + +void PID_Initialize(struct PID *self) +{ + self->lastInput = self->Input; + self->ITerm = self->Output; + + clampIterm(self); +} + +void PID_SetControllerDirection(struct PID *self, enum PIDDirection Direction) +{ + self->controllerDirection = Direction; +} diff --git a/Core/Src/app_pid.h b/Core/Src/app_pid.h new file mode 100644 index 0000000..9cf2330 --- /dev/null +++ b/Core/Src/app_pid.h @@ -0,0 +1,52 @@ +/** + * adapted from the Arduino PID library + * + * Created on 2020/01/08. + */ + +#ifndef ARDUINOPID_H +#define ARDUINOPID_H + +#include + +enum PIDCtlMode { + PID_MANUAL = 0, + PID_AUTOMATIC = 1, +}; + +enum PIDDirection { + PID_DIRECT = 0, + PID_REVERSE = 1, +}; + +struct PID { + /*working variables*/ + uint32_t lastTime; + float Input, Output, Setpoint; + float ITerm, lastInput; + float kp, ki, kd; + uint32_t SampleTime; // millis + float outMin, outMax; + enum PIDCtlMode ctlMode; // false + enum PIDDirection controllerDirection; +}; + +#define PID_DEFAULT() { .SampleTime = 1000, .ctlMode=PID_MANUAL, .controllerDirection=PID_DIRECT } + +void PID_Compute(struct PID *self, float Input); + +void PID_SetTunings(struct PID *self, float Kp, float Ki, float Kd); + +void PID_SetSampleTime(struct PID *self, uint32_t NewSampleTime); + +void PID_SetOutputLimits(struct PID *self, float Min, float Max); + +void PID_SetCtlMode(struct PID *self, enum PIDCtlMode Mode); + +void PID_Initialize(struct PID *self); + +void PID_SetSetpoint(struct PID *self, float Setpoint); + +void PID_SetControllerDirection(struct PID *self, enum PIDDirection Direction); + +#endif //ARDUINOPID_H diff --git a/Core/Src/main.c b/Core/Src/main.c index 7a6de37..458a762 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -22,7 +22,6 @@ #include "adc.h" #include "dma.h" #include "iwdg.h" -#include "rtc.h" #include "spi.h" #include "tim.h" #include "usart.h" @@ -105,7 +104,6 @@ int main(void) MX_DMA_Init(); MX_TIM4_Init(); MX_TIM2_Init(); - MX_RTC_Init(); MX_TIM3_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ @@ -142,11 +140,9 @@ void SystemClock_Config(void) /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE - |RCC_OSCILLATORTYPE_LSE; + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.LSEState = RCC_LSE_ON; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.LSIState = RCC_LSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; @@ -170,8 +166,7 @@ void SystemClock_Config(void) { Error_Handler(); } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_ADC; - PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC; PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV8; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) { diff --git a/Core/Src/rtc.c b/Core/Src/rtc.c deleted file mode 100644 index 3265f48..0000000 --- a/Core/Src/rtc.c +++ /dev/null @@ -1,120 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file rtc.c - * @brief This file provides code for the configuration - * of the RTC instances. - ****************************************************************************** - * @attention - * - * Copyright (c) 2023 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "rtc.h" - -/* USER CODE BEGIN 0 */ - -/* USER CODE END 0 */ - -RTC_HandleTypeDef hrtc; - -/* RTC init function */ -void MX_RTC_Init(void) -{ - - /* USER CODE BEGIN RTC_Init 0 */ - - /* USER CODE END RTC_Init 0 */ - - RTC_TimeTypeDef sTime = {0}; - RTC_DateTypeDef DateToUpdate = {0}; - - /* USER CODE BEGIN RTC_Init 1 */ - - /* USER CODE END RTC_Init 1 */ - - /** Initialize RTC Only - */ - hrtc.Instance = RTC; - hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND; - hrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE; - if (HAL_RTC_Init(&hrtc) != HAL_OK) - { - Error_Handler(); - } - - /* USER CODE BEGIN Check_RTC_BKUP */ - - /* USER CODE END Check_RTC_BKUP */ - - /** Initialize RTC and set the Time and Date - */ - sTime.Hours = 0x0; - sTime.Minutes = 0x0; - sTime.Seconds = 0x0; - - if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK) - { - Error_Handler(); - } - DateToUpdate.WeekDay = RTC_WEEKDAY_MONDAY; - DateToUpdate.Month = RTC_MONTH_JANUARY; - DateToUpdate.Date = 0x1; - DateToUpdate.Year = 0x0; - - if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN RTC_Init 2 */ - - /* USER CODE END RTC_Init 2 */ - -} - -void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle) -{ - - if(rtcHandle->Instance==RTC) - { - /* USER CODE BEGIN RTC_MspInit 0 */ - - /* USER CODE END RTC_MspInit 0 */ - HAL_PWR_EnableBkUpAccess(); - /* Enable BKP CLK enable for backup registers */ - __HAL_RCC_BKP_CLK_ENABLE(); - /* RTC clock enable */ - __HAL_RCC_RTC_ENABLE(); - /* USER CODE BEGIN RTC_MspInit 1 */ - - /* USER CODE END RTC_MspInit 1 */ - } -} - -void HAL_RTC_MspDeInit(RTC_HandleTypeDef* rtcHandle) -{ - - if(rtcHandle->Instance==RTC) - { - /* USER CODE BEGIN RTC_MspDeInit 0 */ - - /* USER CODE END RTC_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_RTC_DISABLE(); - /* USER CODE BEGIN RTC_MspDeInit 1 */ - - /* USER CODE END RTC_MspDeInit 1 */ - } -} - -/* USER CODE BEGIN 1 */ - -/* USER CODE END 1 */ diff --git a/Core/Src/tim.c b/Core/Src/tim.c index 62589c2..8c6ca91 100644 --- a/Core/Src/tim.c +++ b/Core/Src/tim.c @@ -123,7 +123,7 @@ void MX_TIM3_Init(void) Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 32768; + sConfigOC.Pulse = 0; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) @@ -274,7 +274,7 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) */ GPIO_InitStruct.Pin = HEATER_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(HEATER_GPIO_Port, &GPIO_InitStruct); /* USER CODE BEGIN TIM3_MspPostInit 1 */ diff --git a/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rtc.h b/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rtc.h deleted file mode 100644 index 5e4f5ab..0000000 --- a/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rtc.h +++ /dev/null @@ -1,607 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f1xx_hal_rtc.h - * @author MCD Application Team - * @brief Header file of RTC HAL module. - ****************************************************************************** - * @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 - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F1xx_HAL_RTC_H -#define __STM32F1xx_HAL_RTC_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f1xx_hal_def.h" - -/** @addtogroup STM32F1xx_HAL_Driver - * @{ - */ - -/** @addtogroup RTC - * @{ - */ - -/** @addtogroup RTC_Private_Macros - * @{ - */ - -#define IS_RTC_ASYNCH_PREDIV(PREDIV) (((PREDIV) <= 0xFFFFFU) || ((PREDIV) == RTC_AUTO_1_SECOND)) -#define IS_RTC_HOUR24(HOUR) ((HOUR) <= 23U) -#define IS_RTC_MINUTES(MINUTES) ((MINUTES) <= 59U) -#define IS_RTC_SECONDS(SECONDS) ((SECONDS) <= 59U) -#define IS_RTC_FORMAT(FORMAT) (((FORMAT) == RTC_FORMAT_BIN) || ((FORMAT) == RTC_FORMAT_BCD)) -#define IS_RTC_YEAR(YEAR) ((YEAR) <= 99U) -#define IS_RTC_MONTH(MONTH) (((MONTH) >= 1U) && ((MONTH) <= 12U)) -#define IS_RTC_DATE(DATE) (((DATE) >= 1U) && ((DATE) <= 31U)) -#define IS_RTC_ALARM(ALARM) ((ALARM) == RTC_ALARM_A) -#define IS_RTC_CALIB_OUTPUT(__OUTPUT__) (((__OUTPUT__) == RTC_OUTPUTSOURCE_NONE) || \ - ((__OUTPUT__) == RTC_OUTPUTSOURCE_CALIBCLOCK) || \ - ((__OUTPUT__) == RTC_OUTPUTSOURCE_ALARM) || \ - ((__OUTPUT__) == RTC_OUTPUTSOURCE_SECOND)) - - -/** - * @} - */ - -/** @addtogroup RTC_Private_Constants - * @{ - */ -/** @defgroup RTC_Timeout_Value Default Timeout Value - * @{ - */ -#define RTC_TIMEOUT_VALUE 1000U -/** - * @} - */ - -/** @defgroup RTC_EXTI_Line_Event RTC EXTI Line event - * @{ - */ -#define RTC_EXTI_LINE_ALARM_EVENT ((uint32_t)EXTI_IMR_MR17) /*!< External interrupt line 17 Connected to the RTC Alarm event */ -/** - * @} - */ - - -/** - * @} - */ - -/* Exported types ------------------------------------------------------------*/ -/** @defgroup RTC_Exported_Types RTC Exported Types - * @{ - */ -/** - * @brief RTC Time structure definition - */ -typedef struct -{ - uint8_t Hours; /*!< Specifies the RTC Time Hour. - This parameter must be a number between Min_Data = 0 and Max_Data = 23 */ - - uint8_t Minutes; /*!< Specifies the RTC Time Minutes. - This parameter must be a number between Min_Data = 0 and Max_Data = 59 */ - - uint8_t Seconds; /*!< Specifies the RTC Time Seconds. - This parameter must be a number between Min_Data = 0 and Max_Data = 59 */ - -} RTC_TimeTypeDef; - -/** - * @brief RTC Alarm structure definition - */ -typedef struct -{ - RTC_TimeTypeDef AlarmTime; /*!< Specifies the RTC Alarm Time members */ - - uint32_t Alarm; /*!< Specifies the alarm ID (only 1 alarm ID for STM32F1). - This parameter can be a value of @ref RTC_Alarms_Definitions */ -} RTC_AlarmTypeDef; - -/** - * @brief HAL State structures definition - */ -typedef enum -{ - HAL_RTC_STATE_RESET = 0x00U, /*!< RTC not yet initialized or disabled */ - HAL_RTC_STATE_READY = 0x01U, /*!< RTC initialized and ready for use */ - HAL_RTC_STATE_BUSY = 0x02U, /*!< RTC process is ongoing */ - HAL_RTC_STATE_TIMEOUT = 0x03U, /*!< RTC timeout state */ - HAL_RTC_STATE_ERROR = 0x04U /*!< RTC error state */ - -} HAL_RTCStateTypeDef; - -/** - * @brief RTC Configuration Structure definition - */ -typedef struct -{ - uint32_t AsynchPrediv; /*!< Specifies the RTC Asynchronous Predivider value. - This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFFFFF or RTC_AUTO_1_SECOND - If RTC_AUTO_1_SECOND is selected, AsynchPrediv will be set automatically to get 1sec timebase */ - - uint32_t OutPut; /*!< Specifies which signal will be routed to the RTC Tamper pin. - This parameter can be a value of @ref RTC_output_source_to_output_on_the_Tamper_pin */ - -} RTC_InitTypeDef; - -/** - * @brief RTC Date structure definition - */ -typedef struct -{ - uint8_t WeekDay; /*!< Specifies the RTC Date WeekDay (not necessary for HAL_RTC_SetDate). - This parameter can be a value of @ref RTC_WeekDay_Definitions */ - - uint8_t Month; /*!< Specifies the RTC Date Month (in BCD format). - This parameter can be a value of @ref RTC_Month_Date_Definitions */ - - uint8_t Date; /*!< Specifies the RTC Date. - This parameter must be a number between Min_Data = 1 and Max_Data = 31 */ - - uint8_t Year; /*!< Specifies the RTC Date Year. - This parameter must be a number between Min_Data = 0 and Max_Data = 99 */ - -} RTC_DateTypeDef; - -/** - * @brief Time Handle Structure definition - */ -#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) -typedef struct __RTC_HandleTypeDef -#else -typedef struct -#endif /* (USE_HAL_RTC_REGISTER_CALLBACKS) */ -{ - RTC_TypeDef *Instance; /*!< Register base address */ - - RTC_InitTypeDef Init; /*!< RTC required parameters */ - - RTC_DateTypeDef DateToUpdate; /*!< Current date set by user and updated automatically */ - - HAL_LockTypeDef Lock; /*!< RTC locking object */ - - __IO HAL_RTCStateTypeDef State; /*!< Time communication state */ - -#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) - void (* AlarmAEventCallback)(struct __RTC_HandleTypeDef *hrtc); /*!< RTC Alarm A Event callback */ - - void (* Tamper1EventCallback)(struct __RTC_HandleTypeDef *hrtc); /*!< RTC Tamper 1 Event callback */ - - void (* MspInitCallback)(struct __RTC_HandleTypeDef *hrtc); /*!< RTC Msp Init callback */ - - void (* MspDeInitCallback)(struct __RTC_HandleTypeDef *hrtc); /*!< RTC Msp DeInit callback */ - -#endif /* (USE_HAL_RTC_REGISTER_CALLBACKS) */ - -} RTC_HandleTypeDef; - -#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) -/** - * @brief HAL RTC Callback ID enumeration definition - */ -typedef enum -{ - HAL_RTC_ALARM_A_EVENT_CB_ID = 0x00u, /*!< RTC Alarm A Event Callback ID */ - HAL_RTC_TAMPER1_EVENT_CB_ID = 0x04u, /*!< RTC Tamper 1 Callback ID */ - HAL_RTC_MSPINIT_CB_ID = 0x0Eu, /*!< RTC Msp Init callback ID */ - HAL_RTC_MSPDEINIT_CB_ID = 0x0Fu /*!< RTC Msp DeInit callback ID */ -} HAL_RTC_CallbackIDTypeDef; - -/** - * @brief HAL RTC Callback pointer definition - */ -typedef void (*pRTC_CallbackTypeDef)(RTC_HandleTypeDef *hrtc); /*!< pointer to an RTC callback function */ -#endif /* USE_HAL_RTC_REGISTER_CALLBACKS */ - -/** - * @} - */ - -/* Exported constants --------------------------------------------------------*/ -/** @defgroup RTC_Exported_Constants RTC Exported Constants - * @{ - */ - -/** @defgroup RTC_Automatic_Prediv_1_Second Automatic calculation of prediv for 1sec timebase - * @{ - */ -#define RTC_AUTO_1_SECOND 0xFFFFFFFFU - -/** - * @} - */ - -/** @defgroup RTC_Input_parameter_format_definitions Input Parameter Format - * @{ - */ -#define RTC_FORMAT_BIN 0x000000000U -#define RTC_FORMAT_BCD 0x000000001U - -/** - * @} - */ - -/** @defgroup RTC_Month_Date_Definitions Month Definitions - * @{ - */ - -/* Coded in BCD format */ -#define RTC_MONTH_JANUARY ((uint8_t)0x01) -#define RTC_MONTH_FEBRUARY ((uint8_t)0x02) -#define RTC_MONTH_MARCH ((uint8_t)0x03) -#define RTC_MONTH_APRIL ((uint8_t)0x04) -#define RTC_MONTH_MAY ((uint8_t)0x05) -#define RTC_MONTH_JUNE ((uint8_t)0x06) -#define RTC_MONTH_JULY ((uint8_t)0x07) -#define RTC_MONTH_AUGUST ((uint8_t)0x08) -#define RTC_MONTH_SEPTEMBER ((uint8_t)0x09) -#define RTC_MONTH_OCTOBER ((uint8_t)0x10) -#define RTC_MONTH_NOVEMBER ((uint8_t)0x11) -#define RTC_MONTH_DECEMBER ((uint8_t)0x12) - -/** - * @} - */ - -/** @defgroup RTC_WeekDay_Definitions WeekDay Definitions - * @{ - */ -#define RTC_WEEKDAY_MONDAY ((uint8_t)0x01) -#define RTC_WEEKDAY_TUESDAY ((uint8_t)0x02) -#define RTC_WEEKDAY_WEDNESDAY ((uint8_t)0x03) -#define RTC_WEEKDAY_THURSDAY ((uint8_t)0x04) -#define RTC_WEEKDAY_FRIDAY ((uint8_t)0x05) -#define RTC_WEEKDAY_SATURDAY ((uint8_t)0x06) -#define RTC_WEEKDAY_SUNDAY ((uint8_t)0x00) - -/** - * @} - */ - -/** @defgroup RTC_Alarms_Definitions Alarms Definitions - * @{ - */ -#define RTC_ALARM_A 0U /*!< Specify alarm ID (mainly for legacy purposes) */ - -/** - * @} - */ - - -/** @defgroup RTC_output_source_to_output_on_the_Tamper_pin Output source to output on the Tamper pin - * @{ - */ - -#define RTC_OUTPUTSOURCE_NONE 0x00000000U /*!< No output on the TAMPER pin */ -#define RTC_OUTPUTSOURCE_CALIBCLOCK BKP_RTCCR_CCO /*!< RTC clock with a frequency divided by 64 on the TAMPER pin */ -#define RTC_OUTPUTSOURCE_ALARM BKP_RTCCR_ASOE /*!< Alarm pulse signal on the TAMPER pin */ -#define RTC_OUTPUTSOURCE_SECOND (BKP_RTCCR_ASOS | BKP_RTCCR_ASOE) /*!< Second pulse signal on the TAMPER pin */ - -/** - * @} - */ - -/** @defgroup RTC_Interrupts_Definitions Interrupts Definitions - * @{ - */ -#define RTC_IT_OW RTC_CRH_OWIE /*!< Overflow interrupt */ -#define RTC_IT_ALRA RTC_CRH_ALRIE /*!< Alarm interrupt */ -#define RTC_IT_SEC RTC_CRH_SECIE /*!< Second interrupt */ -#define RTC_IT_TAMP1 BKP_CSR_TPIE /*!< TAMPER Pin interrupt enable */ -/** - * @} - */ - -/** @defgroup RTC_Flags_Definitions Flags Definitions - * @{ - */ -#define RTC_FLAG_RTOFF RTC_CRL_RTOFF /*!< RTC Operation OFF flag */ -#define RTC_FLAG_RSF RTC_CRL_RSF /*!< Registers Synchronized flag */ -#define RTC_FLAG_OW RTC_CRL_OWF /*!< Overflow flag */ -#define RTC_FLAG_ALRAF RTC_CRL_ALRF /*!< Alarm flag */ -#define RTC_FLAG_SEC RTC_CRL_SECF /*!< Second flag */ -#define RTC_FLAG_TAMP1F BKP_CSR_TEF /*!< Tamper Interrupt Flag */ - -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/** @defgroup RTC_Exported_macros RTC Exported Macros - * @{ - */ - -/** @brief Reset RTC handle state - * @param __HANDLE__: RTC handle. - * @retval None - */ -#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) -#define __HAL_RTC_RESET_HANDLE_STATE(__HANDLE__) do{\ - (__HANDLE__)->State = HAL_RTC_STATE_RESET;\ - (__HANDLE__)->MspInitCallback = NULL;\ - (__HANDLE__)->MspDeInitCallback = NULL;\ - }while(0u) -#else -#define __HAL_RTC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_RTC_STATE_RESET) -#endif /* USE_HAL_RTC_REGISTER_CALLBACKS */ - -/** - * @brief Disable the write protection for RTC registers. - * @param __HANDLE__: specifies the RTC handle. - * @retval None - */ -#define __HAL_RTC_WRITEPROTECTION_DISABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CRL, RTC_CRL_CNF) - -/** - * @brief Enable the write protection for RTC registers. - * @param __HANDLE__: specifies the RTC handle. - * @retval None - */ -#define __HAL_RTC_WRITEPROTECTION_ENABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CRL, RTC_CRL_CNF) - -/** - * @brief Enable the RTC Alarm interrupt. - * @param __HANDLE__: specifies the RTC handle. - * @param __INTERRUPT__: specifies the RTC Alarm interrupt sources to be enabled or disabled. - * This parameter can be any combination of the following values: - * @arg RTC_IT_ALRA: Alarm A interrupt - * @retval None - */ -#define __HAL_RTC_ALARM_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CRH, (__INTERRUPT__)) - -/** - * @brief Disable the RTC Alarm interrupt. - * @param __HANDLE__: specifies the RTC handle. - * @param __INTERRUPT__: specifies the RTC Alarm interrupt sources to be enabled or disabled. - * This parameter can be any combination of the following values: - * @arg RTC_IT_ALRA: Alarm A interrupt - * @retval None - */ -#define __HAL_RTC_ALARM_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CRH, (__INTERRUPT__)) - -/** - * @brief Check whether the specified RTC Alarm interrupt has been enabled or not. - * @param __HANDLE__: specifies the RTC handle. - * @param __INTERRUPT__: specifies the RTC Alarm interrupt sources to be checked - * This parameter can be: - * @arg RTC_IT_ALRA: Alarm A interrupt - * @retval None - */ -#define __HAL_RTC_ALARM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((__HANDLE__)->Instance->CRH)& ((__INTERRUPT__)))) != RESET)? SET : RESET) - -/** - * @brief Get the selected RTC Alarm's flag status. - * @param __HANDLE__: specifies the RTC handle. - * @param __FLAG__: specifies the RTC Alarm Flag sources to be enabled or disabled. - * This parameter can be: - * @arg RTC_FLAG_ALRAF - * @retval None - */ -#define __HAL_RTC_ALARM_GET_FLAG(__HANDLE__, __FLAG__) (((((__HANDLE__)->Instance->CRL) & (__FLAG__)) != RESET)? SET : RESET) - -/** - * @brief Check whether the specified RTC Alarm interrupt has occurred or not. - * @param __HANDLE__: specifies the RTC handle. - * @param __INTERRUPT__: specifies the RTC Alarm interrupt sources to check. - * This parameter can be: - * @arg RTC_IT_ALRA: Alarm A interrupt - * @retval None - */ -#define __HAL_RTC_ALARM_GET_IT(__HANDLE__, __INTERRUPT__) (((((__HANDLE__)->Instance->CRL) & (__INTERRUPT__)) != RESET)? SET : RESET) - -/** - * @brief Clear the RTC Alarm's pending flags. - * @param __HANDLE__: specifies the RTC handle. - * @param __FLAG__: specifies the RTC Alarm Flag sources to be enabled or disabled. - * This parameter can be: - * @arg RTC_FLAG_ALRAF - * @retval None - */ -#define __HAL_RTC_ALARM_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->CRL) &= ~(__FLAG__) - -/** - * @brief Enable interrupt on ALARM Exti Line 17. - * @retval None. - */ -#define __HAL_RTC_ALARM_EXTI_ENABLE_IT() SET_BIT(EXTI->IMR, RTC_EXTI_LINE_ALARM_EVENT) - -/** - * @brief Disable interrupt on ALARM Exti Line 17. - * @retval None. - */ -#define __HAL_RTC_ALARM_EXTI_DISABLE_IT() CLEAR_BIT(EXTI->IMR, RTC_EXTI_LINE_ALARM_EVENT) - -/** - * @brief Enable event on ALARM Exti Line 17. - * @retval None. - */ -#define __HAL_RTC_ALARM_EXTI_ENABLE_EVENT() SET_BIT(EXTI->EMR, RTC_EXTI_LINE_ALARM_EVENT) - -/** - * @brief Disable event on ALARM Exti Line 17. - * @retval None. - */ -#define __HAL_RTC_ALARM_EXTI_DISABLE_EVENT() CLEAR_BIT(EXTI->EMR, RTC_EXTI_LINE_ALARM_EVENT) - - -/** - * @brief ALARM EXTI line configuration: set falling edge trigger. - * @retval None. - */ -#define __HAL_RTC_ALARM_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR, RTC_EXTI_LINE_ALARM_EVENT) - - -/** - * @brief Disable the ALARM Extended Interrupt Falling Trigger. - * @retval None. - */ -#define __HAL_RTC_ALARM_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR, RTC_EXTI_LINE_ALARM_EVENT) - - -/** - * @brief ALARM EXTI line configuration: set rising edge trigger. - * @retval None. - */ -#define __HAL_RTC_ALARM_EXTI_ENABLE_RISING_EDGE() SET_BIT(EXTI->RTSR, RTC_EXTI_LINE_ALARM_EVENT) - -/** - * @brief Disable the ALARM Extended Interrupt Rising Trigger. - * This parameter can be: - * @retval None. - */ -#define __HAL_RTC_ALARM_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR, RTC_EXTI_LINE_ALARM_EVENT) - -/** - * @brief ALARM EXTI line configuration: set rising & falling edge trigger. - * @retval None. - */ -#define __HAL_RTC_ALARM_EXTI_ENABLE_RISING_FALLING_EDGE() \ -do{ \ - __HAL_RTC_ALARM_EXTI_ENABLE_RISING_EDGE(); \ - __HAL_RTC_ALARM_EXTI_ENABLE_FALLING_EDGE(); \ - } while(0U) - -/** - * @brief Disable the ALARM Extended Interrupt Rising & Falling Trigger. - * This parameter can be: - * @retval None. - */ -#define __HAL_RTC_ALARM_EXTI_DISABLE_RISING_FALLING_EDGE() \ -do{ \ - __HAL_RTC_ALARM_EXTI_DISABLE_RISING_EDGE(); \ - __HAL_RTC_ALARM_EXTI_DISABLE_FALLING_EDGE(); \ - } while(0U) - -/** - * @brief Check whether the specified ALARM EXTI interrupt flag is set or not. - * @retval EXTI ALARM Line Status. - */ -#define __HAL_RTC_ALARM_EXTI_GET_FLAG() (EXTI->PR & (RTC_EXTI_LINE_ALARM_EVENT)) - -/** - * @brief Clear the ALARM EXTI flag. - * @retval None. - */ -#define __HAL_RTC_ALARM_EXTI_CLEAR_FLAG() (EXTI->PR = (RTC_EXTI_LINE_ALARM_EVENT)) - -/** - * @brief Generate a Software interrupt on selected EXTI line. - * @retval None. - */ -#define __HAL_RTC_ALARM_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER, RTC_EXTI_LINE_ALARM_EVENT) -/** - * @} - */ - -/* Include RTC HAL Extension module */ -#include "stm32f1xx_hal_rtc_ex.h" - -/* Exported functions --------------------------------------------------------*/ -/** @addtogroup RTC_Exported_Functions - * @{ - */ - - -/* Initialization and de-initialization functions ****************************/ -/** @addtogroup RTC_Exported_Functions_Group1 - * @{ - */ -HAL_StatusTypeDef HAL_RTC_Init(RTC_HandleTypeDef *hrtc); -HAL_StatusTypeDef HAL_RTC_DeInit(RTC_HandleTypeDef *hrtc); -void HAL_RTC_MspInit(RTC_HandleTypeDef *hrtc); -void HAL_RTC_MspDeInit(RTC_HandleTypeDef *hrtc); - -/* Callbacks Register/UnRegister functions ***********************************/ -#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) -HAL_StatusTypeDef HAL_RTC_RegisterCallback(RTC_HandleTypeDef *hrtc, HAL_RTC_CallbackIDTypeDef CallbackID, pRTC_CallbackTypeDef pCallback); -HAL_StatusTypeDef HAL_RTC_UnRegisterCallback(RTC_HandleTypeDef *hrtc, HAL_RTC_CallbackIDTypeDef CallbackID); -#endif /* USE_HAL_RTC_REGISTER_CALLBACKS */ -/** - * @} - */ - -/* RTC Time and Date functions ************************************************/ -/** @addtogroup RTC_Exported_Functions_Group2 - * @{ - */ -HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format); -HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format); -HAL_StatusTypeDef HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format); -HAL_StatusTypeDef HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format); -/** - * @} - */ - -/* RTC Alarm functions ********************************************************/ -/** @addtogroup RTC_Exported_Functions_Group3 - * @{ - */ -HAL_StatusTypeDef HAL_RTC_SetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format); -HAL_StatusTypeDef HAL_RTC_SetAlarm_IT(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format); -HAL_StatusTypeDef HAL_RTC_DeactivateAlarm(RTC_HandleTypeDef *hrtc, uint32_t Alarm); -HAL_StatusTypeDef HAL_RTC_GetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Alarm, uint32_t Format); -void HAL_RTC_AlarmIRQHandler(RTC_HandleTypeDef *hrtc); -HAL_StatusTypeDef HAL_RTC_PollForAlarmAEvent(RTC_HandleTypeDef *hrtc, uint32_t Timeout); -void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc); -/** - * @} - */ - -/* Peripheral State functions *************************************************/ -/** @addtogroup RTC_Exported_Functions_Group4 - * @{ - */ -HAL_RTCStateTypeDef HAL_RTC_GetState(RTC_HandleTypeDef *hrtc); -/** - * @} - */ - -/* Peripheral Control functions ***********************************************/ -/** @addtogroup RTC_Exported_Functions_Group5 - * @{ - */ -HAL_StatusTypeDef HAL_RTC_WaitForSynchro(RTC_HandleTypeDef *hrtc); -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F1xx_HAL_RTC_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rtc_ex.h b/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rtc_ex.h deleted file mode 100644 index 7c285ce..0000000 --- a/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rtc_ex.h +++ /dev/null @@ -1,412 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f1xx_hal_rtc_ex.h - * @author MCD Application Team - * @brief Header file of RTC HAL Extension module. - ****************************************************************************** - * @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 - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F1xx_HAL_RTC_EX_H -#define __STM32F1xx_HAL_RTC_EX_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f1xx_hal_def.h" - -/** @addtogroup STM32F1xx_HAL_Driver - * @{ - */ - -/** @addtogroup RTCEx - * @{ - */ - -/** @addtogroup RTCEx_Private_Macros - * @{ - */ - -/** @defgroup RTCEx_Alias_For_Legacy Alias define maintained for legacy - * @{ - */ -#define HAL_RTCEx_TamperTimeStampIRQHandler HAL_RTCEx_TamperIRQHandler - -/** - * @} - */ - -/** @defgroup RTCEx_IS_RTC_Definitions Private macros to check input parameters - * @{ - */ -#define IS_RTC_TAMPER(__TAMPER__) ((__TAMPER__) == RTC_TAMPER_1) - -#define IS_RTC_TAMPER_TRIGGER(__TRIGGER__) (((__TRIGGER__) == RTC_TAMPERTRIGGER_LOWLEVEL) || \ - ((__TRIGGER__) == RTC_TAMPERTRIGGER_HIGHLEVEL)) - -#if RTC_BKP_NUMBER > 10U -#define IS_RTC_BKP(BKP) (((BKP) <= (uint32_t)RTC_BKP_DR10) || (((BKP) >= (uint32_t)RTC_BKP_DR11) && ((BKP) <= (uint32_t)RTC_BKP_DR42))) -#else -#define IS_RTC_BKP(BKP) ((BKP) <= (uint32_t)RTC_BKP_NUMBER) -#endif -#define IS_RTC_SMOOTH_CALIB_MINUS(__VALUE__) ((__VALUE__) <= 0x0000007FU) - -/** - * @} - */ - -/** - * @} - */ - -/* Exported types ------------------------------------------------------------*/ -/** @defgroup RTCEx_Exported_Types RTCEx Exported Types - * @{ - */ -/** - * @brief RTC Tamper structure definition - */ -typedef struct -{ - uint32_t Tamper; /*!< Specifies the Tamper Pin. - This parameter can be a value of @ref RTCEx_Tamper_Pins_Definitions */ - - uint32_t Trigger; /*!< Specifies the Tamper Trigger. - This parameter can be a value of @ref RTCEx_Tamper_Trigger_Definitions */ - -} RTC_TamperTypeDef; - -/** - * @} - */ - -/* Exported constants --------------------------------------------------------*/ -/** @defgroup RTCEx_Exported_Constants RTCEx Exported Constants - * @{ - */ - -/** @defgroup RTCEx_Tamper_Pins_Definitions Tamper Pins Definitions - * @{ - */ -#define RTC_TAMPER_1 BKP_CR_TPE /*!< Select tamper to be enabled (mainly for legacy purposes) */ - -/** - * @} - */ - -/** @defgroup RTCEx_Tamper_Trigger_Definitions Tamper Trigger Definitions - * @{ - */ -#define RTC_TAMPERTRIGGER_LOWLEVEL BKP_CR_TPAL /*!< A high level on the TAMPER pin resets all data backup registers (if TPE bit is set) */ -#define RTC_TAMPERTRIGGER_HIGHLEVEL 0x00000000U /*!< A low level on the TAMPER pin resets all data backup registers (if TPE bit is set) */ - -/** - * @} - */ - -/** @defgroup RTCEx_Backup_Registers_Definitions Backup Registers Definitions - * @{ - */ -#if RTC_BKP_NUMBER > 0U -#define RTC_BKP_DR1 0x00000001U -#define RTC_BKP_DR2 0x00000002U -#define RTC_BKP_DR3 0x00000003U -#define RTC_BKP_DR4 0x00000004U -#define RTC_BKP_DR5 0x00000005U -#define RTC_BKP_DR6 0x00000006U -#define RTC_BKP_DR7 0x00000007U -#define RTC_BKP_DR8 0x00000008U -#define RTC_BKP_DR9 0x00000009U -#define RTC_BKP_DR10 0x0000000AU -#endif /* RTC_BKP_NUMBER > 0 */ - -#if RTC_BKP_NUMBER > 10U -#define RTC_BKP_DR11 0x00000010U -#define RTC_BKP_DR12 0x00000011U -#define RTC_BKP_DR13 0x00000012U -#define RTC_BKP_DR14 0x00000013U -#define RTC_BKP_DR15 0x00000014U -#define RTC_BKP_DR16 0x00000015U -#define RTC_BKP_DR17 0x00000016U -#define RTC_BKP_DR18 0x00000017U -#define RTC_BKP_DR19 0x00000018U -#define RTC_BKP_DR20 0x00000019U -#define RTC_BKP_DR21 0x0000001AU -#define RTC_BKP_DR22 0x0000001BU -#define RTC_BKP_DR23 0x0000001CU -#define RTC_BKP_DR24 0x0000001DU -#define RTC_BKP_DR25 0x0000001EU -#define RTC_BKP_DR26 0x0000001FU -#define RTC_BKP_DR27 0x00000020U -#define RTC_BKP_DR28 0x00000021U -#define RTC_BKP_DR29 0x00000022U -#define RTC_BKP_DR30 0x00000023U -#define RTC_BKP_DR31 0x00000024U -#define RTC_BKP_DR32 0x00000025U -#define RTC_BKP_DR33 0x00000026U -#define RTC_BKP_DR34 0x00000027U -#define RTC_BKP_DR35 0x00000028U -#define RTC_BKP_DR36 0x00000029U -#define RTC_BKP_DR37 0x0000002AU -#define RTC_BKP_DR38 0x0000002BU -#define RTC_BKP_DR39 0x0000002CU -#define RTC_BKP_DR40 0x0000002DU -#define RTC_BKP_DR41 0x0000002EU -#define RTC_BKP_DR42 0x0000002FU -#endif /* RTC_BKP_NUMBER > 10 */ - -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/** @defgroup RTCEx_Exported_Macros RTCEx Exported Macros - * @{ - */ - -/** - * @brief Enable the RTC Tamper interrupt. - * @param __HANDLE__: specifies the RTC handle. - * @param __INTERRUPT__: specifies the RTC Tamper interrupt sources to be enabled - * This parameter can be any combination of the following values: - * @arg RTC_IT_TAMP1: Tamper A interrupt - * @retval None - */ -#define __HAL_RTC_TAMPER_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT(BKP->CSR, (__INTERRUPT__)) - -/** - * @brief Disable the RTC Tamper interrupt. - * @param __HANDLE__: specifies the RTC handle. - * @param __INTERRUPT__: specifies the RTC Tamper interrupt sources to be disabled. - * This parameter can be any combination of the following values: - * @arg RTC_IT_TAMP1: Tamper A interrupt - * @retval None - */ -#define __HAL_RTC_TAMPER_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT(BKP->CSR, (__INTERRUPT__)) - -/** - * @brief Check whether the specified RTC Tamper interrupt has been enabled or not. - * @param __HANDLE__: specifies the RTC handle. - * @param __INTERRUPT__: specifies the RTC Tamper interrupt sources to be checked. - * This parameter can be: - * @arg RTC_IT_TAMP1 - * @retval None - */ -#define __HAL_RTC_TAMPER_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((BKP->CSR) & ((__INTERRUPT__))) != RESET)? SET : RESET) - -/** - * @brief Get the selected RTC Tamper's flag status. - * @param __HANDLE__: specifies the RTC handle. - * @param __FLAG__: specifies the RTC Tamper Flag sources to be enabled or disabled. - * This parameter can be: - * @arg RTC_FLAG_TAMP1F - * @retval None - */ -#define __HAL_RTC_TAMPER_GET_FLAG(__HANDLE__, __FLAG__) ((((BKP->CSR) & (__FLAG__)) != RESET)? SET : RESET) - -/** - * @brief Get the selected RTC Tamper's flag status. - * @param __HANDLE__: specifies the RTC handle. - * @param __INTERRUPT__: specifies the RTC Tamper interrupt sources to be checked. - * This parameter can be: - * @arg RTC_IT_TAMP1 - * @retval None - */ -#define __HAL_RTC_TAMPER_GET_IT(__HANDLE__, __INTERRUPT__) ((((BKP->CSR) & (BKP_CSR_TEF)) != RESET)? SET : RESET) - -/** - * @brief Clear the RTC Tamper's pending flags. - * @param __HANDLE__: specifies the RTC handle. - * @param __FLAG__: specifies the RTC Tamper Flag sources to be enabled or disabled. - * This parameter can be: - * @arg RTC_FLAG_TAMP1F - * @retval None - */ -#define __HAL_RTC_TAMPER_CLEAR_FLAG(__HANDLE__, __FLAG__) SET_BIT(BKP->CSR, BKP_CSR_CTE | BKP_CSR_CTI) - -/** - * @brief Enable the RTC Second interrupt. - * @param __HANDLE__: specifies the RTC handle. - * @param __INTERRUPT__: specifies the RTC Second interrupt sources to be enabled - * This parameter can be any combination of the following values: - * @arg RTC_IT_SEC: Second A interrupt - * @retval None - */ -#define __HAL_RTC_SECOND_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CRH, (__INTERRUPT__)) - -/** - * @brief Disable the RTC Second interrupt. - * @param __HANDLE__: specifies the RTC handle. - * @param __INTERRUPT__: specifies the RTC Second interrupt sources to be disabled. - * This parameter can be any combination of the following values: - * @arg RTC_IT_SEC: Second A interrupt - * @retval None - */ -#define __HAL_RTC_SECOND_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CRH, (__INTERRUPT__)) - -/** - * @brief Check whether the specified RTC Second interrupt has occurred or not. - * @param __HANDLE__: specifies the RTC handle. - * @param __INTERRUPT__: specifies the RTC Second interrupt sources to be enabled or disabled. - * This parameter can be: - * @arg RTC_IT_SEC: Second A interrupt - * @retval None - */ -#define __HAL_RTC_SECOND_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((__HANDLE__)->Instance->CRH)& ((__INTERRUPT__)))) != RESET)? SET : RESET) - -/** - * @brief Get the selected RTC Second's flag status. - * @param __HANDLE__: specifies the RTC handle. - * @param __FLAG__: specifies the RTC Second Flag sources to be enabled or disabled. - * This parameter can be: - * @arg RTC_FLAG_SEC - * @retval None - */ -#define __HAL_RTC_SECOND_GET_FLAG(__HANDLE__, __FLAG__) (((((__HANDLE__)->Instance->CRL) & (__FLAG__)) != RESET)? SET : RESET) - -/** - * @brief Clear the RTC Second's pending flags. - * @param __HANDLE__: specifies the RTC handle. - * @param __FLAG__: specifies the RTC Second Flag sources to be enabled or disabled. - * This parameter can be: - * @arg RTC_FLAG_SEC - * @retval None - */ -#define __HAL_RTC_SECOND_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->CRL) &= ~(__FLAG__) - -/** - * @brief Enable the RTC Overflow interrupt. - * @param __HANDLE__: specifies the RTC handle. - * @param __INTERRUPT__: specifies the RTC Overflow interrupt sources to be enabled - * This parameter can be any combination of the following values: - * @arg RTC_IT_OW: Overflow A interrupt - * @retval None - */ -#define __HAL_RTC_OVERFLOW_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CRH, (__INTERRUPT__)) - -/** - * @brief Disable the RTC Overflow interrupt. - * @param __HANDLE__: specifies the RTC handle. - * @param __INTERRUPT__: specifies the RTC Overflow interrupt sources to be disabled. - * This parameter can be any combination of the following values: - * @arg RTC_IT_OW: Overflow A interrupt - * @retval None - */ -#define __HAL_RTC_OVERFLOW_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CRH, (__INTERRUPT__)) - -/** - * @brief Check whether the specified RTC Overflow interrupt has occurred or not. - * @param __HANDLE__: specifies the RTC handle. - * @param __INTERRUPT__: specifies the RTC Overflow interrupt sources to be enabled or disabled. - * This parameter can be: - * @arg RTC_IT_OW: Overflow A interrupt - * @retval None - */ -#define __HAL_RTC_OVERFLOW_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((__HANDLE__)->Instance->CRH)& ((__INTERRUPT__))) ) != RESET)? SET : RESET) - -/** - * @brief Get the selected RTC Overflow's flag status. - * @param __HANDLE__: specifies the RTC handle. - * @param __FLAG__: specifies the RTC Overflow Flag sources to be enabled or disabled. - * This parameter can be: - * @arg RTC_FLAG_OW - * @retval None - */ -#define __HAL_RTC_OVERFLOW_GET_FLAG(__HANDLE__, __FLAG__) (((((__HANDLE__)->Instance->CRL) & (__FLAG__)) != RESET)? SET : RESET) - -/** - * @brief Clear the RTC Overflow's pending flags. - * @param __HANDLE__: specifies the RTC handle. - * @param __FLAG__: specifies the RTC Overflow Flag sources to be enabled or disabled. - * This parameter can be: - * @arg RTC_FLAG_OW - * @retval None - */ -#define __HAL_RTC_OVERFLOW_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->CRL) = ~(__FLAG__) - -/** - * @} - */ - -/* Exported functions --------------------------------------------------------*/ -/** @addtogroup RTCEx_Exported_Functions - * @{ - */ - -/* RTC Tamper functions *****************************************/ -/** @addtogroup RTCEx_Exported_Functions_Group1 - * @{ - */ -HAL_StatusTypeDef HAL_RTCEx_SetTamper(RTC_HandleTypeDef *hrtc, RTC_TamperTypeDef *sTamper); -HAL_StatusTypeDef HAL_RTCEx_SetTamper_IT(RTC_HandleTypeDef *hrtc, RTC_TamperTypeDef *sTamper); -HAL_StatusTypeDef HAL_RTCEx_DeactivateTamper(RTC_HandleTypeDef *hrtc, uint32_t Tamper); -void HAL_RTCEx_TamperIRQHandler(RTC_HandleTypeDef *hrtc); -void HAL_RTCEx_Tamper1EventCallback(RTC_HandleTypeDef *hrtc); -HAL_StatusTypeDef HAL_RTCEx_PollForTamper1Event(RTC_HandleTypeDef *hrtc, uint32_t Timeout); - -/** - * @} - */ - -/* RTC Second functions *****************************************/ -/** @addtogroup RTCEx_Exported_Functions_Group2 - * @{ - */ -HAL_StatusTypeDef HAL_RTCEx_SetSecond_IT(RTC_HandleTypeDef *hrtc); -HAL_StatusTypeDef HAL_RTCEx_DeactivateSecond(RTC_HandleTypeDef *hrtc); -void HAL_RTCEx_RTCIRQHandler(RTC_HandleTypeDef *hrtc); -void HAL_RTCEx_RTCEventCallback(RTC_HandleTypeDef *hrtc); -void HAL_RTCEx_RTCEventErrorCallback(RTC_HandleTypeDef *hrtc); - -/** - * @} - */ - -/* Extension Control functions ************************************************/ -/** @addtogroup RTCEx_Exported_Functions_Group3 - * @{ - */ -void HAL_RTCEx_BKUPWrite(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister, uint32_t Data); -uint32_t HAL_RTCEx_BKUPRead(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister); - -HAL_StatusTypeDef HAL_RTCEx_SetSmoothCalib(RTC_HandleTypeDef *hrtc, uint32_t SmoothCalibPeriod, uint32_t SmoothCalibPlusPulses, uint32_t SmouthCalibMinusPulsesValue); -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F1xx_HAL_RTC_EX_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc.c b/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc.c deleted file mode 100644 index ca6e6ff..0000000 --- a/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc.c +++ /dev/null @@ -1,1949 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f1xx_hal_rtc.c - * @author MCD Application Team - * @brief RTC HAL module driver. - * This file provides firmware functions to manage the following - * functionalities of the Real Time Clock (RTC) peripheral: - * + Initialization and de-initialization functions - * + RTC Time and Date functions - * + RTC Alarm functions - * + Peripheral Control functions - * + Peripheral State functions - * - @verbatim - ============================================================================== - ##### How to use this driver ##### - ================================================================== - [..] - (+) Enable the RTC domain access (see description in the section above). - (+) Configure the RTC Prescaler (Asynchronous prescaler to generate RTC 1Hz time base) - using the HAL_RTC_Init() function. - - *** Time and Date configuration *** - =================================== - [..] - (+) To configure the RTC Calendar (Time and Date) use the HAL_RTC_SetTime() - and HAL_RTC_SetDate() functions. - (+) To read the RTC Calendar, use the HAL_RTC_GetTime() and HAL_RTC_GetDate() functions. - - *** Alarm configuration *** - =========================== - [..] - (+) To configure the RTC Alarm use the HAL_RTC_SetAlarm() function. - You can also configure the RTC Alarm with interrupt mode using the HAL_RTC_SetAlarm_IT() function. - (+) To read the RTC Alarm, use the HAL_RTC_GetAlarm() function. - - *** Tamper configuration *** - ============================ - [..] - (+) Enable the RTC Tamper and configure the Tamper Level using the - HAL_RTCEx_SetTamper() function. You can configure RTC Tamper with interrupt - mode using HAL_RTCEx_SetTamper_IT() function. - (+) The TAMPER1 alternate function can be mapped to PC13 - - *** Backup Data Registers configuration *** - =========================================== - [..] - (+) To write to the RTC Backup Data registers, use the HAL_RTCEx_BKUPWrite() - function. - (+) To read the RTC Backup Data registers, use the HAL_RTCEx_BKUPRead() - function. - - ##### WARNING: Drivers Restrictions ##### - ================================================================== - [..] RTC version used on STM32F1 families is version V1. All the features supported by V2 - (other families) will be not supported on F1. - [..] As on V2, main RTC features are managed by HW. But on F1, date feature is completely - managed by SW. - [..] Then, there are some restrictions compared to other families: - (+) Only format 24 hours supported in HAL (format 12 hours not supported) - (+) Date is saved in SRAM. Then, when MCU is in STOP or STANDBY mode, date will be lost. - User should implement a way to save date before entering in low power mode (an - example is provided with firmware package based on backup registers) - (+) Date is automatically updated each time a HAL_RTC_GetTime or HAL_RTC_GetDate is called. - (+) Alarm detection is limited to 1 day. It will expire only 1 time (no alarm repetition, need - to program a new alarm) - - ##### Backup Domain Operating Condition ##### - ============================================================================== - [..] The real-time clock (RTC) and the RTC backup registers can be powered - from the VBAT voltage when the main VDD supply is powered off. - To retain the content of the RTC backup registers and supply the RTC - when VDD is turned off, VBAT pin can be connected to an optional - standby voltage supplied by a battery or by another source. - - [..] To allow the RTC operating even when the main digital supply (VDD) is turned - off, the VBAT pin powers the following blocks: - (#) The RTC - (#) The LSE oscillator - (#) The backup SRAM when the low power backup regulator is enabled - (#) PC13 to PC15 I/Os, plus PI8 I/O (when available) - - [..] When the backup domain is supplied by VDD (analog switch connected to VDD), - the following pins are available: - (+) PC13 can be used as a Tamper pin - - [..] When the backup domain is supplied by VBAT (analog switch connected to VBAT - because VDD is not present), the following pins are available: - (+) PC13 can be used as the Tamper pin - - ##### Backup Domain Reset ##### - ================================================================== - [..] The backup domain reset sets all RTC registers and the RCC_BDCR register - to their reset values. - [..] A backup domain reset is generated when one of the following events occurs: - (#) Software reset, triggered by setting the BDRST bit in the - RCC Backup domain control register (RCC_BDCR). - (#) VDD or VBAT power on, if both supplies have previously been powered off. - (#) Tamper detection event resets all data backup registers. - - ##### Backup Domain Access ##### - ================================================================== - [..] After reset, the backup domain (RTC registers, RTC backup data - registers and backup SRAM) is protected against possible unwanted write - accesses. - [..] To enable access to the RTC Domain and RTC registers, proceed as follows: - (+) Call the function HAL_RCCEx_PeriphCLKConfig in using RCC_PERIPHCLK_RTC for - PeriphClockSelection and select RTCClockSelection (LSE, LSI or HSE) - (+) Enable the BKP clock in using __HAL_RCC_BKP_CLK_ENABLE() - - ##### RTC and low power modes ##### - ================================================================== - [..] The MCU can be woken up from a low power mode by an RTC alternate - function. - [..] The RTC alternate functions are the RTC alarms (Alarm A), - and RTC tamper event detection. - These RTC alternate functions can wake up the system from the Stop and - Standby low power modes. - [..] The system can also wake up from low power modes without depending - on an external interrupt (Auto-wakeup mode), by using the RTC alarm. - - *** Callback registration *** - ============================================= - [..] - The compilation define USE_HAL_RTC_REGISTER_CALLBACKS when set to 1 - allows the user to configure dynamically the driver callbacks. - Use Function @ref HAL_RTC_RegisterCallback() to register an interrupt callback. - - [..] - Function @ref HAL_RTC_RegisterCallback() allows to register following callbacks: - (+) AlarmAEventCallback : RTC Alarm A Event callback. - (+) Tamper1EventCallback : RTC Tamper 1 Event callback. - (+) MspInitCallback : RTC MspInit callback. - (+) MspDeInitCallback : RTC MspDeInit callback. - [..] - This function takes as parameters the HAL peripheral handle, the Callback ID - and a pointer to the user callback function. - - [..] - Use function @ref HAL_RTC_UnRegisterCallback() to reset a callback to the default - weak function. - @ref HAL_RTC_UnRegisterCallback() takes as parameters the HAL peripheral handle, - and the Callback ID. - This function allows to reset following callbacks: - (+) AlarmAEventCallback : RTC Alarm A Event callback. - (+) Tamper1EventCallback : RTC Tamper 1 Event callback. - (+) MspInitCallback : RTC MspInit callback. - (+) MspDeInitCallback : RTC MspDeInit callback. - [..] - By default, after the @ref HAL_RTC_Init() and when the state is HAL_RTC_STATE_RESET, - all callbacks are set to the corresponding weak functions : - example @ref AlarmAEventCallback(). - Exception done for MspInit and MspDeInit callbacks that are reset to the legacy weak function - in the @ref HAL_RTC_Init()/@ref HAL_RTC_DeInit() only when these callbacks are null - (not registered beforehand). - If not, MspInit or MspDeInit are not null, @ref HAL_RTC_Init()/@ref HAL_RTC_DeInit() - keep and use the user MspInit/MspDeInit callbacks (registered beforehand) - [..] - Callbacks can be registered/unregistered in HAL_RTC_STATE_READY state only. - Exception done MspInit/MspDeInit that can be registered/unregistered - in HAL_RTC_STATE_READY or HAL_RTC_STATE_RESET state, - thus registered (user) MspInit/DeInit callbacks can be used during the Init/DeInit. - In that case first register the MspInit/MspDeInit user callbacks - using @ref HAL_RTC_RegisterCallback() before calling @ref HAL_RTC_DeInit() - or @ref HAL_RTC_Init() function. - [..] - When The compilation define USE_HAL_RTC_REGISTER_CALLBACKS is set to 0 or - not defined, the callback registration feature is not available and all callbacks - are set to the corresponding weak functions. - @endverbatim - ****************************************************************************** - * @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 - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f1xx_hal.h" - -/** @addtogroup STM32F1xx_HAL_Driver - * @{ - */ - -/** @defgroup RTC RTC - * @brief RTC HAL module driver - * @{ - */ - -#ifdef HAL_RTC_MODULE_ENABLED - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/** @defgroup RTC_Private_Constants RTC Private Constants - * @{ - */ -#define RTC_ALARM_RESETVALUE_REGISTER (uint16_t)0xFFFF -#define RTC_ALARM_RESETVALUE 0xFFFFFFFFU - -/** - * @} - */ - -/* Private macro -------------------------------------------------------------*/ -/** @defgroup RTC_Private_Macros RTC Private Macros - * @{ - */ -/** - * @} - */ - -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/** @defgroup RTC_Private_Functions RTC Private Functions - * @{ - */ -static uint32_t RTC_ReadTimeCounter(RTC_HandleTypeDef *hrtc); -static HAL_StatusTypeDef RTC_WriteTimeCounter(RTC_HandleTypeDef *hrtc, uint32_t TimeCounter); -static uint32_t RTC_ReadAlarmCounter(RTC_HandleTypeDef *hrtc); -static HAL_StatusTypeDef RTC_WriteAlarmCounter(RTC_HandleTypeDef *hrtc, uint32_t AlarmCounter); -static HAL_StatusTypeDef RTC_EnterInitMode(RTC_HandleTypeDef *hrtc); -static HAL_StatusTypeDef RTC_ExitInitMode(RTC_HandleTypeDef *hrtc); -static uint8_t RTC_ByteToBcd2(uint8_t Value); -static uint8_t RTC_Bcd2ToByte(uint8_t Value); -static uint8_t RTC_IsLeapYear(uint16_t nYear); -static void RTC_DateUpdate(RTC_HandleTypeDef *hrtc, uint32_t DayElapsed); -static uint8_t RTC_WeekDayNum(uint32_t nYear, uint8_t nMonth, uint8_t nDay); - -/** - * @} - */ - -/* Private functions ---------------------------------------------------------*/ -/** @defgroup RTC_Exported_Functions RTC Exported Functions - * @{ - */ - -/** @defgroup RTC_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and de-initialization functions ##### - =============================================================================== - [..] This section provides functions allowing to initialize and configure the - RTC Prescaler (Asynchronous), disable RTC registers Write protection, - enter and exit the RTC initialization mode, - RTC registers synchronization check and reference clock detection enable. - (#) The RTC Prescaler should be programmed to generate the RTC 1Hz time base. - (#) All RTC registers are Write protected. Writing to the RTC registers - is enabled by setting the CNF bit in the RTC_CRL register. - (#) To read the calendar after wakeup from low power modes (Standby or Stop) - the software must first wait for the RSF bit (Register Synchronized Flag) - in the RTC_CRL register to be set by hardware. - The HAL_RTC_WaitForSynchro() function implements the above software - sequence (RSF clear and RSF check). - -@endverbatim - * @{ - */ - -/** - * @brief Initializes the RTC peripheral - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTC_Init(RTC_HandleTypeDef *hrtc) -{ - uint32_t prescaler = 0U; - /* Check input parameters */ - if (hrtc == NULL) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_RTC_ALL_INSTANCE(hrtc->Instance)); - assert_param(IS_RTC_CALIB_OUTPUT(hrtc->Init.OutPut)); - assert_param(IS_RTC_ASYNCH_PREDIV(hrtc->Init.AsynchPrediv)); - -#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) - if (hrtc->State == HAL_RTC_STATE_RESET) - { - /* Allocate lock resource and initialize it */ - hrtc->Lock = HAL_UNLOCKED; - - hrtc->AlarmAEventCallback = HAL_RTC_AlarmAEventCallback; /* Legacy weak AlarmAEventCallback */ - hrtc->Tamper1EventCallback = HAL_RTCEx_Tamper1EventCallback; /* Legacy weak Tamper1EventCallback */ - - if (hrtc->MspInitCallback == NULL) - { - hrtc->MspInitCallback = HAL_RTC_MspInit; - } - /* Init the low level hardware */ - hrtc->MspInitCallback(hrtc); - - if (hrtc->MspDeInitCallback == NULL) - { - hrtc->MspDeInitCallback = HAL_RTC_MspDeInit; - } - } -#else - if (hrtc->State == HAL_RTC_STATE_RESET) - { - /* Allocate lock resource and initialize it */ - hrtc->Lock = HAL_UNLOCKED; - - /* Initialize RTC MSP */ - HAL_RTC_MspInit(hrtc); - } -#endif /* (USE_HAL_RTC_REGISTER_CALLBACKS) */ - - /* Set RTC state */ - hrtc->State = HAL_RTC_STATE_BUSY; - - /* Waiting for synchro */ - if (HAL_RTC_WaitForSynchro(hrtc) != HAL_OK) - { - /* Set RTC state */ - hrtc->State = HAL_RTC_STATE_ERROR; - - return HAL_ERROR; - } - - /* Set Initialization mode */ - if (RTC_EnterInitMode(hrtc) != HAL_OK) - { - /* Set RTC state */ - hrtc->State = HAL_RTC_STATE_ERROR; - - return HAL_ERROR; - } - else - { - /* Clear Flags Bits */ - CLEAR_BIT(hrtc->Instance->CRL, (RTC_FLAG_OW | RTC_FLAG_ALRAF | RTC_FLAG_SEC)); - - if (hrtc->Init.OutPut != RTC_OUTPUTSOURCE_NONE) - { - /* Disable the selected Tamper pin */ - CLEAR_BIT(BKP->CR, BKP_CR_TPE); - } - - /* Set the signal which will be routed to RTC Tamper pin*/ - MODIFY_REG(BKP->RTCCR, (BKP_RTCCR_CCO | BKP_RTCCR_ASOE | BKP_RTCCR_ASOS), hrtc->Init.OutPut); - - if (hrtc->Init.AsynchPrediv != RTC_AUTO_1_SECOND) - { - /* RTC Prescaler provided directly by end-user*/ - prescaler = hrtc->Init.AsynchPrediv; - } - else - { - /* RTC Prescaler will be automatically calculated to get 1 second timebase */ - /* Get the RTCCLK frequency */ - prescaler = HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_RTC); - - /* Check that RTC clock is enabled*/ - if (prescaler == 0U) - { - /* Should not happen. Frequency is not available*/ - hrtc->State = HAL_RTC_STATE_ERROR; - return HAL_ERROR; - } - else - { - /* RTC period = RTCCLK/(RTC_PR + 1) */ - prescaler = prescaler - 1U; - } - } - - /* Configure the RTC_PRLH / RTC_PRLL */ - MODIFY_REG(hrtc->Instance->PRLH, RTC_PRLH_PRL, (prescaler >> 16U)); - MODIFY_REG(hrtc->Instance->PRLL, RTC_PRLL_PRL, (prescaler & RTC_PRLL_PRL)); - - /* Wait for synchro */ - if (RTC_ExitInitMode(hrtc) != HAL_OK) - { - hrtc->State = HAL_RTC_STATE_ERROR; - - return HAL_ERROR; - } - - /* Initialize date to 1st of January 2000 */ - hrtc->DateToUpdate.Year = 0x00U; - hrtc->DateToUpdate.Month = RTC_MONTH_JANUARY; - hrtc->DateToUpdate.Date = 0x01U; - - /* Set RTC state */ - hrtc->State = HAL_RTC_STATE_READY; - - return HAL_OK; - } -} - -/** - * @brief DeInitializes the RTC peripheral - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @note This function does not reset the RTC Backup Data registers. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTC_DeInit(RTC_HandleTypeDef *hrtc) -{ - /* Check input parameters */ - if (hrtc == NULL) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_RTC_ALL_INSTANCE(hrtc->Instance)); - - /* Set RTC state */ - hrtc->State = HAL_RTC_STATE_BUSY; - - /* Set Initialization mode */ - if (RTC_EnterInitMode(hrtc) != HAL_OK) - { - /* Set RTC state */ - hrtc->State = HAL_RTC_STATE_ERROR; - - /* Release Lock */ - __HAL_UNLOCK(hrtc); - - return HAL_ERROR; - } - else - { - CLEAR_REG(hrtc->Instance->CNTL); - CLEAR_REG(hrtc->Instance->CNTH); - WRITE_REG(hrtc->Instance->PRLL, 0x00008000U); - CLEAR_REG(hrtc->Instance->PRLH); - - /* Reset All CRH/CRL bits */ - CLEAR_REG(hrtc->Instance->CRH); - CLEAR_REG(hrtc->Instance->CRL); - - if (RTC_ExitInitMode(hrtc) != HAL_OK) - { - hrtc->State = HAL_RTC_STATE_ERROR; - - /* Process Unlocked */ - __HAL_UNLOCK(hrtc); - - return HAL_ERROR; - } - } - - /* Wait for synchro*/ - HAL_RTC_WaitForSynchro(hrtc); - - /* Clear RSF flag */ - CLEAR_BIT(hrtc->Instance->CRL, RTC_FLAG_RSF); - -#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) - if (hrtc->MspDeInitCallback == NULL) - { - hrtc->MspDeInitCallback = HAL_RTC_MspDeInit; - } - - /* DeInit the low level hardware: CLOCK, NVIC.*/ - hrtc->MspDeInitCallback(hrtc); - -#else - /* De-Initialize RTC MSP */ - HAL_RTC_MspDeInit(hrtc); -#endif /* (USE_HAL_RTC_REGISTER_CALLBACKS) */ - - hrtc->State = HAL_RTC_STATE_RESET; - - /* Release Lock */ - __HAL_UNLOCK(hrtc); - - return HAL_OK; -} - -#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) -/** - * @brief Register a User RTC Callback - * To be used instead of the weak predefined callback - * @param hrtc RTC handle - * @param CallbackID ID of the callback to be registered - * This parameter can be one of the following values: - * @arg @ref HAL_RTC_ALARM_A_EVENT_CB_ID Alarm A Event Callback ID - * @arg @ref HAL_RTC_TAMPER1_EVENT_CB_ID Tamper 1 Callback ID - * @arg @ref HAL_RTC_MSPINIT_CB_ID Msp Init callback ID - * @arg @ref HAL_RTC_MSPDEINIT_CB_ID Msp DeInit callback ID - * @param pCallback pointer to the Callback function - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTC_RegisterCallback(RTC_HandleTypeDef *hrtc, HAL_RTC_CallbackIDTypeDef CallbackID, pRTC_CallbackTypeDef pCallback) -{ - HAL_StatusTypeDef status = HAL_OK; - - if (pCallback == NULL) - { - return HAL_ERROR; - } - - /* Process locked */ - __HAL_LOCK(hrtc); - - if (HAL_RTC_STATE_READY == hrtc->State) - { - switch (CallbackID) - { - case HAL_RTC_ALARM_A_EVENT_CB_ID : - hrtc->AlarmAEventCallback = pCallback; - break; - - case HAL_RTC_TAMPER1_EVENT_CB_ID : - hrtc->Tamper1EventCallback = pCallback; - break; - - case HAL_RTC_MSPINIT_CB_ID : - hrtc->MspInitCallback = pCallback; - break; - - case HAL_RTC_MSPDEINIT_CB_ID : - hrtc->MspDeInitCallback = pCallback; - break; - - default : - /* Return error status */ - status = HAL_ERROR; - break; - } - } - else if (HAL_RTC_STATE_RESET == hrtc->State) - { - switch (CallbackID) - { - case HAL_RTC_MSPINIT_CB_ID : - hrtc->MspInitCallback = pCallback; - break; - - case HAL_RTC_MSPDEINIT_CB_ID : - hrtc->MspDeInitCallback = pCallback; - break; - - default : - /* Return error status */ - status = HAL_ERROR; - break; - } - } - else - { - /* Return error status */ - status = HAL_ERROR; - } - - /* Release Lock */ - __HAL_UNLOCK(hrtc); - - return status; -} - -/** - * @brief Unregister an RTC Callback - * RTC callabck is redirected to the weak predefined callback - * @param hrtc RTC handle - * @param CallbackID ID of the callback to be unregistered - * This parameter can be one of the following values: - * @arg @ref HAL_RTC_ALARM_A_EVENT_CB_ID Alarm A Event Callback ID - * @arg @ref HAL_RTC_TAMPER1_EVENT_CB_ID Tamper 1 Callback ID - * @arg @ref HAL_RTC_MSPINIT_CB_ID Msp Init callback ID - * @arg @ref HAL_RTC_MSPDEINIT_CB_ID Msp DeInit callback ID - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTC_UnRegisterCallback(RTC_HandleTypeDef *hrtc, HAL_RTC_CallbackIDTypeDef CallbackID) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Process locked */ - __HAL_LOCK(hrtc); - - if (HAL_RTC_STATE_READY == hrtc->State) - { - switch (CallbackID) - { - case HAL_RTC_ALARM_A_EVENT_CB_ID : - hrtc->AlarmAEventCallback = HAL_RTC_AlarmAEventCallback; /* Legacy weak AlarmAEventCallback */ - break; - - case HAL_RTC_TAMPER1_EVENT_CB_ID : - hrtc->Tamper1EventCallback = HAL_RTCEx_Tamper1EventCallback; /* Legacy weak Tamper1EventCallback */ - break; - - case HAL_RTC_MSPINIT_CB_ID : - hrtc->MspInitCallback = HAL_RTC_MspInit; - break; - - case HAL_RTC_MSPDEINIT_CB_ID : - hrtc->MspDeInitCallback = HAL_RTC_MspDeInit; - break; - - default : - /* Return error status */ - status = HAL_ERROR; - break; - } - } - else if (HAL_RTC_STATE_RESET == hrtc->State) - { - switch (CallbackID) - { - case HAL_RTC_MSPINIT_CB_ID : - hrtc->MspInitCallback = HAL_RTC_MspInit; - break; - - case HAL_RTC_MSPDEINIT_CB_ID : - hrtc->MspDeInitCallback = HAL_RTC_MspDeInit; - break; - - default : - /* Return error status */ - status = HAL_ERROR; - break; - } - } - else - { - /* Return error status */ - status = HAL_ERROR; - } - - /* Release Lock */ - __HAL_UNLOCK(hrtc); - - return status; -} -#endif /* USE_HAL_RTC_REGISTER_CALLBACKS */ - -/** - * @brief Initializes the RTC MSP. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval None - */ -__weak void HAL_RTC_MspInit(RTC_HandleTypeDef *hrtc) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(hrtc); - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_RTC_MspInit could be implemented in the user file - */ -} - -/** - * @brief DeInitializes the RTC MSP. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval None - */ -__weak void HAL_RTC_MspDeInit(RTC_HandleTypeDef *hrtc) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(hrtc); - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_RTC_MspDeInit could be implemented in the user file - */ -} - -/** - * @} - */ - -/** @defgroup RTC_Exported_Functions_Group2 Time and Date functions - * @brief RTC Time and Date functions - * -@verbatim - =============================================================================== - ##### RTC Time and Date functions ##### - =============================================================================== - - [..] This section provides functions allowing to configure Time and Date features - -@endverbatim - * @{ - */ - -/** - * @brief Sets RTC current time. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @param sTime: Pointer to Time structure - * @param Format: Specifies the format of the entered parameters. - * This parameter can be one of the following values: - * @arg RTC_FORMAT_BIN: Binary data format - * @arg RTC_FORMAT_BCD: BCD data format - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format) -{ - uint32_t counter_time = 0U, counter_alarm = 0U; - - /* Check input parameters */ - if ((hrtc == NULL) || (sTime == NULL)) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(Format)); - - /* Process Locked */ - __HAL_LOCK(hrtc); - - hrtc->State = HAL_RTC_STATE_BUSY; - - if (Format == RTC_FORMAT_BIN) - { - assert_param(IS_RTC_HOUR24(sTime->Hours)); - assert_param(IS_RTC_MINUTES(sTime->Minutes)); - assert_param(IS_RTC_SECONDS(sTime->Seconds)); - - counter_time = (uint32_t)(((uint32_t)sTime->Hours * 3600U) + \ - ((uint32_t)sTime->Minutes * 60U) + \ - ((uint32_t)sTime->Seconds)); - } - else - { - assert_param(IS_RTC_HOUR24(RTC_Bcd2ToByte(sTime->Hours))); - assert_param(IS_RTC_MINUTES(RTC_Bcd2ToByte(sTime->Minutes))); - assert_param(IS_RTC_SECONDS(RTC_Bcd2ToByte(sTime->Seconds))); - - counter_time = (((uint32_t)(RTC_Bcd2ToByte(sTime->Hours)) * 3600U) + \ - ((uint32_t)(RTC_Bcd2ToByte(sTime->Minutes)) * 60U) + \ - ((uint32_t)(RTC_Bcd2ToByte(sTime->Seconds)))); - } - - /* Write time counter in RTC registers */ - if (RTC_WriteTimeCounter(hrtc, counter_time) != HAL_OK) - { - /* Set RTC state */ - hrtc->State = HAL_RTC_STATE_ERROR; - - /* Process Unlocked */ - __HAL_UNLOCK(hrtc); - - return HAL_ERROR; - } - else - { - /* Clear Second and overflow flags */ - CLEAR_BIT(hrtc->Instance->CRL, (RTC_FLAG_SEC | RTC_FLAG_OW)); - - /* Read current Alarm counter in RTC registers */ - counter_alarm = RTC_ReadAlarmCounter(hrtc); - - /* Set again alarm to match with new time if enabled */ - if (counter_alarm != RTC_ALARM_RESETVALUE) - { - if (counter_alarm < counter_time) - { - /* Add 1 day to alarm counter*/ - counter_alarm += (uint32_t)(24U * 3600U); - - /* Write new Alarm counter in RTC registers */ - if (RTC_WriteAlarmCounter(hrtc, counter_alarm) != HAL_OK) - { - /* Set RTC state */ - hrtc->State = HAL_RTC_STATE_ERROR; - - /* Process Unlocked */ - __HAL_UNLOCK(hrtc); - - return HAL_ERROR; - } - } - } - - hrtc->State = HAL_RTC_STATE_READY; - - __HAL_UNLOCK(hrtc); - - return HAL_OK; - } -} - -/** - * @brief Gets RTC current time. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @param sTime: Pointer to Time structure - * @param Format: Specifies the format of the entered parameters. - * This parameter can be one of the following values: - * @arg RTC_FORMAT_BIN: Binary data format - * @arg RTC_FORMAT_BCD: BCD data format - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format) -{ - uint32_t counter_time = 0U, counter_alarm = 0U, days_elapsed = 0U, hours = 0U; - - /* Check input parameters */ - if ((hrtc == NULL) || (sTime == NULL)) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(Format)); - - /* Check if counter overflow occurred */ - if (__HAL_RTC_OVERFLOW_GET_FLAG(hrtc, RTC_FLAG_OW)) - { - return HAL_ERROR; - } - - /* Read the time counter*/ - counter_time = RTC_ReadTimeCounter(hrtc); - - /* Fill the structure fields with the read parameters */ - hours = counter_time / 3600U; - sTime->Minutes = (uint8_t)((counter_time % 3600U) / 60U); - sTime->Seconds = (uint8_t)((counter_time % 3600U) % 60U); - - if (hours >= 24U) - { - /* Get number of days elapsed from last calculation */ - days_elapsed = (hours / 24U); - - /* Set Hours in RTC_TimeTypeDef structure*/ - sTime->Hours = (hours % 24U); - - /* Read Alarm counter in RTC registers */ - counter_alarm = RTC_ReadAlarmCounter(hrtc); - - /* Calculate remaining time to reach alarm (only if set and not yet expired)*/ - if ((counter_alarm != RTC_ALARM_RESETVALUE) && (counter_alarm > counter_time)) - { - counter_alarm -= counter_time; - } - else - { - /* In case of counter_alarm < counter_time */ - /* Alarm expiration already occurred but alarm not deactivated */ - counter_alarm = RTC_ALARM_RESETVALUE; - } - - /* Set updated time in decreasing counter by number of days elapsed */ - counter_time -= (days_elapsed * 24U * 3600U); - - /* Write time counter in RTC registers */ - if (RTC_WriteTimeCounter(hrtc, counter_time) != HAL_OK) - { - return HAL_ERROR; - } - - /* Set updated alarm to be set */ - if (counter_alarm != RTC_ALARM_RESETVALUE) - { - counter_alarm += counter_time; - - /* Write time counter in RTC registers */ - if (RTC_WriteAlarmCounter(hrtc, counter_alarm) != HAL_OK) - { - return HAL_ERROR; - } - } - else - { - /* Alarm already occurred. Set it to reset values to avoid unexpected expiration */ - if (RTC_WriteAlarmCounter(hrtc, counter_alarm) != HAL_OK) - { - return HAL_ERROR; - } - } - - /* Update date */ - RTC_DateUpdate(hrtc, days_elapsed); - } - else - { - sTime->Hours = hours; - } - - /* Check the input parameters format */ - if (Format != RTC_FORMAT_BIN) - { - /* Convert the time structure parameters to BCD format */ - sTime->Hours = (uint8_t)RTC_ByteToBcd2(sTime->Hours); - sTime->Minutes = (uint8_t)RTC_ByteToBcd2(sTime->Minutes); - sTime->Seconds = (uint8_t)RTC_ByteToBcd2(sTime->Seconds); - } - - return HAL_OK; -} - - -/** - * @brief Sets RTC current date. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @param sDate: Pointer to date structure - * @param Format: specifies the format of the entered parameters. - * This parameter can be one of the following values: - * @arg RTC_FORMAT_BIN: Binary data format - * @arg RTC_FORMAT_BCD: BCD data format - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format) -{ - uint32_t counter_time = 0U, counter_alarm = 0U, hours = 0U; - - /* Check input parameters */ - if ((hrtc == NULL) || (sDate == NULL)) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(Format)); - - /* Process Locked */ - __HAL_LOCK(hrtc); - - hrtc->State = HAL_RTC_STATE_BUSY; - - if (Format == RTC_FORMAT_BIN) - { - assert_param(IS_RTC_YEAR(sDate->Year)); - assert_param(IS_RTC_MONTH(sDate->Month)); - assert_param(IS_RTC_DATE(sDate->Date)); - - /* Change the current date */ - hrtc->DateToUpdate.Year = sDate->Year; - hrtc->DateToUpdate.Month = sDate->Month; - hrtc->DateToUpdate.Date = sDate->Date; - } - else - { - assert_param(IS_RTC_YEAR(RTC_Bcd2ToByte(sDate->Year))); - assert_param(IS_RTC_MONTH(RTC_Bcd2ToByte(sDate->Month))); - assert_param(IS_RTC_DATE(RTC_Bcd2ToByte(sDate->Date))); - - /* Change the current date */ - hrtc->DateToUpdate.Year = RTC_Bcd2ToByte(sDate->Year); - hrtc->DateToUpdate.Month = RTC_Bcd2ToByte(sDate->Month); - hrtc->DateToUpdate.Date = RTC_Bcd2ToByte(sDate->Date); - } - - /* WeekDay set by user can be ignored because automatically calculated */ - hrtc->DateToUpdate.WeekDay = RTC_WeekDayNum(hrtc->DateToUpdate.Year, hrtc->DateToUpdate.Month, hrtc->DateToUpdate.Date); - sDate->WeekDay = hrtc->DateToUpdate.WeekDay; - - /* Reset time to be aligned on the same day */ - /* Read the time counter*/ - counter_time = RTC_ReadTimeCounter(hrtc); - - /* Fill the structure fields with the read parameters */ - hours = counter_time / 3600U; - if (hours > 24U) - { - /* Set updated time in decreasing counter by number of days elapsed */ - counter_time -= ((hours / 24U) * 24U * 3600U); - /* Write time counter in RTC registers */ - if (RTC_WriteTimeCounter(hrtc, counter_time) != HAL_OK) - { - /* Set RTC state */ - hrtc->State = HAL_RTC_STATE_ERROR; - - /* Process Unlocked */ - __HAL_UNLOCK(hrtc); - - return HAL_ERROR; - } - - /* Read current Alarm counter in RTC registers */ - counter_alarm = RTC_ReadAlarmCounter(hrtc); - - /* Set again alarm to match with new time if enabled */ - if (counter_alarm != RTC_ALARM_RESETVALUE) - { - if (counter_alarm < counter_time) - { - /* Add 1 day to alarm counter*/ - counter_alarm += (uint32_t)(24U * 3600U); - - /* Write new Alarm counter in RTC registers */ - if (RTC_WriteAlarmCounter(hrtc, counter_alarm) != HAL_OK) - { - /* Set RTC state */ - hrtc->State = HAL_RTC_STATE_ERROR; - - /* Process Unlocked */ - __HAL_UNLOCK(hrtc); - - return HAL_ERROR; - } - } - } - - - } - - hrtc->State = HAL_RTC_STATE_READY ; - - /* Process Unlocked */ - __HAL_UNLOCK(hrtc); - - return HAL_OK; -} - -/** - * @brief Gets RTC current date. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @param sDate: Pointer to Date structure - * @param Format: Specifies the format of the entered parameters. - * This parameter can be one of the following values: - * @arg RTC_FORMAT_BIN: Binary data format - * @arg RTC_FORMAT_BCD: BCD data format - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format) -{ - RTC_TimeTypeDef stime = {0U}; - - /* Check input parameters */ - if ((hrtc == NULL) || (sDate == NULL)) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(Format)); - - /* Call HAL_RTC_GetTime function to update date if counter higher than 24 hours */ - if (HAL_RTC_GetTime(hrtc, &stime, RTC_FORMAT_BIN) != HAL_OK) - { - return HAL_ERROR; - } - - /* Fill the structure fields with the read parameters */ - sDate->WeekDay = hrtc->DateToUpdate.WeekDay; - sDate->Year = hrtc->DateToUpdate.Year; - sDate->Month = hrtc->DateToUpdate.Month; - sDate->Date = hrtc->DateToUpdate.Date; - - /* Check the input parameters format */ - if (Format != RTC_FORMAT_BIN) - { - /* Convert the date structure parameters to BCD format */ - sDate->Year = (uint8_t)RTC_ByteToBcd2(sDate->Year); - sDate->Month = (uint8_t)RTC_ByteToBcd2(sDate->Month); - sDate->Date = (uint8_t)RTC_ByteToBcd2(sDate->Date); - } - return HAL_OK; -} - -/** - * @} - */ - -/** @defgroup RTC_Exported_Functions_Group3 Alarm functions - * @brief RTC Alarm functions - * -@verbatim - =============================================================================== - ##### RTC Alarm functions ##### - =============================================================================== - - [..] This section provides functions allowing to configure Alarm feature - -@endverbatim - * @{ - */ - -/** - * @brief Sets the specified RTC Alarm. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @param sAlarm: Pointer to Alarm structure - * @param Format: Specifies the format of the entered parameters. - * This parameter can be one of the following values: - * @arg RTC_FORMAT_BIN: Binary data format - * @arg RTC_FORMAT_BCD: BCD data format - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTC_SetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format) -{ - uint32_t counter_alarm = 0U, counter_time; - RTC_TimeTypeDef stime = {0U}; - - /* Check input parameters */ - if ((hrtc == NULL) || (sAlarm == NULL)) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(Format)); - assert_param(IS_RTC_ALARM(sAlarm->Alarm)); - - /* Process Locked */ - __HAL_LOCK(hrtc); - - hrtc->State = HAL_RTC_STATE_BUSY; - - /* Call HAL_RTC_GetTime function to update date if counter higher than 24 hours */ - if (HAL_RTC_GetTime(hrtc, &stime, RTC_FORMAT_BIN) != HAL_OK) - { - return HAL_ERROR; - } - - /* Convert time in seconds */ - counter_time = (uint32_t)(((uint32_t)stime.Hours * 3600U) + \ - ((uint32_t)stime.Minutes * 60U) + \ - ((uint32_t)stime.Seconds)); - - if (Format == RTC_FORMAT_BIN) - { - assert_param(IS_RTC_HOUR24(sAlarm->AlarmTime.Hours)); - assert_param(IS_RTC_MINUTES(sAlarm->AlarmTime.Minutes)); - assert_param(IS_RTC_SECONDS(sAlarm->AlarmTime.Seconds)); - - counter_alarm = (uint32_t)(((uint32_t)sAlarm->AlarmTime.Hours * 3600U) + \ - ((uint32_t)sAlarm->AlarmTime.Minutes * 60U) + \ - ((uint32_t)sAlarm->AlarmTime.Seconds)); - } - else - { - assert_param(IS_RTC_HOUR24(RTC_Bcd2ToByte(sAlarm->AlarmTime.Hours))); - assert_param(IS_RTC_MINUTES(RTC_Bcd2ToByte(sAlarm->AlarmTime.Minutes))); - assert_param(IS_RTC_SECONDS(RTC_Bcd2ToByte(sAlarm->AlarmTime.Seconds))); - - counter_alarm = (((uint32_t)(RTC_Bcd2ToByte(sAlarm->AlarmTime.Hours)) * 3600U) + \ - ((uint32_t)(RTC_Bcd2ToByte(sAlarm->AlarmTime.Minutes)) * 60U) + \ - ((uint32_t)RTC_Bcd2ToByte(sAlarm->AlarmTime.Seconds))); - } - - /* Check that requested alarm should expire in the same day (otherwise add 1 day) */ - if (counter_alarm < counter_time) - { - /* Add 1 day to alarm counter*/ - counter_alarm += (uint32_t)(24U * 3600U); - } - - /* Write Alarm counter in RTC registers */ - if (RTC_WriteAlarmCounter(hrtc, counter_alarm) != HAL_OK) - { - /* Set RTC state */ - hrtc->State = HAL_RTC_STATE_ERROR; - - /* Process Unlocked */ - __HAL_UNLOCK(hrtc); - - return HAL_ERROR; - } - else - { - hrtc->State = HAL_RTC_STATE_READY; - - __HAL_UNLOCK(hrtc); - - return HAL_OK; - } -} - -/** - * @brief Sets the specified RTC Alarm with Interrupt - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @param sAlarm: Pointer to Alarm structure - * @param Format: Specifies the format of the entered parameters. - * This parameter can be one of the following values: - * @arg RTC_FORMAT_BIN: Binary data format - * @arg RTC_FORMAT_BCD: BCD data format - * @note The HAL_RTC_SetTime() must be called before enabling the Alarm feature. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTC_SetAlarm_IT(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format) -{ - uint32_t counter_alarm = 0U, counter_time; - RTC_TimeTypeDef stime = {0U}; - - /* Check input parameters */ - if ((hrtc == NULL) || (sAlarm == NULL)) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(Format)); - assert_param(IS_RTC_ALARM(sAlarm->Alarm)); - - /* Process Locked */ - __HAL_LOCK(hrtc); - - hrtc->State = HAL_RTC_STATE_BUSY; - - /* Call HAL_RTC_GetTime function to update date if counter higher than 24 hours */ - if (HAL_RTC_GetTime(hrtc, &stime, RTC_FORMAT_BIN) != HAL_OK) - { - return HAL_ERROR; - } - - /* Convert time in seconds */ - counter_time = (uint32_t)(((uint32_t)stime.Hours * 3600U) + \ - ((uint32_t)stime.Minutes * 60U) + \ - ((uint32_t)stime.Seconds)); - - if (Format == RTC_FORMAT_BIN) - { - assert_param(IS_RTC_HOUR24(sAlarm->AlarmTime.Hours)); - assert_param(IS_RTC_MINUTES(sAlarm->AlarmTime.Minutes)); - assert_param(IS_RTC_SECONDS(sAlarm->AlarmTime.Seconds)); - - counter_alarm = (uint32_t)(((uint32_t)sAlarm->AlarmTime.Hours * 3600U) + \ - ((uint32_t)sAlarm->AlarmTime.Minutes * 60U) + \ - ((uint32_t)sAlarm->AlarmTime.Seconds)); - } - else - { - assert_param(IS_RTC_HOUR24(RTC_Bcd2ToByte(sAlarm->AlarmTime.Hours))); - assert_param(IS_RTC_MINUTES(RTC_Bcd2ToByte(sAlarm->AlarmTime.Minutes))); - assert_param(IS_RTC_SECONDS(RTC_Bcd2ToByte(sAlarm->AlarmTime.Seconds))); - - counter_alarm = (((uint32_t)(RTC_Bcd2ToByte(sAlarm->AlarmTime.Hours)) * 3600U) + \ - ((uint32_t)(RTC_Bcd2ToByte(sAlarm->AlarmTime.Minutes)) * 60U) + \ - ((uint32_t)RTC_Bcd2ToByte(sAlarm->AlarmTime.Seconds))); - } - - /* Check that requested alarm should expire in the same day (otherwise add 1 day) */ - if (counter_alarm < counter_time) - { - /* Add 1 day to alarm counter*/ - counter_alarm += (uint32_t)(24U * 3600U); - } - - /* Write alarm counter in RTC registers */ - if (RTC_WriteAlarmCounter(hrtc, counter_alarm) != HAL_OK) - { - /* Set RTC state */ - hrtc->State = HAL_RTC_STATE_ERROR; - - /* Process Unlocked */ - __HAL_UNLOCK(hrtc); - - return HAL_ERROR; - } - else - { - /* Clear flag alarm A */ - __HAL_RTC_ALARM_CLEAR_FLAG(hrtc, RTC_FLAG_ALRAF); - - /* Configure the Alarm interrupt */ - __HAL_RTC_ALARM_ENABLE_IT(hrtc, RTC_IT_ALRA); - - /* RTC Alarm Interrupt Configuration: EXTI configuration */ - __HAL_RTC_ALARM_EXTI_ENABLE_IT(); - - __HAL_RTC_ALARM_EXTI_ENABLE_RISING_EDGE(); - - hrtc->State = HAL_RTC_STATE_READY; - - __HAL_UNLOCK(hrtc); - - return HAL_OK; - } -} - -/** - * @brief Gets the RTC Alarm value and masks. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @param sAlarm: Pointer to Date structure - * @param Alarm: Specifies the Alarm. - * This parameter can be one of the following values: - * @arg RTC_ALARM_A: Alarm - * @param Format: Specifies the format of the entered parameters. - * This parameter can be one of the following values: - * @arg RTC_FORMAT_BIN: Binary data format - * @arg RTC_FORMAT_BCD: BCD data format - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTC_GetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Alarm, uint32_t Format) -{ - uint32_t counter_alarm = 0U; - - /* Prevent unused argument(s) compilation warning */ - UNUSED(Alarm); - - /* Check input parameters */ - if ((hrtc == NULL) || (sAlarm == NULL)) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_RTC_FORMAT(Format)); - assert_param(IS_RTC_ALARM(Alarm)); - - /* Read Alarm counter in RTC registers */ - counter_alarm = RTC_ReadAlarmCounter(hrtc); - - /* Fill the structure with the read parameters */ - /* Set hours in a day range (between 0 to 24)*/ - sAlarm->AlarmTime.Hours = (uint32_t)((counter_alarm / 3600U) % 24U); - sAlarm->AlarmTime.Minutes = (uint32_t)((counter_alarm % 3600U) / 60U); - sAlarm->AlarmTime.Seconds = (uint32_t)((counter_alarm % 3600U) % 60U); - - if (Format != RTC_FORMAT_BIN) - { - sAlarm->AlarmTime.Hours = RTC_ByteToBcd2(sAlarm->AlarmTime.Hours); - sAlarm->AlarmTime.Minutes = RTC_ByteToBcd2(sAlarm->AlarmTime.Minutes); - sAlarm->AlarmTime.Seconds = RTC_ByteToBcd2(sAlarm->AlarmTime.Seconds); - } - - return HAL_OK; -} - -/** - * @brief Deactive the specified RTC Alarm - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @param Alarm: Specifies the Alarm. - * This parameter can be one of the following values: - * @arg RTC_ALARM_A: AlarmA - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTC_DeactivateAlarm(RTC_HandleTypeDef *hrtc, uint32_t Alarm) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(Alarm); - - /* Check the parameters */ - assert_param(IS_RTC_ALARM(Alarm)); - - /* Check input parameters */ - if (hrtc == NULL) - { - return HAL_ERROR; - } - - /* Process Locked */ - __HAL_LOCK(hrtc); - - hrtc->State = HAL_RTC_STATE_BUSY; - - /* In case of interrupt mode is used, the interrupt source must disabled */ - __HAL_RTC_ALARM_DISABLE_IT(hrtc, RTC_IT_ALRA); - - /* Set Initialization mode */ - if (RTC_EnterInitMode(hrtc) != HAL_OK) - { - /* Set RTC state */ - hrtc->State = HAL_RTC_STATE_ERROR; - - /* Process Unlocked */ - __HAL_UNLOCK(hrtc); - - return HAL_ERROR; - } - else - { - /* Clear flag alarm A */ - __HAL_RTC_ALARM_CLEAR_FLAG(hrtc, RTC_FLAG_ALRAF); - - /* Set to default values ALRH & ALRL registers */ - WRITE_REG(hrtc->Instance->ALRH, RTC_ALARM_RESETVALUE_REGISTER); - WRITE_REG(hrtc->Instance->ALRL, RTC_ALARM_RESETVALUE_REGISTER); - - /* RTC Alarm Interrupt Configuration: Disable EXTI configuration */ - __HAL_RTC_ALARM_EXTI_DISABLE_IT(); - - /* Wait for synchro */ - if (RTC_ExitInitMode(hrtc) != HAL_OK) - { - hrtc->State = HAL_RTC_STATE_ERROR; - - /* Process Unlocked */ - __HAL_UNLOCK(hrtc); - - return HAL_ERROR; - } - } - hrtc->State = HAL_RTC_STATE_READY; - - /* Process Unlocked */ - __HAL_UNLOCK(hrtc); - - return HAL_OK; -} - -/** - * @brief This function handles Alarm interrupt request. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval None - */ -void HAL_RTC_AlarmIRQHandler(RTC_HandleTypeDef *hrtc) -{ - if (__HAL_RTC_ALARM_GET_IT_SOURCE(hrtc, RTC_IT_ALRA)) - { - /* Get the status of the Interrupt */ - if (__HAL_RTC_ALARM_GET_FLAG(hrtc, RTC_FLAG_ALRAF) != (uint32_t)RESET) - { - /* AlarmA callback */ -#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) - hrtc->AlarmAEventCallback(hrtc); -#else - HAL_RTC_AlarmAEventCallback(hrtc); -#endif /* USE_HAL_RTC_REGISTER_CALLBACKS */ - - /* Clear the Alarm interrupt pending bit */ - __HAL_RTC_ALARM_CLEAR_FLAG(hrtc, RTC_FLAG_ALRAF); - } - } - - /* Clear the EXTI's line Flag for RTC Alarm */ - __HAL_RTC_ALARM_EXTI_CLEAR_FLAG(); - - /* Change RTC state */ - hrtc->State = HAL_RTC_STATE_READY; -} - -/** - * @brief Alarm A callback. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval None - */ -__weak void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(hrtc); - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_RTC_AlarmAEventCallback could be implemented in the user file - */ -} - -/** - * @brief This function handles AlarmA Polling request. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @param Timeout: Timeout duration - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTC_PollForAlarmAEvent(RTC_HandleTypeDef *hrtc, uint32_t Timeout) -{ - uint32_t tickstart = HAL_GetTick(); - - /* Check input parameters */ - if (hrtc == NULL) - { - return HAL_ERROR; - } - - while (__HAL_RTC_ALARM_GET_FLAG(hrtc, RTC_FLAG_ALRAF) == RESET) - { - if (Timeout != HAL_MAX_DELAY) - { - if ((Timeout == 0) || ((HAL_GetTick() - tickstart) > Timeout)) - { - hrtc->State = HAL_RTC_STATE_TIMEOUT; - return HAL_TIMEOUT; - } - } - } - - /* Clear the Alarm interrupt pending bit */ - __HAL_RTC_ALARM_CLEAR_FLAG(hrtc, RTC_FLAG_ALRAF); - - /* Change RTC state */ - hrtc->State = HAL_RTC_STATE_READY; - - return HAL_OK; -} - -/** - * @} - */ - -/** @defgroup RTC_Exported_Functions_Group4 Peripheral State functions - * @brief Peripheral State functions - * -@verbatim - =============================================================================== - ##### Peripheral State functions ##### - =============================================================================== - [..] - This subsection provides functions allowing to - (+) Get RTC state - -@endverbatim - * @{ - */ -/** - * @brief Returns the RTC state. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval HAL state - */ -HAL_RTCStateTypeDef HAL_RTC_GetState(RTC_HandleTypeDef *hrtc) -{ - return hrtc->State; -} - -/** - * @} - */ - -/** @defgroup RTC_Exported_Functions_Group5 Peripheral Control functions - * @brief Peripheral Control functions - * -@verbatim - =============================================================================== - ##### Peripheral Control functions ##### - =============================================================================== - [..] - This subsection provides functions allowing to - (+) Wait for RTC Time and Date Synchronization - -@endverbatim - * @{ - */ - -/** - * @brief Waits until the RTC registers (RTC_CNT, RTC_ALR and RTC_PRL) - * are synchronized with RTC APB clock. - * @note This function must be called before any read operation after an APB reset - * or an APB clock stop. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTC_WaitForSynchro(RTC_HandleTypeDef *hrtc) -{ - uint32_t tickstart = 0U; - - /* Check input parameters */ - if (hrtc == NULL) - { - return HAL_ERROR; - } - - /* Clear RSF flag */ - CLEAR_BIT(hrtc->Instance->CRL, RTC_FLAG_RSF); - - tickstart = HAL_GetTick(); - - /* Wait the registers to be synchronised */ - while ((hrtc->Instance->CRL & RTC_FLAG_RSF) == (uint32_t)RESET) - { - if ((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE) - { - return HAL_TIMEOUT; - } - } - - return HAL_OK; -} - -/** - * @} - */ - - -/** - * @} - */ - -/** @addtogroup RTC_Private_Functions - * @{ - */ - - -/** - * @brief Read the time counter available in RTC_CNT registers. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval Time counter - */ -static uint32_t RTC_ReadTimeCounter(RTC_HandleTypeDef *hrtc) -{ - uint16_t high1 = 0U, high2 = 0U, low = 0U; - uint32_t timecounter = 0U; - - high1 = READ_REG(hrtc->Instance->CNTH & RTC_CNTH_RTC_CNT); - low = READ_REG(hrtc->Instance->CNTL & RTC_CNTL_RTC_CNT); - high2 = READ_REG(hrtc->Instance->CNTH & RTC_CNTH_RTC_CNT); - - if (high1 != high2) - { - /* In this case the counter roll over during reading of CNTL and CNTH registers, - read again CNTL register then return the counter value */ - timecounter = (((uint32_t) high2 << 16U) | READ_REG(hrtc->Instance->CNTL & RTC_CNTL_RTC_CNT)); - } - else - { - /* No counter roll over during reading of CNTL and CNTH registers, counter - value is equal to first value of CNTL and CNTH */ - timecounter = (((uint32_t) high1 << 16U) | low); - } - - return timecounter; -} - -/** - * @brief Write the time counter in RTC_CNT registers. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @param TimeCounter: Counter to write in RTC_CNT registers - * @retval HAL status - */ -static HAL_StatusTypeDef RTC_WriteTimeCounter(RTC_HandleTypeDef *hrtc, uint32_t TimeCounter) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Set Initialization mode */ - if (RTC_EnterInitMode(hrtc) != HAL_OK) - { - status = HAL_ERROR; - } - else - { - /* Set RTC COUNTER MSB word */ - WRITE_REG(hrtc->Instance->CNTH, (TimeCounter >> 16U)); - /* Set RTC COUNTER LSB word */ - WRITE_REG(hrtc->Instance->CNTL, (TimeCounter & RTC_CNTL_RTC_CNT)); - - /* Wait for synchro */ - if (RTC_ExitInitMode(hrtc) != HAL_OK) - { - status = HAL_ERROR; - } - } - - return status; -} - -/** - * @brief Read the time counter available in RTC_ALR registers. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval Time counter - */ -static uint32_t RTC_ReadAlarmCounter(RTC_HandleTypeDef *hrtc) -{ - uint16_t high1 = 0U, low = 0U; - - high1 = READ_REG(hrtc->Instance->ALRH & RTC_CNTH_RTC_CNT); - low = READ_REG(hrtc->Instance->ALRL & RTC_CNTL_RTC_CNT); - - return (((uint32_t) high1 << 16U) | low); -} - -/** - * @brief Write the time counter in RTC_ALR registers. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @param AlarmCounter: Counter to write in RTC_ALR registers - * @retval HAL status - */ -static HAL_StatusTypeDef RTC_WriteAlarmCounter(RTC_HandleTypeDef *hrtc, uint32_t AlarmCounter) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Set Initialization mode */ - if (RTC_EnterInitMode(hrtc) != HAL_OK) - { - status = HAL_ERROR; - } - else - { - /* Set RTC COUNTER MSB word */ - WRITE_REG(hrtc->Instance->ALRH, (AlarmCounter >> 16U)); - /* Set RTC COUNTER LSB word */ - WRITE_REG(hrtc->Instance->ALRL, (AlarmCounter & RTC_ALRL_RTC_ALR)); - - /* Wait for synchro */ - if (RTC_ExitInitMode(hrtc) != HAL_OK) - { - status = HAL_ERROR; - } - } - - return status; -} - -/** - * @brief Enters the RTC Initialization mode. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval HAL status - */ -static HAL_StatusTypeDef RTC_EnterInitMode(RTC_HandleTypeDef *hrtc) -{ - uint32_t tickstart = 0U; - - tickstart = HAL_GetTick(); - /* Wait till RTC is in INIT state and if Time out is reached exit */ - while ((hrtc->Instance->CRL & RTC_CRL_RTOFF) == (uint32_t)RESET) - { - if ((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE) - { - return HAL_TIMEOUT; - } - } - - /* Disable the write protection for RTC registers */ - __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc); - - - return HAL_OK; -} - -/** - * @brief Exit the RTC Initialization mode. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval HAL status - */ -static HAL_StatusTypeDef RTC_ExitInitMode(RTC_HandleTypeDef *hrtc) -{ - uint32_t tickstart = 0U; - - /* Disable the write protection for RTC registers */ - __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc); - - tickstart = HAL_GetTick(); - /* Wait till RTC is in INIT state and if Time out is reached exit */ - while ((hrtc->Instance->CRL & RTC_CRL_RTOFF) == (uint32_t)RESET) - { - if ((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE) - { - return HAL_TIMEOUT; - } - } - - return HAL_OK; -} - -/** - * @brief Converts a 2 digit decimal to BCD format. - * @param Value: Byte to be converted - * @retval Converted byte - */ -static uint8_t RTC_ByteToBcd2(uint8_t Value) -{ - uint32_t bcdhigh = 0U; - - while (Value >= 10U) - { - bcdhigh++; - Value -= 10U; - } - - return ((uint8_t)(bcdhigh << 4U) | Value); -} - -/** - * @brief Converts from 2 digit BCD to Binary. - * @param Value: BCD value to be converted - * @retval Converted word - */ -static uint8_t RTC_Bcd2ToByte(uint8_t Value) -{ - uint32_t tmp = 0U; - tmp = ((uint8_t)(Value & (uint8_t)0xF0) >> (uint8_t)0x4) * 10U; - return (tmp + (Value & (uint8_t)0x0F)); -} - -/** - * @brief Updates date when time is 23:59:59. - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @param DayElapsed: Number of days elapsed from last date update - * @retval None - */ -static void RTC_DateUpdate(RTC_HandleTypeDef *hrtc, uint32_t DayElapsed) -{ - uint32_t year = 0U, month = 0U, day = 0U; - uint32_t loop = 0U; - - /* Get the current year*/ - year = hrtc->DateToUpdate.Year; - - /* Get the current month and day */ - month = hrtc->DateToUpdate.Month; - day = hrtc->DateToUpdate.Date; - - for (loop = 0U; loop < DayElapsed; loop++) - { - if ((month == 1U) || (month == 3U) || (month == 5U) || (month == 7U) || \ - (month == 8U) || (month == 10U) || (month == 12U)) - { - if (day < 31U) - { - day++; - } - /* Date structure member: day = 31 */ - else - { - if (month != 12U) - { - month++; - day = 1U; - } - /* Date structure member: day = 31 & month =12 */ - else - { - month = 1U; - day = 1U; - year++; - } - } - } - else if ((month == 4U) || (month == 6U) || (month == 9U) || (month == 11U)) - { - if (day < 30U) - { - day++; - } - /* Date structure member: day = 30 */ - else - { - month++; - day = 1U; - } - } - else if (month == 2U) - { - if (day < 28U) - { - day++; - } - else if (day == 28U) - { - /* Leap year */ - if (RTC_IsLeapYear(year)) - { - day++; - } - else - { - month++; - day = 1U; - } - } - else if (day == 29U) - { - month++; - day = 1U; - } - } - } - - /* Update year */ - hrtc->DateToUpdate.Year = year; - - /* Update day and month */ - hrtc->DateToUpdate.Month = month; - hrtc->DateToUpdate.Date = day; - - /* Update day of the week */ - hrtc->DateToUpdate.WeekDay = RTC_WeekDayNum(year, month, day); -} - -/** - * @brief Check whether the passed year is Leap or not. - * @param nYear year to check - * @retval 1: leap year - * 0: not leap year - */ -static uint8_t RTC_IsLeapYear(uint16_t nYear) -{ - if ((nYear % 4U) != 0U) - { - return 0U; - } - - if ((nYear % 100U) != 0U) - { - return 1U; - } - - if ((nYear % 400U) == 0U) - { - return 1U; - } - else - { - return 0U; - } -} - -/** - * @brief Determines the week number, the day number and the week day number. - * @param nYear year to check - * @param nMonth Month to check - * @param nDay Day to check - * @note Day is calculated with hypothesis that year > 2000 - * @retval Value which can take one of the following parameters: - * @arg RTC_WEEKDAY_MONDAY - * @arg RTC_WEEKDAY_TUESDAY - * @arg RTC_WEEKDAY_WEDNESDAY - * @arg RTC_WEEKDAY_THURSDAY - * @arg RTC_WEEKDAY_FRIDAY - * @arg RTC_WEEKDAY_SATURDAY - * @arg RTC_WEEKDAY_SUNDAY - */ -static uint8_t RTC_WeekDayNum(uint32_t nYear, uint8_t nMonth, uint8_t nDay) -{ - uint32_t year = 0U, weekday = 0U; - - year = 2000U + nYear; - - if (nMonth < 3U) - { - /*D = { [(23 x month)/9] + day + 4 + year + [(year-1)/4] - [(year-1)/100] + [(year-1)/400] } mod 7*/ - weekday = (((23U * nMonth) / 9U) + nDay + 4U + year + ((year - 1U) / 4U) - ((year - 1U) / 100U) + ((year - 1U) / 400U)) % 7U; - } - else - { - /*D = { [(23 x month)/9] + day + 4 + year + [year/4] - [year/100] + [year/400] - 2 } mod 7*/ - weekday = (((23U * nMonth) / 9U) + nDay + 4U + year + (year / 4U) - (year / 100U) + (year / 400U) - 2U) % 7U; - } - - return (uint8_t)weekday; -} - -/** - * @} - */ - -#endif /* HAL_RTC_MODULE_ENABLED */ -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc_ex.c b/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc_ex.c deleted file mode 100644 index 5f50219..0000000 --- a/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc_ex.c +++ /dev/null @@ -1,579 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f1xx_hal_rtc_ex.c - * @author MCD Application Team - * @brief Extended RTC HAL module driver. - * This file provides firmware functions to manage the following - * functionalities of the Real Time Clock (RTC) Extension peripheral: - * + RTC Tamper functions - * + Extension Control functions - * + Extension RTC features functions - * - ****************************************************************************** - * @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 - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f1xx_hal.h" - -/** @addtogroup STM32F1xx_HAL_Driver - * @{ - */ - -#ifdef HAL_RTC_MODULE_ENABLED - -/** @defgroup RTCEx RTCEx - * @brief RTC Extended HAL module driver - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macro -------------------------------------------------------------*/ -/** @defgroup RTCEx_Private_Macros RTCEx Private Macros - * @{ - */ -/** - * @} - */ - -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup RTCEx_Exported_Functions RTCEx Exported Functions - * @{ - */ - -/** @defgroup RTCEx_Exported_Functions_Group1 RTC Tamper functions - * @brief RTC Tamper functions - * -@verbatim - =============================================================================== - ##### RTC Tamper functions ##### - =============================================================================== - - [..] This section provides functions allowing to configure Tamper feature - -@endverbatim - * @{ - */ - -/** - * @brief Sets Tamper - * @note By calling this API we disable the tamper interrupt for all tampers. - * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @param sTamper: Pointer to Tamper Structure. - * @note Tamper can be enabled only if ASOE and CCO bit are reset - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTCEx_SetTamper(RTC_HandleTypeDef *hrtc, RTC_TamperTypeDef *sTamper) -{ - /* Check input parameters */ - if ((hrtc == NULL) || (sTamper == NULL)) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_RTC_TAMPER(sTamper->Tamper)); - assert_param(IS_RTC_TAMPER_TRIGGER(sTamper->Trigger)); - - /* Process Locked */ - __HAL_LOCK(hrtc); - - hrtc->State = HAL_RTC_STATE_BUSY; - - if (HAL_IS_BIT_SET(BKP->RTCCR, (BKP_RTCCR_CCO | BKP_RTCCR_ASOE))) - { - hrtc->State = HAL_RTC_STATE_ERROR; - - /* Process Unlocked */ - __HAL_UNLOCK(hrtc); - - return HAL_ERROR; - } - - MODIFY_REG(BKP->CR, (BKP_CR_TPE | BKP_CR_TPAL), (sTamper->Tamper | (sTamper->Trigger))); - - hrtc->State = HAL_RTC_STATE_READY; - - /* Process Unlocked */ - __HAL_UNLOCK(hrtc); - - return HAL_OK; -} - -/** - * @brief Sets Tamper with interrupt. - * @note By calling this API we force the tamper interrupt for all tampers. - * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @param sTamper: Pointer to RTC Tamper. - * @note Tamper can be enabled only if ASOE and CCO bit are reset - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTCEx_SetTamper_IT(RTC_HandleTypeDef *hrtc, RTC_TamperTypeDef *sTamper) -{ - /* Check input parameters */ - if ((hrtc == NULL) || (sTamper == NULL)) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_RTC_TAMPER(sTamper->Tamper)); - assert_param(IS_RTC_TAMPER_TRIGGER(sTamper->Trigger)); - - /* Process Locked */ - __HAL_LOCK(hrtc); - - hrtc->State = HAL_RTC_STATE_BUSY; - - if (HAL_IS_BIT_SET(BKP->RTCCR, (BKP_RTCCR_CCO | BKP_RTCCR_ASOE))) - { - hrtc->State = HAL_RTC_STATE_ERROR; - - /* Process Unlocked */ - __HAL_UNLOCK(hrtc); - - return HAL_ERROR; - } - - MODIFY_REG(BKP->CR, (BKP_CR_TPE | BKP_CR_TPAL), (sTamper->Tamper | (sTamper->Trigger))); - - /* Configure the Tamper Interrupt in the BKP->CSR */ - __HAL_RTC_TAMPER_ENABLE_IT(hrtc, RTC_IT_TAMP1); - - hrtc->State = HAL_RTC_STATE_READY; - - /* Process Unlocked */ - __HAL_UNLOCK(hrtc); - - return HAL_OK; -} - -/** - * @brief Deactivates Tamper. - * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @param Tamper: Selected tamper pin. - * This parameter can be a value of @ref RTCEx_Tamper_Pins_Definitions - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTCEx_DeactivateTamper(RTC_HandleTypeDef *hrtc, uint32_t Tamper) -{ - /* Check input parameters */ - if (hrtc == NULL) - { - return HAL_ERROR; - } - /* Prevent unused argument(s) compilation warning */ - UNUSED(Tamper); - - assert_param(IS_RTC_TAMPER(Tamper)); - - /* Process Locked */ - __HAL_LOCK(hrtc); - - hrtc->State = HAL_RTC_STATE_BUSY; - - /* Disable the selected Tamper pin */ - CLEAR_BIT(BKP->CR, BKP_CR_TPE); - - /* Disable the Tamper Interrupt in the BKP->CSR */ - /* Configure the Tamper Interrupt in the BKP->CSR */ - __HAL_RTC_TAMPER_DISABLE_IT(hrtc, RTC_IT_TAMP1); - - /* Clear the Tamper interrupt pending bit */ - __HAL_RTC_TAMPER_CLEAR_FLAG(hrtc, RTC_FLAG_TAMP1F); - SET_BIT(BKP->CSR, BKP_CSR_CTE); - - hrtc->State = HAL_RTC_STATE_READY; - - /* Process Unlocked */ - __HAL_UNLOCK(hrtc); - - return HAL_OK; -} - -/** - * @brief This function handles Tamper interrupt request. - * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval None - */ -void HAL_RTCEx_TamperIRQHandler(RTC_HandleTypeDef *hrtc) -{ - /* Get the status of the Interrupt */ - if (__HAL_RTC_TAMPER_GET_IT_SOURCE(hrtc, RTC_IT_TAMP1)) - { - /* Get the TAMPER Interrupt enable bit and pending bit */ - if (__HAL_RTC_TAMPER_GET_FLAG(hrtc, RTC_FLAG_TAMP1F) != (uint32_t)RESET) - { - /* Tamper callback */ -#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) - hrtc->Tamper1EventCallback(hrtc); -#else - HAL_RTCEx_Tamper1EventCallback(hrtc); -#endif /* USE_HAL_RTC_REGISTER_CALLBACKS */ - - /* Clear the Tamper interrupt pending bit */ - __HAL_RTC_TAMPER_CLEAR_FLAG(hrtc, RTC_FLAG_TAMP1F); - } - } - - /* Change RTC state */ - hrtc->State = HAL_RTC_STATE_READY; -} - -/** - * @brief Tamper 1 callback. - * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval None - */ -__weak void HAL_RTCEx_Tamper1EventCallback(RTC_HandleTypeDef *hrtc) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(hrtc); - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_RTCEx_Tamper1EventCallback could be implemented in the user file - */ -} - -/** - * @brief This function handles Tamper1 Polling. - * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @param Timeout: Timeout duration - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTCEx_PollForTamper1Event(RTC_HandleTypeDef *hrtc, uint32_t Timeout) -{ - uint32_t tickstart = HAL_GetTick(); - - /* Check input parameters */ - if (hrtc == NULL) - { - return HAL_ERROR; - } - - /* Get the status of the Interrupt */ - while (__HAL_RTC_TAMPER_GET_FLAG(hrtc, RTC_FLAG_TAMP1F) == RESET) - { - if (Timeout != HAL_MAX_DELAY) - { - if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) - { - hrtc->State = HAL_RTC_STATE_TIMEOUT; - return HAL_TIMEOUT; - } - } - } - - /* Clear the Tamper Flag */ - __HAL_RTC_TAMPER_CLEAR_FLAG(hrtc, RTC_FLAG_TAMP1F); - - /* Change RTC state */ - hrtc->State = HAL_RTC_STATE_READY; - - return HAL_OK; -} - -/** - * @} - */ - -/** @defgroup RTCEx_Exported_Functions_Group2 RTC Second functions - * @brief RTC Second functions - * -@verbatim - =============================================================================== - ##### RTC Second functions ##### - =============================================================================== - - [..] This section provides functions implementing second interupt handlers - -@endverbatim - * @{ - */ - -/** - * @brief Sets Interrupt for second - * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTCEx_SetSecond_IT(RTC_HandleTypeDef *hrtc) -{ - /* Check input parameters */ - if (hrtc == NULL) - { - return HAL_ERROR; - } - - /* Process Locked */ - __HAL_LOCK(hrtc); - - hrtc->State = HAL_RTC_STATE_BUSY; - - /* Enable Second interuption */ - __HAL_RTC_SECOND_ENABLE_IT(hrtc, RTC_IT_SEC); - - hrtc->State = HAL_RTC_STATE_READY; - - /* Process Unlocked */ - __HAL_UNLOCK(hrtc); - - return HAL_OK; -} - -/** - * @brief Deactivates Second. - * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTCEx_DeactivateSecond(RTC_HandleTypeDef *hrtc) -{ - /* Check input parameters */ - if (hrtc == NULL) - { - return HAL_ERROR; - } - - /* Process Locked */ - __HAL_LOCK(hrtc); - - hrtc->State = HAL_RTC_STATE_BUSY; - - /* Deactivate Second interuption*/ - __HAL_RTC_SECOND_DISABLE_IT(hrtc, RTC_IT_SEC); - - hrtc->State = HAL_RTC_STATE_READY; - - /* Process Unlocked */ - __HAL_UNLOCK(hrtc); - - return HAL_OK; -} - -/** - * @brief This function handles second interrupt request. - * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval None - */ -void HAL_RTCEx_RTCIRQHandler(RTC_HandleTypeDef *hrtc) -{ - if (__HAL_RTC_SECOND_GET_IT_SOURCE(hrtc, RTC_IT_SEC)) - { - /* Get the status of the Interrupt */ - if (__HAL_RTC_SECOND_GET_FLAG(hrtc, RTC_FLAG_SEC)) - { - /* Check if Overrun occurred */ - if (__HAL_RTC_SECOND_GET_FLAG(hrtc, RTC_FLAG_OW)) - { - /* Second error callback */ - HAL_RTCEx_RTCEventErrorCallback(hrtc); - - /* Clear flag Second */ - __HAL_RTC_OVERFLOW_CLEAR_FLAG(hrtc, RTC_FLAG_OW); - - /* Change RTC state */ - hrtc->State = HAL_RTC_STATE_ERROR; - } - else - { - /* Second callback */ - HAL_RTCEx_RTCEventCallback(hrtc); - - /* Change RTC state */ - hrtc->State = HAL_RTC_STATE_READY; - } - - /* Clear flag Second */ - __HAL_RTC_SECOND_CLEAR_FLAG(hrtc, RTC_FLAG_SEC); - } - } -} - -/** - * @brief Second event callback. - * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval None - */ -__weak void HAL_RTCEx_RTCEventCallback(RTC_HandleTypeDef *hrtc) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(hrtc); - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_RTCEx_RTCEventCallback could be implemented in the user file - */ -} - -/** - * @brief Second event error callback. - * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval None - */ -__weak void HAL_RTCEx_RTCEventErrorCallback(RTC_HandleTypeDef *hrtc) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(hrtc); - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_RTCEx_RTCEventErrorCallback could be implemented in the user file - */ -} - -/** - * @} - */ - -/** @defgroup RTCEx_Exported_Functions_Group3 Extended Peripheral Control functions - * @brief Extended Peripheral Control functions - * -@verbatim - =============================================================================== - ##### Extension Peripheral Control functions ##### - =============================================================================== - [..] - This subsection provides functions allowing to - (+) Writes a data in a specified RTC Backup data register - (+) Read a data in a specified RTC Backup data register - (+) Sets the Smooth calibration parameters. - -@endverbatim - * @{ - */ - -/** - * @brief Writes a data in a specified RTC Backup data register. - * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @param BackupRegister: RTC Backup data Register number. - * This parameter can be: RTC_BKP_DRx where x can be from 1 to 10 (or 42) to - * specify the register (depending devices). - * @param Data: Data to be written in the specified RTC Backup data register. - * @retval None - */ -void HAL_RTCEx_BKUPWrite(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister, uint32_t Data) -{ - uint32_t tmp = 0U; - - /* Prevent unused argument(s) compilation warning */ - UNUSED(hrtc); - - /* Check the parameters */ - assert_param(IS_RTC_BKP(BackupRegister)); - - tmp = (uint32_t)BKP_BASE; - tmp += (BackupRegister * 4U); - - *(__IO uint32_t *) tmp = (Data & BKP_DR1_D); -} - -/** - * @brief Reads data from the specified RTC Backup data Register. - * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @param BackupRegister: RTC Backup data Register number. - * This parameter can be: RTC_BKP_DRx where x can be from 1 to 10 (or 42) to - * specify the register (depending devices). - * @retval Read value - */ -uint32_t HAL_RTCEx_BKUPRead(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister) -{ - uint32_t backupregister = 0U; - uint32_t pvalue = 0U; - - /* Prevent unused argument(s) compilation warning */ - UNUSED(hrtc); - - /* Check the parameters */ - assert_param(IS_RTC_BKP(BackupRegister)); - - backupregister = (uint32_t)BKP_BASE; - backupregister += (BackupRegister * 4U); - - pvalue = (*(__IO uint32_t *)(backupregister)) & BKP_DR1_D; - - /* Read the specified register */ - return pvalue; -} - - -/** - * @brief Sets the Smooth calibration parameters. - * @param hrtc: RTC handle - * @param SmoothCalibPeriod: Not used (only present for compatibility with another families) - * @param SmoothCalibPlusPulses: Not used (only present for compatibility with another families) - * @param SmouthCalibMinusPulsesValue: specifies the RTC Clock Calibration value. - * This parameter must be a number between 0 and 0x7F. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTCEx_SetSmoothCalib(RTC_HandleTypeDef *hrtc, uint32_t SmoothCalibPeriod, uint32_t SmoothCalibPlusPulses, uint32_t SmouthCalibMinusPulsesValue) -{ - /* Check input parameters */ - if (hrtc == NULL) - { - return HAL_ERROR; - } - /* Prevent unused argument(s) compilation warning */ - UNUSED(SmoothCalibPeriod); - UNUSED(SmoothCalibPlusPulses); - - /* Check the parameters */ - assert_param(IS_RTC_SMOOTH_CALIB_MINUS(SmouthCalibMinusPulsesValue)); - - /* Process Locked */ - __HAL_LOCK(hrtc); - - hrtc->State = HAL_RTC_STATE_BUSY; - - /* Sets RTC Clock Calibration value.*/ - MODIFY_REG(BKP->RTCCR, BKP_RTCCR_CAL, SmouthCalibMinusPulsesValue); - - /* Change RTC state */ - hrtc->State = HAL_RTC_STATE_READY; - - /* Process Unlocked */ - __HAL_UNLOCK(hrtc); - - return HAL_OK; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#endif /* HAL_RTC_MODULE_ENABLED */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/Makefile b/Makefile index 9105f96..37abef8 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ########################################################################################################################## -# File automatically-generated by tool: [projectgenerator] version: [3.16.0] date: [Sat Mar 04 11:28:52 CET 2023] +# File automatically-generated by tool: [projectgenerator] version: [3.16.0] date: [Mon Mar 06 00:33:47 CET 2023] ########################################################################################################################## # ------------------------------------------------ @@ -46,6 +46,11 @@ Core/Src/tim.c \ Core/Src/usart.c \ Core/Src/oled.c \ Core/Src/app.c \ +Core/Src/app_pid.c \ +Core/Src/app_analog.c \ +Core/Src/app_knob.c \ +Core/Src/app_buzzer.c \ +Core/Src/app_heater.c \ Core/Src/stm32f1xx_it.c \ Core/Src/stm32f1xx_hal_msp.c \ Core/Src/stm32f1xx_hal_timebase_tim.c \ @@ -79,10 +84,7 @@ Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c \ Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c \ Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c \ Lib/ufb/Src/framebuffer.c Lib/ufb/Src/utf8.c Lib/ufb/Src/font.c Lib/ufb/Src/fb_7seg.c Lib/ufb/Src/fb_text.c \ -Core/Src/dma.c \ -Core/Src/rtc.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc_ex.c +Core/Src/dma.c # ASM sources ASM_SOURCES = \ diff --git a/README.md b/README.md new file mode 100644 index 0000000..abf4cdc --- /dev/null +++ b/README.md @@ -0,0 +1,25 @@ +Pinout: + +- Knob push: PB8 +- Knob A/B: PB6, PB7 +- Buzzer PWM: PA15 +- Debug SWD: PA13 (IO), PA14 (CK) +- Debug UART: PA9 (Tx), PA10 (Rx) +- OLED reset: PB10 +- OLED DC: PB1 +- OLED CS: PB0 +- OLED MOSI: PA7 +- OLED SCLK: PA5 +- A0 - Pt100 +- A1 - Resistive divider top (filtered 3.3V, 1k + Pt100) + + +Peripherals: + +- TIM2 - Buzzer -> PA15 +- TIM3 - Heater PWM -> PA6 +- TIM4 - Encoder <- PB6, PB7 +- SPI1 MOSI only - OLED (PA5, PA7) +- UART1 - debug +- ADC1 - sensing +