/****************************************************************************** * @file stm32l0xx_hal_msp.c * @author MCD Application Team * @version V1.1.2 * @date 08-September-2017 * @brief msp file for HAL ****************************************************************************** * @attention * *

© Copyright (c) 2017 STMicroelectronics International N.V. * All rights reserved.

* * Redistribution and use in source and binary forms, with or without * modification, are permitted, provided that the following conditions are met: * * 1. Redistribution of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * 3. Neither the name of STMicroelectronics nor the names of other * contributors to this software may be used to endorse or promote products * derived from this software without specific written permission. * 4. This software, including modifications and/or derivative works of this * software, must execute solely and exclusively on microcontroller or * microprocessor devices manufactured by or for STMicroelectronics. * 5. Redistribution and use of this software other than as permitted under * this license is void and will automatically terminate your rights under * this license. * * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "hw.h" #include "low_power.h" #include "delay.h" #include "timeServer.h" /* when fast wake up is enabled, the mcu wakes up in ~20us * and * does not wait for the VREFINT to be settled. THis is ok for * most of the case except when adc must be used in this case before *starting the adc, you must make sure VREFINT is settled*/ #define ENABLE_FAST_WAKEUP /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ /** * @brief This function configures the source of the time base. * @brief don't enable systick * @param TickPriority: Tick interrupt priority. * @retval HAL status */ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) { /* Return function status */ return HAL_OK; } /** * @brief This function provides delay (in ms) * @param Delay: specifies the delay time length, in milliseconds. * @retval None */ void HAL_Delay(__IO uint32_t Delay) { DelayMs( Delay ); /* based on RTC */ } /** * @brief Initializes the MSP. * @retval None */ void HAL_MspInit(void) { __HAL_RCC_PWR_CLK_ENABLE(); /* Disable the Power Voltage Detector */ HAL_PWR_DisablePVD( ); /* Enables the Ultra Low Power mode */ HAL_PWREx_EnableUltraLowPower( ); __HAL_FLASH_SLEEP_POWERDOWN_ENABLE(); /*In debug mode, e.g. when DBGMCU is activated, Arm core has always clocks * And will not wait that the FLACH is ready to be read. It can miss in this * case the first instruction. To overcome this issue, the flash remain clcoked during sleep mode */ DBG( __HAL_FLASH_SLEEP_POWERDOWN_DISABLE(); ); #ifdef ENABLE_FAST_WAKEUP /*Enable fast wakeUp*/ HAL_PWREx_EnableFastWakeUp( ); #else HAL_PWREx_DisableFastWakeUp( ); #endif } /** * @brief RTC MSP Initialization * This function configures the hardware resources used in this example: * - Peripheral's clock enable * @param hrtc: RTC handle pointer * @note Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to select * the RTC clock source; in this case the Backup domain will be reset in * order to modify the RTC Clock source, as consequence RTC registers (including * the backup registers) and RCC_CSR register are set to their reset values. * @retval None */ void HAL_RTC_MspInit(RTC_HandleTypeDef *hrtc) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; /*##-1- Configue the RTC clock soucre ######################################*/ /* -a- Enable LSE Oscillator */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; RCC_OscInitStruct.LSEState = RCC_LSE_ON; if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /* -b- Select LSI as RTC clock source */ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; if(HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { Error_Handler(); } /*##-2- Enable the RTC peripheral Clock ####################################*/ /* Enable RTC Clock */ __HAL_RCC_RTC_ENABLE(); /*##-3- Configure the NVIC for RTC Alarm ###################################*/ HAL_NVIC_SetPriority(RTC_Alarm_IRQn, 0x0, 0); HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn); } /** * @brief RTC MSP De-Initialization * This function freeze the hardware resources used in this example: * - Disable the Peripheral's clock * @param hrtc: RTC handle pointer * @retval None */ void HAL_RTC_MspDeInit(RTC_HandleTypeDef *hrtc) { /* Reset peripherals */ __HAL_RCC_RTC_DISABLE(); } /** * @brief Alarm A callback. * @param hrtc: RTC handle * @retval None */ void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc) { TimerIrqHandler( ); } /** * @brief EXTI line detection callbacks. * @param GPIO_Pin: Specifies the pins connected to the EXTI line. * @retval None */ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { HW_GPIO_IrqHandler( GPIO_Pin ); } /** * @brief Gets IRQ number as a function of the GPIO_Pin. * @param GPIO_Pin: Specifies the pins connected to the EXTI line. * @retval IRQ number */ IRQn_Type MSP_GetIRQn( uint16_t GPIO_Pin) { switch( GPIO_Pin ) { case GPIO_PIN_0: case GPIO_PIN_1: return EXTI0_1_IRQn; case GPIO_PIN_2: case GPIO_PIN_3: return EXTI2_3_IRQn; case GPIO_PIN_4: case GPIO_PIN_5: case GPIO_PIN_6: case GPIO_PIN_7: case GPIO_PIN_8: case GPIO_PIN_9: case GPIO_PIN_10: case GPIO_PIN_11: case GPIO_PIN_12: case GPIO_PIN_13: case GPIO_PIN_14: case GPIO_PIN_15: default: return EXTI4_15_IRQn; } } /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/