Hal Drivers for L4

Dependents:   BSP OneHopeOnePrayer FINAL_AUDIO_RECORD AudioDemo

Fork of STM32L4xx_HAL_Driver by Senior Design: Sound Monitor

Committer:
EricLew
Date:
Wed Nov 25 17:30:43 2015 +0000
Revision:
2:7aef7655b0a8
Parent:
0:80ee8f3b695e
commit;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
EricLew 0:80ee8f3b695e 1 /**
EricLew 0:80ee8f3b695e 2 ******************************************************************************
EricLew 0:80ee8f3b695e 3 * @file stm32l4xx_hal_lptim.c
EricLew 0:80ee8f3b695e 4 * @author MCD Application Team
EricLew 0:80ee8f3b695e 5 * @version V1.1.0
EricLew 0:80ee8f3b695e 6 * @date 16-September-2015
EricLew 0:80ee8f3b695e 7 * @brief LPTIM HAL module driver.
EricLew 0:80ee8f3b695e 8 * This file provides firmware functions to manage the following
EricLew 0:80ee8f3b695e 9 * functionalities of the Low Power Timer (LPTIM) peripheral:
EricLew 0:80ee8f3b695e 10 * + Initialization and de-initialization functions.
EricLew 0:80ee8f3b695e 11 * + Start/Stop operation functions in polling mode.
EricLew 0:80ee8f3b695e 12 * + Start/Stop operation functions in interrupt mode.
EricLew 0:80ee8f3b695e 13 * + Reading operation functions.
EricLew 0:80ee8f3b695e 14 * + Peripheral State functions.
EricLew 0:80ee8f3b695e 15 *
EricLew 0:80ee8f3b695e 16 @verbatim
EricLew 0:80ee8f3b695e 17 ==============================================================================
EricLew 0:80ee8f3b695e 18 ##### How to use this driver #####
EricLew 0:80ee8f3b695e 19 ==============================================================================
EricLew 0:80ee8f3b695e 20 [..]
EricLew 0:80ee8f3b695e 21 The LPTIM HAL driver can be used as follows:
EricLew 0:80ee8f3b695e 22
EricLew 0:80ee8f3b695e 23 (#)Initialize the LPTIM low level resources by implementing the
EricLew 0:80ee8f3b695e 24 HAL_LPTIM_MspInit():
EricLew 0:80ee8f3b695e 25 (++) Enable the LPTIM interface clock using __HAL_RCC_LPTIMx_CLK_ENABLE().
EricLew 0:80ee8f3b695e 26 (++) In case of using interrupts (e.g. HAL_LPTIM_PWM_Start_IT()):
EricLew 0:80ee8f3b695e 27 (+++) Configure the LPTIM interrupt priority using HAL_NVIC_SetPriority().
EricLew 0:80ee8f3b695e 28 (+++) Enable the LPTIM IRQ handler using HAL_NVIC_EnableIRQ().
EricLew 0:80ee8f3b695e 29 (+++) In LPTIM IRQ handler, call HAL_LPTIM_IRQHandler().
EricLew 0:80ee8f3b695e 30
EricLew 0:80ee8f3b695e 31 (#)Initialize the LPTIM HAL using HAL_LPTIM_Init(). This function
EricLew 0:80ee8f3b695e 32 configures mainly:
EricLew 0:80ee8f3b695e 33 (++) The instance: LPTIM1 or LPTIM2.
EricLew 0:80ee8f3b695e 34 (++) Clock: the counter clock.
EricLew 0:80ee8f3b695e 35 (+++) Source : it can be either the ULPTIM input (IN1) or one of
EricLew 0:80ee8f3b695e 36 the internal clock; (APB, LSE, LSI or MSI).
EricLew 0:80ee8f3b695e 37 (+++) Prescaler: select the clock divider.
EricLew 0:80ee8f3b695e 38 (++) UltraLowPowerClock : To be used only if the ULPTIM is selected
EricLew 0:80ee8f3b695e 39 as counter clock source.
EricLew 0:80ee8f3b695e 40 (+++) Polarity: polarity of the active edge for the counter unit
EricLew 0:80ee8f3b695e 41 if the ULPTIM input is selected.
EricLew 0:80ee8f3b695e 42 (+++) SampleTime: clock sampling time to configure the clock glitch
EricLew 0:80ee8f3b695e 43 filter.
EricLew 0:80ee8f3b695e 44 (++) Trigger: How the counter start.
EricLew 0:80ee8f3b695e 45 (+++) Source: trigger can be software or one of the hardware triggers.
EricLew 0:80ee8f3b695e 46 (+++) ActiveEdge : only for hardware trigger.
EricLew 0:80ee8f3b695e 47 (+++) SampleTime : trigger sampling time to configure the trigger
EricLew 0:80ee8f3b695e 48 glitch filter.
EricLew 0:80ee8f3b695e 49 (++) OutputPolarity : 2 opposite polarities are possible.
EricLew 0:80ee8f3b695e 50 (++) UpdateMode: specifies whether the update of the autoreload and
EricLew 0:80ee8f3b695e 51 the compare values is done immediately or after the end of current
EricLew 0:80ee8f3b695e 52 period.
EricLew 0:80ee8f3b695e 53 (++) Input1Source: Source selected for input1 (GPIO or comparator output).
EricLew 0:80ee8f3b695e 54 (++) Input2Source: Source selected for input2 (GPIO or comparator output).
EricLew 0:80ee8f3b695e 55 Input2 is used only for encoder feature so is used only for LPTIM1 instance.
EricLew 0:80ee8f3b695e 56
EricLew 0:80ee8f3b695e 57 (#)Six modes are available:
EricLew 0:80ee8f3b695e 58
EricLew 0:80ee8f3b695e 59 (++) PWM Mode: To generate a PWM signal with specified period and pulse,
EricLew 0:80ee8f3b695e 60 call HAL_LPTIM_PWM_Start() or HAL_LPTIM_PWM_Start_IT() for interruption
EricLew 0:80ee8f3b695e 61 mode.
EricLew 0:80ee8f3b695e 62
EricLew 0:80ee8f3b695e 63 (++) One Pulse Mode: To generate pulse with specified width in response
EricLew 0:80ee8f3b695e 64 to a stimulus, call HAL_LPTIM_OnePulse_Start() or
EricLew 0:80ee8f3b695e 65 HAL_LPTIM_OnePulse_Start_IT() for interruption mode.
EricLew 0:80ee8f3b695e 66
EricLew 0:80ee8f3b695e 67 (++) Set once Mode: In this mode, the output changes the level (from
EricLew 0:80ee8f3b695e 68 low level to high level if the output polarity is configured high, else
EricLew 0:80ee8f3b695e 69 the opposite) when a compare match occurs. To start this mode, call
EricLew 0:80ee8f3b695e 70 HAL_LPTIM_SetOnce_Start() or HAL_LPTIM_SetOnce_Start_IT() for
EricLew 0:80ee8f3b695e 71 interruption mode.
EricLew 0:80ee8f3b695e 72
EricLew 0:80ee8f3b695e 73 (++) Encoder Mode: To use the encoder interface call
EricLew 0:80ee8f3b695e 74 HAL_LPTIM_Encoder_Start() or HAL_LPTIM_Encoder_Start_IT() for
EricLew 0:80ee8f3b695e 75 interruption mode. Only available for LPTIM1 instance.
EricLew 0:80ee8f3b695e 76
EricLew 0:80ee8f3b695e 77 (++) Time out Mode: an active edge on one selected trigger input rests
EricLew 0:80ee8f3b695e 78 the counter. The first trigger event will start the timer, any
EricLew 0:80ee8f3b695e 79 successive trigger event will reset the counter and the timer will
EricLew 0:80ee8f3b695e 80 restart. To start this mode call HAL_LPTIM_TimeOut_Start_IT() or
EricLew 0:80ee8f3b695e 81 HAL_LPTIM_TimeOut_Start_IT() for interruption mode.
EricLew 0:80ee8f3b695e 82
EricLew 0:80ee8f3b695e 83 (++) Counter Mode: counter can be used to count external events on
EricLew 0:80ee8f3b695e 84 the LPTIM Input1 or it can be used to count internal clock cycles.
EricLew 0:80ee8f3b695e 85 To start this mode, call HAL_LPTIM_Counter_Start() or
EricLew 0:80ee8f3b695e 86 HAL_LPTIM_Counter_Start_IT() for interruption mode.
EricLew 0:80ee8f3b695e 87
EricLew 0:80ee8f3b695e 88
EricLew 0:80ee8f3b695e 89 (#) User can stop any process by calling the corresponding API:
EricLew 0:80ee8f3b695e 90 HAL_LPTIM_Xxx_Stop() or HAL_LPTIM_Xxx_Stop_IT() if the process is
EricLew 0:80ee8f3b695e 91 already started in interruption mode.
EricLew 0:80ee8f3b695e 92
EricLew 0:80ee8f3b695e 93 (#) De-initialize the LPTIM peripheral using HAL_LPTIM_DeInit().
EricLew 0:80ee8f3b695e 94
EricLew 0:80ee8f3b695e 95 @endverbatim
EricLew 0:80ee8f3b695e 96 ******************************************************************************
EricLew 0:80ee8f3b695e 97 * @attention
EricLew 0:80ee8f3b695e 98 *
EricLew 0:80ee8f3b695e 99 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
EricLew 0:80ee8f3b695e 100 *
EricLew 0:80ee8f3b695e 101 * Redistribution and use in source and binary forms, with or without modification,
EricLew 0:80ee8f3b695e 102 * are permitted provided that the following conditions are met:
EricLew 0:80ee8f3b695e 103 * 1. Redistributions of source code must retain the above copyright notice,
EricLew 0:80ee8f3b695e 104 * this list of conditions and the following disclaimer.
EricLew 0:80ee8f3b695e 105 * 2. Redistributions in binary form must reproduce the above copyright notice,
EricLew 0:80ee8f3b695e 106 * this list of conditions and the following disclaimer in the documentation
EricLew 0:80ee8f3b695e 107 * and/or other materials provided with the distribution.
EricLew 0:80ee8f3b695e 108 * 3. Neither the name of STMicroelectronics nor the names of its contributors
EricLew 0:80ee8f3b695e 109 * may be used to endorse or promote products derived from this software
EricLew 0:80ee8f3b695e 110 * without specific prior written permission.
EricLew 0:80ee8f3b695e 111 *
EricLew 0:80ee8f3b695e 112 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
EricLew 0:80ee8f3b695e 113 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
EricLew 0:80ee8f3b695e 114 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
EricLew 0:80ee8f3b695e 115 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
EricLew 0:80ee8f3b695e 116 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
EricLew 0:80ee8f3b695e 117 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
EricLew 0:80ee8f3b695e 118 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
EricLew 0:80ee8f3b695e 119 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
EricLew 0:80ee8f3b695e 120 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
EricLew 0:80ee8f3b695e 121 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
EricLew 0:80ee8f3b695e 122 *
EricLew 0:80ee8f3b695e 123 ******************************************************************************
EricLew 0:80ee8f3b695e 124 */
EricLew 0:80ee8f3b695e 125
EricLew 0:80ee8f3b695e 126 /* Includes ------------------------------------------------------------------*/
EricLew 0:80ee8f3b695e 127 #include "stm32l4xx_hal.h"
EricLew 0:80ee8f3b695e 128
EricLew 0:80ee8f3b695e 129 /** @addtogroup STM32L4xx_HAL_Driver
EricLew 0:80ee8f3b695e 130 * @{
EricLew 0:80ee8f3b695e 131 */
EricLew 0:80ee8f3b695e 132
EricLew 0:80ee8f3b695e 133 /** @defgroup LPTIM LPTIM
EricLew 0:80ee8f3b695e 134 * @brief LPTIM HAL module driver.
EricLew 0:80ee8f3b695e 135 * @{
EricLew 0:80ee8f3b695e 136 */
EricLew 0:80ee8f3b695e 137
EricLew 0:80ee8f3b695e 138 #ifdef HAL_LPTIM_MODULE_ENABLED
EricLew 0:80ee8f3b695e 139 /* Private typedef -----------------------------------------------------------*/
EricLew 0:80ee8f3b695e 140 /* Private define ------------------------------------------------------------*/
EricLew 0:80ee8f3b695e 141 /* Private macro -------------------------------------------------------------*/
EricLew 0:80ee8f3b695e 142 /* Private variables ---------------------------------------------------------*/
EricLew 0:80ee8f3b695e 143 /* Private function prototypes -----------------------------------------------*/
EricLew 0:80ee8f3b695e 144 /* Exported functions --------------------------------------------------------*/
EricLew 0:80ee8f3b695e 145
EricLew 0:80ee8f3b695e 146 /** @defgroup LPTIM_Exported_Functions LPTIM Exported Functions
EricLew 0:80ee8f3b695e 147 * @{
EricLew 0:80ee8f3b695e 148 */
EricLew 0:80ee8f3b695e 149
EricLew 0:80ee8f3b695e 150 /** @defgroup LPTIM_Group1 Initialization/de-initialization functions
EricLew 0:80ee8f3b695e 151 * @brief Initialization and Configuration functions.
EricLew 0:80ee8f3b695e 152 *
EricLew 0:80ee8f3b695e 153 @verbatim
EricLew 0:80ee8f3b695e 154 ==============================================================================
EricLew 0:80ee8f3b695e 155 ##### Initialization and de-initialization functions #####
EricLew 0:80ee8f3b695e 156 ==============================================================================
EricLew 0:80ee8f3b695e 157 [..] This section provides functions allowing to:
EricLew 0:80ee8f3b695e 158 (+) Initialize the LPTIM according to the specified parameters in the
EricLew 0:80ee8f3b695e 159 LPTIM_InitTypeDef and initialize the associated handle.
EricLew 0:80ee8f3b695e 160 (+) DeInitialize the LPTIM peripheral.
EricLew 0:80ee8f3b695e 161 (+) Initialize the LPTIM MSP.
EricLew 0:80ee8f3b695e 162 (+) DeInitialize the LPTIM MSP.
EricLew 0:80ee8f3b695e 163
EricLew 0:80ee8f3b695e 164 @endverbatim
EricLew 0:80ee8f3b695e 165 * @{
EricLew 0:80ee8f3b695e 166 */
EricLew 0:80ee8f3b695e 167
EricLew 0:80ee8f3b695e 168 /**
EricLew 0:80ee8f3b695e 169 * @brief Initialize the LPTIM according to the specified parameters in the
EricLew 0:80ee8f3b695e 170 * LPTIM_InitTypeDef and initialize the associated handle.
EricLew 0:80ee8f3b695e 171 * @param hlptim: LPTIM handle
EricLew 0:80ee8f3b695e 172 * @retval HAL status
EricLew 0:80ee8f3b695e 173 */
EricLew 0:80ee8f3b695e 174 HAL_StatusTypeDef HAL_LPTIM_Init(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 175 {
EricLew 0:80ee8f3b695e 176 uint32_t tmpcfgr = 0;
EricLew 0:80ee8f3b695e 177
EricLew 0:80ee8f3b695e 178 /* Check the LPTIM handle allocation */
EricLew 0:80ee8f3b695e 179 if(hlptim == NULL)
EricLew 0:80ee8f3b695e 180 {
EricLew 0:80ee8f3b695e 181 return HAL_ERROR;
EricLew 0:80ee8f3b695e 182 }
EricLew 0:80ee8f3b695e 183
EricLew 0:80ee8f3b695e 184 /* Check the parameters */
EricLew 0:80ee8f3b695e 185 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 186
EricLew 0:80ee8f3b695e 187 assert_param(IS_LPTIM_CLOCK_SOURCE(hlptim->Init.Clock.Source));
EricLew 0:80ee8f3b695e 188 assert_param(IS_LPTIM_CLOCK_PRESCALER(hlptim->Init.Clock.Prescaler));
EricLew 0:80ee8f3b695e 189 if ((hlptim->Init.Clock.Source) == LPTIM_CLOCKSOURCE_ULPTIM)
EricLew 0:80ee8f3b695e 190 {
EricLew 0:80ee8f3b695e 191 assert_param(IS_LPTIM_CLOCK_POLARITY(hlptim->Init.UltraLowPowerClock.Polarity));
EricLew 0:80ee8f3b695e 192 assert_param(IS_LPTIM_CLOCK_SAMPLE_TIME(hlptim->Init.UltraLowPowerClock.SampleTime));
EricLew 0:80ee8f3b695e 193 }
EricLew 0:80ee8f3b695e 194 assert_param(IS_LPTIM_TRG_SOURCE(hlptim->Init.Trigger.Source));
EricLew 0:80ee8f3b695e 195 if ((hlptim->Init.Trigger.Source) != LPTIM_TRIGSOURCE_SOFTWARE)
EricLew 0:80ee8f3b695e 196 {
EricLew 0:80ee8f3b695e 197 assert_param(IS_LPTIM_TRIG_SAMPLE_TIME(hlptim->Init.Trigger.SampleTime));
EricLew 0:80ee8f3b695e 198 assert_param(IS_LPTIM_EXT_TRG_POLARITY(hlptim->Init.Trigger.ActiveEdge));
EricLew 0:80ee8f3b695e 199 }
EricLew 0:80ee8f3b695e 200 assert_param(IS_LPTIM_OUTPUT_POLARITY(hlptim->Init.OutputPolarity));
EricLew 0:80ee8f3b695e 201 assert_param(IS_LPTIM_UPDATE_MODE(hlptim->Init.UpdateMode));
EricLew 0:80ee8f3b695e 202 assert_param(IS_LPTIM_COUNTER_SOURCE(hlptim->Init.CounterSource));
EricLew 0:80ee8f3b695e 203
EricLew 0:80ee8f3b695e 204 if(hlptim->State == HAL_LPTIM_STATE_RESET)
EricLew 0:80ee8f3b695e 205 {
EricLew 0:80ee8f3b695e 206 /* Allocate lock resource and initialize it */
EricLew 0:80ee8f3b695e 207 hlptim->Lock = HAL_UNLOCKED;
EricLew 0:80ee8f3b695e 208
EricLew 0:80ee8f3b695e 209 /* Init the low level hardware */
EricLew 0:80ee8f3b695e 210 HAL_LPTIM_MspInit(hlptim);
EricLew 0:80ee8f3b695e 211 }
EricLew 0:80ee8f3b695e 212
EricLew 0:80ee8f3b695e 213 /* Change the LPTIM state */
EricLew 0:80ee8f3b695e 214 hlptim->State = HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 215
EricLew 0:80ee8f3b695e 216 /* Get the LPTIMx CFGR value */
EricLew 0:80ee8f3b695e 217 tmpcfgr = hlptim->Instance->CFGR;
EricLew 0:80ee8f3b695e 218
EricLew 0:80ee8f3b695e 219 if ((hlptim->Init.Clock.Source) == LPTIM_CLOCKSOURCE_ULPTIM)
EricLew 0:80ee8f3b695e 220 {
EricLew 0:80ee8f3b695e 221 tmpcfgr &= (uint32_t)(~(LPTIM_CFGR_CKPOL | LPTIM_CFGR_CKFLT));
EricLew 0:80ee8f3b695e 222 }
EricLew 0:80ee8f3b695e 223 if ((hlptim->Init.Trigger.Source) != LPTIM_TRIGSOURCE_SOFTWARE)
EricLew 0:80ee8f3b695e 224 {
EricLew 0:80ee8f3b695e 225 tmpcfgr &= (uint32_t)(~ (LPTIM_CFGR_TRGFLT | LPTIM_CFGR_TRIGSEL));
EricLew 0:80ee8f3b695e 226 }
EricLew 0:80ee8f3b695e 227
EricLew 0:80ee8f3b695e 228 /* Clear CKSEL, PRESC, TRIGEN, TRGFLT, WAVPOL, PRELOAD & COUNTMODE bits */
EricLew 0:80ee8f3b695e 229 tmpcfgr &= (uint32_t)(~(LPTIM_CFGR_CKSEL | LPTIM_CFGR_TRIGEN | LPTIM_CFGR_PRELOAD |
EricLew 0:80ee8f3b695e 230 LPTIM_CFGR_WAVPOL | LPTIM_CFGR_PRESC | LPTIM_CFGR_COUNTMODE ));
EricLew 0:80ee8f3b695e 231
EricLew 0:80ee8f3b695e 232 /* Set initialization parameters */
EricLew 0:80ee8f3b695e 233 tmpcfgr |= (hlptim->Init.Clock.Source |
EricLew 0:80ee8f3b695e 234 hlptim->Init.Clock.Prescaler |
EricLew 0:80ee8f3b695e 235 hlptim->Init.OutputPolarity |
EricLew 0:80ee8f3b695e 236 hlptim->Init.UpdateMode |
EricLew 0:80ee8f3b695e 237 hlptim->Init.CounterSource);
EricLew 0:80ee8f3b695e 238
EricLew 0:80ee8f3b695e 239 if ((hlptim->Init.Clock.Source) == LPTIM_CLOCKSOURCE_ULPTIM)
EricLew 0:80ee8f3b695e 240 {
EricLew 0:80ee8f3b695e 241 tmpcfgr |= (hlptim->Init.UltraLowPowerClock.Polarity |
EricLew 0:80ee8f3b695e 242 hlptim->Init.UltraLowPowerClock.SampleTime);
EricLew 0:80ee8f3b695e 243 }
EricLew 0:80ee8f3b695e 244
EricLew 0:80ee8f3b695e 245 if ((hlptim->Init.Trigger.Source) != LPTIM_TRIGSOURCE_SOFTWARE)
EricLew 0:80ee8f3b695e 246 {
EricLew 0:80ee8f3b695e 247 /* Enable External trigger and set the trigger source */
EricLew 0:80ee8f3b695e 248 tmpcfgr |= (hlptim->Init.Trigger.Source |
EricLew 0:80ee8f3b695e 249 hlptim->Init.Trigger.ActiveEdge |
EricLew 0:80ee8f3b695e 250 hlptim->Init.Trigger.SampleTime);
EricLew 0:80ee8f3b695e 251 }
EricLew 0:80ee8f3b695e 252
EricLew 0:80ee8f3b695e 253 /* Write to LPTIMx CFGR */
EricLew 0:80ee8f3b695e 254 hlptim->Instance->CFGR = tmpcfgr;
EricLew 0:80ee8f3b695e 255
EricLew 0:80ee8f3b695e 256 /* Configure LPTIM input sources */
EricLew 0:80ee8f3b695e 257 if(hlptim->Instance == LPTIM1)
EricLew 0:80ee8f3b695e 258 {
EricLew 0:80ee8f3b695e 259 /* Check LPTIM1 Input1 and Input2 sources */
EricLew 0:80ee8f3b695e 260 assert_param(IS_LPTIM_INPUT1_SOURCE(hlptim->Instance,hlptim->Init.Input1Source));
EricLew 0:80ee8f3b695e 261 assert_param(IS_LPTIM_INPUT2_SOURCE(hlptim->Instance,hlptim->Init.Input2Source));
EricLew 0:80ee8f3b695e 262
EricLew 0:80ee8f3b695e 263 /* Configure LPTIM1 Input1 and Input2 sources */
EricLew 0:80ee8f3b695e 264 hlptim->Instance->OR = (hlptim->Init.Input1Source | hlptim->Init.Input2Source);
EricLew 0:80ee8f3b695e 265 }
EricLew 0:80ee8f3b695e 266 else
EricLew 0:80ee8f3b695e 267 {
EricLew 0:80ee8f3b695e 268 /* Check LPTIM2 Input1 source */
EricLew 0:80ee8f3b695e 269 assert_param(IS_LPTIM_INPUT1_SOURCE(hlptim->Instance,hlptim->Init.Input1Source));
EricLew 0:80ee8f3b695e 270
EricLew 0:80ee8f3b695e 271 /* Configure LPTIM2 Input1 source */
EricLew 0:80ee8f3b695e 272 hlptim->Instance->OR = hlptim->Init.Input1Source;
EricLew 0:80ee8f3b695e 273 }
EricLew 0:80ee8f3b695e 274
EricLew 0:80ee8f3b695e 275 /* Change the LPTIM state */
EricLew 0:80ee8f3b695e 276 hlptim->State = HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 277
EricLew 0:80ee8f3b695e 278 /* Return function status */
EricLew 0:80ee8f3b695e 279 return HAL_OK;
EricLew 0:80ee8f3b695e 280 }
EricLew 0:80ee8f3b695e 281
EricLew 0:80ee8f3b695e 282 /**
EricLew 0:80ee8f3b695e 283 * @brief DeInitialize the LPTIM peripheral.
EricLew 0:80ee8f3b695e 284 * @param hlptim: LPTIM handle
EricLew 0:80ee8f3b695e 285 * @retval HAL status
EricLew 0:80ee8f3b695e 286 */
EricLew 0:80ee8f3b695e 287 HAL_StatusTypeDef HAL_LPTIM_DeInit(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 288 {
EricLew 0:80ee8f3b695e 289 /* Check the LPTIM handle allocation */
EricLew 0:80ee8f3b695e 290 if(hlptim == NULL)
EricLew 0:80ee8f3b695e 291 {
EricLew 0:80ee8f3b695e 292 return HAL_ERROR;
EricLew 0:80ee8f3b695e 293 }
EricLew 0:80ee8f3b695e 294
EricLew 0:80ee8f3b695e 295 /* Change the LPTIM state */
EricLew 0:80ee8f3b695e 296 hlptim->State = HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 297
EricLew 0:80ee8f3b695e 298 /* Disable the LPTIM Peripheral Clock */
EricLew 0:80ee8f3b695e 299 __HAL_LPTIM_DISABLE(hlptim);
EricLew 0:80ee8f3b695e 300
EricLew 0:80ee8f3b695e 301 /* DeInit the low level hardware: CLOCK, NVIC.*/
EricLew 0:80ee8f3b695e 302 HAL_LPTIM_MspDeInit(hlptim);
EricLew 0:80ee8f3b695e 303
EricLew 0:80ee8f3b695e 304 /* Change the LPTIM state */
EricLew 0:80ee8f3b695e 305 hlptim->State = HAL_LPTIM_STATE_RESET;
EricLew 0:80ee8f3b695e 306
EricLew 0:80ee8f3b695e 307 /* Release Lock */
EricLew 0:80ee8f3b695e 308 __HAL_UNLOCK(hlptim);
EricLew 0:80ee8f3b695e 309
EricLew 0:80ee8f3b695e 310 /* Return function status */
EricLew 0:80ee8f3b695e 311 return HAL_OK;
EricLew 0:80ee8f3b695e 312 }
EricLew 0:80ee8f3b695e 313
EricLew 0:80ee8f3b695e 314 /**
EricLew 0:80ee8f3b695e 315 * @brief Initialize the LPTIM MSP.
EricLew 0:80ee8f3b695e 316 * @param hlptim: LPTIM handle
EricLew 0:80ee8f3b695e 317 * @retval None
EricLew 0:80ee8f3b695e 318 */
EricLew 0:80ee8f3b695e 319 __weak void HAL_LPTIM_MspInit(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 320 {
EricLew 0:80ee8f3b695e 321 /* NOTE : This function should not be modified, when the callback is needed,
EricLew 0:80ee8f3b695e 322 the HAL_LPTIM_MspInit could be implemented in the user file
EricLew 0:80ee8f3b695e 323 */
EricLew 0:80ee8f3b695e 324 }
EricLew 0:80ee8f3b695e 325
EricLew 0:80ee8f3b695e 326 /**
EricLew 0:80ee8f3b695e 327 * @brief DeInitialize LPTIM MSP.
EricLew 0:80ee8f3b695e 328 * @param hlptim: LPTIM handle
EricLew 0:80ee8f3b695e 329 * @retval None
EricLew 0:80ee8f3b695e 330 */
EricLew 0:80ee8f3b695e 331 __weak void HAL_LPTIM_MspDeInit(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 332 {
EricLew 0:80ee8f3b695e 333 /* NOTE : This function should not be modified, when the callback is needed,
EricLew 0:80ee8f3b695e 334 the HAL_LPTIM_MspDeInit could be implemented in the user file
EricLew 0:80ee8f3b695e 335 */
EricLew 0:80ee8f3b695e 336 }
EricLew 0:80ee8f3b695e 337
EricLew 0:80ee8f3b695e 338 /**
EricLew 0:80ee8f3b695e 339 * @}
EricLew 0:80ee8f3b695e 340 */
EricLew 0:80ee8f3b695e 341
EricLew 0:80ee8f3b695e 342 /** @defgroup LPTIM_Group2 LPTIM Start-Stop operation functions
EricLew 0:80ee8f3b695e 343 * @brief Start-Stop operation functions.
EricLew 0:80ee8f3b695e 344 *
EricLew 0:80ee8f3b695e 345 @verbatim
EricLew 0:80ee8f3b695e 346 ==============================================================================
EricLew 0:80ee8f3b695e 347 ##### LPTIM Start Stop operation functions #####
EricLew 0:80ee8f3b695e 348 ==============================================================================
EricLew 0:80ee8f3b695e 349 [..] This section provides functions allowing to:
EricLew 0:80ee8f3b695e 350 (+) Start the PWM mode.
EricLew 0:80ee8f3b695e 351 (+) Stop the PWM mode.
EricLew 0:80ee8f3b695e 352 (+) Start the One pulse mode.
EricLew 0:80ee8f3b695e 353 (+) Stop the One pulse mode.
EricLew 0:80ee8f3b695e 354 (+) Start the Set once mode.
EricLew 0:80ee8f3b695e 355 (+) Stop the Set once mode.
EricLew 0:80ee8f3b695e 356 (+) Start the Encoder mode.
EricLew 0:80ee8f3b695e 357 (+) Stop the Encoder mode.
EricLew 0:80ee8f3b695e 358 (+) Start the Timeout mode.
EricLew 0:80ee8f3b695e 359 (+) Stop the Timeout mode.
EricLew 0:80ee8f3b695e 360 (+) Start the Counter mode.
EricLew 0:80ee8f3b695e 361 (+) Stop the Counter mode.
EricLew 0:80ee8f3b695e 362
EricLew 0:80ee8f3b695e 363
EricLew 0:80ee8f3b695e 364 @endverbatim
EricLew 0:80ee8f3b695e 365 * @{
EricLew 0:80ee8f3b695e 366 */
EricLew 0:80ee8f3b695e 367
EricLew 0:80ee8f3b695e 368 /**
EricLew 0:80ee8f3b695e 369 * @brief Start the LPTIM PWM generation.
EricLew 0:80ee8f3b695e 370 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 371 * @param Period : Specifies the Autoreload value.
EricLew 0:80ee8f3b695e 372 * This parameter must be a value between 0x0000 and 0xFFFF.
EricLew 0:80ee8f3b695e 373 * @param Pulse : Specifies the compare value.
EricLew 0:80ee8f3b695e 374 * This parameter must be a value between 0x0000 and 0xFFFF.
EricLew 0:80ee8f3b695e 375 * @retval HAL status
EricLew 0:80ee8f3b695e 376 */
EricLew 0:80ee8f3b695e 377 HAL_StatusTypeDef HAL_LPTIM_PWM_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Pulse)
EricLew 0:80ee8f3b695e 378 {
EricLew 0:80ee8f3b695e 379 /* Check the parameters */
EricLew 0:80ee8f3b695e 380 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 381 assert_param(IS_LPTIM_PERIOD(Period));
EricLew 0:80ee8f3b695e 382 assert_param(IS_LPTIM_PULSE(Pulse));
EricLew 0:80ee8f3b695e 383
EricLew 0:80ee8f3b695e 384 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 385 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 386
EricLew 0:80ee8f3b695e 387 /* Reset WAVE bit to set PWM mode */
EricLew 0:80ee8f3b695e 388 hlptim->Instance->CFGR &= ~LPTIM_CFGR_WAVE;
EricLew 0:80ee8f3b695e 389
EricLew 0:80ee8f3b695e 390 /* Enable the Peripheral */
EricLew 0:80ee8f3b695e 391 __HAL_LPTIM_ENABLE(hlptim);
EricLew 0:80ee8f3b695e 392
EricLew 0:80ee8f3b695e 393 /* Load the period value in the autoreload register */
EricLew 0:80ee8f3b695e 394 __HAL_LPTIM_AUTORELOAD_SET(hlptim, Period);
EricLew 0:80ee8f3b695e 395
EricLew 0:80ee8f3b695e 396 /* Load the pulse value in the compare register */
EricLew 0:80ee8f3b695e 397 __HAL_LPTIM_COMPARE_SET(hlptim, Pulse);
EricLew 0:80ee8f3b695e 398
EricLew 0:80ee8f3b695e 399 /* Start timer in continuous mode */
EricLew 0:80ee8f3b695e 400 __HAL_LPTIM_START_CONTINUOUS(hlptim);
EricLew 0:80ee8f3b695e 401
EricLew 0:80ee8f3b695e 402 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 403 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 404
EricLew 0:80ee8f3b695e 405 /* Return function status */
EricLew 0:80ee8f3b695e 406 return HAL_OK;
EricLew 0:80ee8f3b695e 407 }
EricLew 0:80ee8f3b695e 408
EricLew 0:80ee8f3b695e 409 /**
EricLew 0:80ee8f3b695e 410 * @brief Stop the LPTIM PWM generation.
EricLew 0:80ee8f3b695e 411 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 412 * @retval HAL status
EricLew 0:80ee8f3b695e 413 */
EricLew 0:80ee8f3b695e 414 HAL_StatusTypeDef HAL_LPTIM_PWM_Stop(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 415 {
EricLew 0:80ee8f3b695e 416 /* Check the parameters */
EricLew 0:80ee8f3b695e 417 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 418
EricLew 0:80ee8f3b695e 419 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 420 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 421
EricLew 0:80ee8f3b695e 422 /* Disable the Peripheral */
EricLew 0:80ee8f3b695e 423 __HAL_LPTIM_DISABLE(hlptim);
EricLew 0:80ee8f3b695e 424
EricLew 0:80ee8f3b695e 425 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 426 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 427
EricLew 0:80ee8f3b695e 428 /* Return function status */
EricLew 0:80ee8f3b695e 429 return HAL_OK;
EricLew 0:80ee8f3b695e 430 }
EricLew 0:80ee8f3b695e 431
EricLew 0:80ee8f3b695e 432 /**
EricLew 0:80ee8f3b695e 433 * @brief Start the LPTIM PWM generation in interrupt mode.
EricLew 0:80ee8f3b695e 434 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 435 * @param Period : Specifies the Autoreload value.
EricLew 0:80ee8f3b695e 436 * This parameter must be a value between 0x0000 and 0xFFFF
EricLew 0:80ee8f3b695e 437 * @param Pulse : Specifies the compare value.
EricLew 0:80ee8f3b695e 438 * This parameter must be a value between 0x0000 and 0xFFFF
EricLew 0:80ee8f3b695e 439 * @retval HAL status
EricLew 0:80ee8f3b695e 440 */
EricLew 0:80ee8f3b695e 441 HAL_StatusTypeDef HAL_LPTIM_PWM_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Pulse)
EricLew 0:80ee8f3b695e 442 {
EricLew 0:80ee8f3b695e 443 /* Check the parameters */
EricLew 0:80ee8f3b695e 444 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 445 assert_param(IS_LPTIM_PERIOD(Period));
EricLew 0:80ee8f3b695e 446 assert_param(IS_LPTIM_PULSE(Pulse));
EricLew 0:80ee8f3b695e 447
EricLew 0:80ee8f3b695e 448 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 449 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 450
EricLew 0:80ee8f3b695e 451 /* Reset WAVE bit to set PWM mode */
EricLew 0:80ee8f3b695e 452 hlptim->Instance->CFGR &= ~LPTIM_CFGR_WAVE;
EricLew 0:80ee8f3b695e 453
EricLew 0:80ee8f3b695e 454 /* Enable Autoreload write complete interrupt */
EricLew 0:80ee8f3b695e 455 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_ARROK);
EricLew 0:80ee8f3b695e 456
EricLew 0:80ee8f3b695e 457 /* Enable Compare write complete interrupt */
EricLew 0:80ee8f3b695e 458 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_CMPOK);
EricLew 0:80ee8f3b695e 459
EricLew 0:80ee8f3b695e 460 /* Enable Autoreload match interrupt */
EricLew 0:80ee8f3b695e 461 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_ARRM);
EricLew 0:80ee8f3b695e 462
EricLew 0:80ee8f3b695e 463 /* Enable Compare match interrupt */
EricLew 0:80ee8f3b695e 464 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_CMPM);
EricLew 0:80ee8f3b695e 465
EricLew 0:80ee8f3b695e 466 /* If external trigger source is used, then enable external trigger interrupt */
EricLew 0:80ee8f3b695e 467 if ((hlptim->Init.Trigger.Source) != LPTIM_TRIGSOURCE_SOFTWARE)
EricLew 0:80ee8f3b695e 468 {
EricLew 0:80ee8f3b695e 469 /* Enable external trigger interrupt */
EricLew 0:80ee8f3b695e 470 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_EXTTRIG);
EricLew 0:80ee8f3b695e 471 }
EricLew 0:80ee8f3b695e 472
EricLew 0:80ee8f3b695e 473 /* Enable the Peripheral */
EricLew 0:80ee8f3b695e 474 __HAL_LPTIM_ENABLE(hlptim);
EricLew 0:80ee8f3b695e 475
EricLew 0:80ee8f3b695e 476 /* Load the period value in the autoreload register */
EricLew 0:80ee8f3b695e 477 __HAL_LPTIM_AUTORELOAD_SET(hlptim, Period);
EricLew 0:80ee8f3b695e 478
EricLew 0:80ee8f3b695e 479 /* Load the pulse value in the compare register */
EricLew 0:80ee8f3b695e 480 __HAL_LPTIM_COMPARE_SET(hlptim, Pulse);
EricLew 0:80ee8f3b695e 481
EricLew 0:80ee8f3b695e 482 /* Start timer in continuous mode */
EricLew 0:80ee8f3b695e 483 __HAL_LPTIM_START_CONTINUOUS(hlptim);
EricLew 0:80ee8f3b695e 484
EricLew 0:80ee8f3b695e 485 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 486 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 487
EricLew 0:80ee8f3b695e 488 /* Return function status */
EricLew 0:80ee8f3b695e 489 return HAL_OK;
EricLew 0:80ee8f3b695e 490 }
EricLew 0:80ee8f3b695e 491
EricLew 0:80ee8f3b695e 492 /**
EricLew 0:80ee8f3b695e 493 * @brief Stop the LPTIM PWM generation in interrupt mode.
EricLew 0:80ee8f3b695e 494 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 495 * @retval HAL status
EricLew 0:80ee8f3b695e 496 */
EricLew 0:80ee8f3b695e 497 HAL_StatusTypeDef HAL_LPTIM_PWM_Stop_IT(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 498 {
EricLew 0:80ee8f3b695e 499 /* Check the parameters */
EricLew 0:80ee8f3b695e 500 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 501
EricLew 0:80ee8f3b695e 502 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 503 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 504
EricLew 0:80ee8f3b695e 505 /* Disable the Peripheral */
EricLew 0:80ee8f3b695e 506 __HAL_LPTIM_DISABLE(hlptim);
EricLew 0:80ee8f3b695e 507
EricLew 0:80ee8f3b695e 508 /* Disable Autoreload write complete interrupt */
EricLew 0:80ee8f3b695e 509 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_ARROK);
EricLew 0:80ee8f3b695e 510
EricLew 0:80ee8f3b695e 511 /* Disable Compare write complete interrupt */
EricLew 0:80ee8f3b695e 512 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_CMPOK);
EricLew 0:80ee8f3b695e 513
EricLew 0:80ee8f3b695e 514 /* Disable Autoreload match interrupt */
EricLew 0:80ee8f3b695e 515 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_ARRM);
EricLew 0:80ee8f3b695e 516
EricLew 0:80ee8f3b695e 517 /* Disable Compare match interrupt */
EricLew 0:80ee8f3b695e 518 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_CMPM);
EricLew 0:80ee8f3b695e 519
EricLew 0:80ee8f3b695e 520 /* If external trigger source is used, then disable external trigger interrupt */
EricLew 0:80ee8f3b695e 521 if ((hlptim->Init.Trigger.Source) != LPTIM_TRIGSOURCE_SOFTWARE)
EricLew 0:80ee8f3b695e 522 {
EricLew 0:80ee8f3b695e 523 /* Disable external trigger interrupt */
EricLew 0:80ee8f3b695e 524 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_EXTTRIG);
EricLew 0:80ee8f3b695e 525 }
EricLew 0:80ee8f3b695e 526
EricLew 0:80ee8f3b695e 527 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 528 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 529
EricLew 0:80ee8f3b695e 530 /* Return function status */
EricLew 0:80ee8f3b695e 531 return HAL_OK;
EricLew 0:80ee8f3b695e 532 }
EricLew 0:80ee8f3b695e 533
EricLew 0:80ee8f3b695e 534 /**
EricLew 0:80ee8f3b695e 535 * @brief Start the LPTIM One pulse generation.
EricLew 0:80ee8f3b695e 536 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 537 * @param Period : Specifies the Autoreload value.
EricLew 0:80ee8f3b695e 538 * This parameter must be a value between 0x0000 and 0xFFFF.
EricLew 0:80ee8f3b695e 539 * @param Pulse : Specifies the compare value.
EricLew 0:80ee8f3b695e 540 * This parameter must be a value between 0x0000 and 0xFFFF.
EricLew 0:80ee8f3b695e 541 * @retval HAL status
EricLew 0:80ee8f3b695e 542 */
EricLew 0:80ee8f3b695e 543 HAL_StatusTypeDef HAL_LPTIM_OnePulse_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Pulse)
EricLew 0:80ee8f3b695e 544 {
EricLew 0:80ee8f3b695e 545 /* Check the parameters */
EricLew 0:80ee8f3b695e 546 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 547 assert_param(IS_LPTIM_PERIOD(Period));
EricLew 0:80ee8f3b695e 548 assert_param(IS_LPTIM_PULSE(Pulse));
EricLew 0:80ee8f3b695e 549
EricLew 0:80ee8f3b695e 550 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 551 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 552
EricLew 0:80ee8f3b695e 553 /* Reset WAVE bit to set one pulse mode */
EricLew 0:80ee8f3b695e 554 hlptim->Instance->CFGR &= ~LPTIM_CFGR_WAVE;
EricLew 0:80ee8f3b695e 555
EricLew 0:80ee8f3b695e 556 /* Enable the Peripheral */
EricLew 0:80ee8f3b695e 557 __HAL_LPTIM_ENABLE(hlptim);
EricLew 0:80ee8f3b695e 558
EricLew 0:80ee8f3b695e 559 /* Load the period value in the autoreload register */
EricLew 0:80ee8f3b695e 560 __HAL_LPTIM_AUTORELOAD_SET(hlptim, Period);
EricLew 0:80ee8f3b695e 561
EricLew 0:80ee8f3b695e 562 /* Load the pulse value in the compare register */
EricLew 0:80ee8f3b695e 563 __HAL_LPTIM_COMPARE_SET(hlptim, Pulse);
EricLew 0:80ee8f3b695e 564
EricLew 0:80ee8f3b695e 565 /* Start timer in continuous mode */
EricLew 0:80ee8f3b695e 566 __HAL_LPTIM_START_SINGLE(hlptim);
EricLew 0:80ee8f3b695e 567
EricLew 0:80ee8f3b695e 568 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 569 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 570
EricLew 0:80ee8f3b695e 571 /* Return function status */
EricLew 0:80ee8f3b695e 572 return HAL_OK;
EricLew 0:80ee8f3b695e 573 }
EricLew 0:80ee8f3b695e 574
EricLew 0:80ee8f3b695e 575 /**
EricLew 0:80ee8f3b695e 576 * @brief Stop the LPTIM One pulse generation.
EricLew 0:80ee8f3b695e 577 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 578 * @retval HAL status
EricLew 0:80ee8f3b695e 579 */
EricLew 0:80ee8f3b695e 580 HAL_StatusTypeDef HAL_LPTIM_OnePulse_Stop(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 581 {
EricLew 0:80ee8f3b695e 582 /* Check the parameters */
EricLew 0:80ee8f3b695e 583 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 584
EricLew 0:80ee8f3b695e 585 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 586 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 587
EricLew 0:80ee8f3b695e 588 /* Disable the Peripheral */
EricLew 0:80ee8f3b695e 589 __HAL_LPTIM_DISABLE(hlptim);
EricLew 0:80ee8f3b695e 590
EricLew 0:80ee8f3b695e 591 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 592 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 593
EricLew 0:80ee8f3b695e 594 /* Return function status */
EricLew 0:80ee8f3b695e 595 return HAL_OK;
EricLew 0:80ee8f3b695e 596 }
EricLew 0:80ee8f3b695e 597
EricLew 0:80ee8f3b695e 598 /**
EricLew 0:80ee8f3b695e 599 * @brief Start the LPTIM One pulse generation in interrupt mode.
EricLew 0:80ee8f3b695e 600 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 601 * @param Period : Specifies the Autoreload value.
EricLew 0:80ee8f3b695e 602 * This parameter must be a value between 0x0000 and 0xFFFF.
EricLew 0:80ee8f3b695e 603 * @param Pulse : Specifies the compare value.
EricLew 0:80ee8f3b695e 604 * This parameter must be a value between 0x0000 and 0xFFFF.
EricLew 0:80ee8f3b695e 605 * @retval HAL status
EricLew 0:80ee8f3b695e 606 */
EricLew 0:80ee8f3b695e 607 HAL_StatusTypeDef HAL_LPTIM_OnePulse_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Pulse)
EricLew 0:80ee8f3b695e 608 {
EricLew 0:80ee8f3b695e 609 /* Check the parameters */
EricLew 0:80ee8f3b695e 610 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 611 assert_param(IS_LPTIM_PERIOD(Period));
EricLew 0:80ee8f3b695e 612 assert_param(IS_LPTIM_PULSE(Pulse));
EricLew 0:80ee8f3b695e 613
EricLew 0:80ee8f3b695e 614 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 615 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 616
EricLew 0:80ee8f3b695e 617 /* Reset WAVE bit to set one pulse mode */
EricLew 0:80ee8f3b695e 618 hlptim->Instance->CFGR &= ~LPTIM_CFGR_WAVE;
EricLew 0:80ee8f3b695e 619
EricLew 0:80ee8f3b695e 620 /* Enable Autoreload write complete interrupt */
EricLew 0:80ee8f3b695e 621 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_ARROK);
EricLew 0:80ee8f3b695e 622
EricLew 0:80ee8f3b695e 623 /* Enable Compare write complete interrupt */
EricLew 0:80ee8f3b695e 624 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_CMPOK);
EricLew 0:80ee8f3b695e 625
EricLew 0:80ee8f3b695e 626 /* Enable Autoreload match interrupt */
EricLew 0:80ee8f3b695e 627 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_ARRM);
EricLew 0:80ee8f3b695e 628
EricLew 0:80ee8f3b695e 629 /* Enable Compare match interrupt */
EricLew 0:80ee8f3b695e 630 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_CMPM);
EricLew 0:80ee8f3b695e 631
EricLew 0:80ee8f3b695e 632 /* If external trigger source is used, then enable external trigger interrupt */
EricLew 0:80ee8f3b695e 633 if ((hlptim->Init.Trigger.Source) != LPTIM_TRIGSOURCE_SOFTWARE)
EricLew 0:80ee8f3b695e 634 {
EricLew 0:80ee8f3b695e 635 /* Enable external trigger interrupt */
EricLew 0:80ee8f3b695e 636 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_EXTTRIG);
EricLew 0:80ee8f3b695e 637 }
EricLew 0:80ee8f3b695e 638
EricLew 0:80ee8f3b695e 639 /* Enable the Peripheral */
EricLew 0:80ee8f3b695e 640 __HAL_LPTIM_ENABLE(hlptim);
EricLew 0:80ee8f3b695e 641
EricLew 0:80ee8f3b695e 642 /* Load the period value in the autoreload register */
EricLew 0:80ee8f3b695e 643 __HAL_LPTIM_AUTORELOAD_SET(hlptim, Period);
EricLew 0:80ee8f3b695e 644
EricLew 0:80ee8f3b695e 645 /* Load the pulse value in the compare register */
EricLew 0:80ee8f3b695e 646 __HAL_LPTIM_COMPARE_SET(hlptim, Pulse);
EricLew 0:80ee8f3b695e 647
EricLew 0:80ee8f3b695e 648 /* Start timer in continuous mode */
EricLew 0:80ee8f3b695e 649 __HAL_LPTIM_START_SINGLE(hlptim);
EricLew 0:80ee8f3b695e 650
EricLew 0:80ee8f3b695e 651 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 652 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 653
EricLew 0:80ee8f3b695e 654 /* Return function status */
EricLew 0:80ee8f3b695e 655 return HAL_OK;
EricLew 0:80ee8f3b695e 656 }
EricLew 0:80ee8f3b695e 657
EricLew 0:80ee8f3b695e 658 /**
EricLew 0:80ee8f3b695e 659 * @brief Stop the LPTIM One pulse generation in interrupt mode.
EricLew 0:80ee8f3b695e 660 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 661 * @retval HAL status
EricLew 0:80ee8f3b695e 662 */
EricLew 0:80ee8f3b695e 663 HAL_StatusTypeDef HAL_LPTIM_OnePulse_Stop_IT(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 664 {
EricLew 0:80ee8f3b695e 665 /* Check the parameters */
EricLew 0:80ee8f3b695e 666 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 667
EricLew 0:80ee8f3b695e 668 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 669 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 670
EricLew 0:80ee8f3b695e 671 /* Disable the Peripheral */
EricLew 0:80ee8f3b695e 672 __HAL_LPTIM_DISABLE(hlptim);
EricLew 0:80ee8f3b695e 673
EricLew 0:80ee8f3b695e 674 /* Disable Autoreload write complete interrupt */
EricLew 0:80ee8f3b695e 675 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_ARROK);
EricLew 0:80ee8f3b695e 676
EricLew 0:80ee8f3b695e 677 /* Disable Compare write complete interrupt */
EricLew 0:80ee8f3b695e 678 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_CMPOK);
EricLew 0:80ee8f3b695e 679
EricLew 0:80ee8f3b695e 680 /* Disable Autoreload match interrupt */
EricLew 0:80ee8f3b695e 681 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_ARRM);
EricLew 0:80ee8f3b695e 682
EricLew 0:80ee8f3b695e 683 /* Disable Compare match interrupt */
EricLew 0:80ee8f3b695e 684 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_CMPM);
EricLew 0:80ee8f3b695e 685
EricLew 0:80ee8f3b695e 686 /* If external trigger source is used, then disable external trigger interrupt */
EricLew 0:80ee8f3b695e 687 if ((hlptim->Init.Trigger.Source) != LPTIM_TRIGSOURCE_SOFTWARE)
EricLew 0:80ee8f3b695e 688 {
EricLew 0:80ee8f3b695e 689 /* Disable external trigger interrupt */
EricLew 0:80ee8f3b695e 690 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_EXTTRIG);
EricLew 0:80ee8f3b695e 691 }
EricLew 0:80ee8f3b695e 692
EricLew 0:80ee8f3b695e 693 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 694 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 695
EricLew 0:80ee8f3b695e 696 /* Return function status */
EricLew 0:80ee8f3b695e 697 return HAL_OK;
EricLew 0:80ee8f3b695e 698 }
EricLew 0:80ee8f3b695e 699
EricLew 0:80ee8f3b695e 700 /**
EricLew 0:80ee8f3b695e 701 * @brief Start the LPTIM in Set once mode.
EricLew 0:80ee8f3b695e 702 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 703 * @param Period : Specifies the Autoreload value.
EricLew 0:80ee8f3b695e 704 * This parameter must be a value between 0x0000 and 0xFFFF.
EricLew 0:80ee8f3b695e 705 * @param Pulse : Specifies the compare value.
EricLew 0:80ee8f3b695e 706 * This parameter must be a value between 0x0000 and 0xFFFF.
EricLew 0:80ee8f3b695e 707 * @retval HAL status
EricLew 0:80ee8f3b695e 708 */
EricLew 0:80ee8f3b695e 709 HAL_StatusTypeDef HAL_LPTIM_SetOnce_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Pulse)
EricLew 0:80ee8f3b695e 710 {
EricLew 0:80ee8f3b695e 711 /* Check the parameters */
EricLew 0:80ee8f3b695e 712 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 713 assert_param(IS_LPTIM_PERIOD(Period));
EricLew 0:80ee8f3b695e 714 assert_param(IS_LPTIM_PULSE(Pulse));
EricLew 0:80ee8f3b695e 715
EricLew 0:80ee8f3b695e 716 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 717 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 718
EricLew 0:80ee8f3b695e 719 /* Set WAVE bit to enable the set once mode */
EricLew 0:80ee8f3b695e 720 hlptim->Instance->CFGR |= LPTIM_CFGR_WAVE;
EricLew 0:80ee8f3b695e 721
EricLew 0:80ee8f3b695e 722 /* Enable the Peripheral */
EricLew 0:80ee8f3b695e 723 __HAL_LPTIM_ENABLE(hlptim);
EricLew 0:80ee8f3b695e 724
EricLew 0:80ee8f3b695e 725 /* Load the period value in the autoreload register */
EricLew 0:80ee8f3b695e 726 __HAL_LPTIM_AUTORELOAD_SET(hlptim, Period);
EricLew 0:80ee8f3b695e 727
EricLew 0:80ee8f3b695e 728 /* Load the pulse value in the compare register */
EricLew 0:80ee8f3b695e 729 __HAL_LPTIM_COMPARE_SET(hlptim, Pulse);
EricLew 0:80ee8f3b695e 730
EricLew 0:80ee8f3b695e 731 /* Start timer in continuous mode */
EricLew 0:80ee8f3b695e 732 __HAL_LPTIM_START_SINGLE(hlptim);
EricLew 0:80ee8f3b695e 733
EricLew 0:80ee8f3b695e 734 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 735 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 736
EricLew 0:80ee8f3b695e 737 /* Return function status */
EricLew 0:80ee8f3b695e 738 return HAL_OK;
EricLew 0:80ee8f3b695e 739 }
EricLew 0:80ee8f3b695e 740
EricLew 0:80ee8f3b695e 741 /**
EricLew 0:80ee8f3b695e 742 * @brief Stop the LPTIM Set once mode.
EricLew 0:80ee8f3b695e 743 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 744 * @retval HAL status
EricLew 0:80ee8f3b695e 745 */
EricLew 0:80ee8f3b695e 746 HAL_StatusTypeDef HAL_LPTIM_SetOnce_Stop(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 747 {
EricLew 0:80ee8f3b695e 748 /* Check the parameters */
EricLew 0:80ee8f3b695e 749 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 750
EricLew 0:80ee8f3b695e 751 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 752 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 753
EricLew 0:80ee8f3b695e 754 /* Disable the Peripheral */
EricLew 0:80ee8f3b695e 755 __HAL_LPTIM_DISABLE(hlptim);
EricLew 0:80ee8f3b695e 756
EricLew 0:80ee8f3b695e 757 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 758 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 759
EricLew 0:80ee8f3b695e 760 /* Return function status */
EricLew 0:80ee8f3b695e 761 return HAL_OK;
EricLew 0:80ee8f3b695e 762 }
EricLew 0:80ee8f3b695e 763
EricLew 0:80ee8f3b695e 764 /**
EricLew 0:80ee8f3b695e 765 * @brief Start the LPTIM Set once mode in interrupt mode.
EricLew 0:80ee8f3b695e 766 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 767 * @param Period : Specifies the Autoreload value.
EricLew 0:80ee8f3b695e 768 * This parameter must be a value between 0x0000 and 0xFFFF.
EricLew 0:80ee8f3b695e 769 * @param Pulse : Specifies the compare value.
EricLew 0:80ee8f3b695e 770 * This parameter must be a value between 0x0000 and 0xFFFF.
EricLew 0:80ee8f3b695e 771 * @retval HAL status
EricLew 0:80ee8f3b695e 772 */
EricLew 0:80ee8f3b695e 773 HAL_StatusTypeDef HAL_LPTIM_SetOnce_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Pulse)
EricLew 0:80ee8f3b695e 774 {
EricLew 0:80ee8f3b695e 775 /* Check the parameters */
EricLew 0:80ee8f3b695e 776 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 777 assert_param(IS_LPTIM_PERIOD(Period));
EricLew 0:80ee8f3b695e 778 assert_param(IS_LPTIM_PULSE(Pulse));
EricLew 0:80ee8f3b695e 779
EricLew 0:80ee8f3b695e 780 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 781 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 782
EricLew 0:80ee8f3b695e 783 /* Set WAVE bit to enable the set once mode */
EricLew 0:80ee8f3b695e 784 hlptim->Instance->CFGR |= LPTIM_CFGR_WAVE;
EricLew 0:80ee8f3b695e 785
EricLew 0:80ee8f3b695e 786 /* Enable Autoreload write complete interrupt */
EricLew 0:80ee8f3b695e 787 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_ARROK);
EricLew 0:80ee8f3b695e 788
EricLew 0:80ee8f3b695e 789 /* Enable Compare write complete interrupt */
EricLew 0:80ee8f3b695e 790 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_CMPOK);
EricLew 0:80ee8f3b695e 791
EricLew 0:80ee8f3b695e 792 /* Enable Autoreload match interrupt */
EricLew 0:80ee8f3b695e 793 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_ARRM);
EricLew 0:80ee8f3b695e 794
EricLew 0:80ee8f3b695e 795 /* Enable Compare match interrupt */
EricLew 0:80ee8f3b695e 796 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_CMPM);
EricLew 0:80ee8f3b695e 797
EricLew 0:80ee8f3b695e 798 /* If external trigger source is used, then enable external trigger interrupt */
EricLew 0:80ee8f3b695e 799 if ((hlptim->Init.Trigger.Source) != LPTIM_TRIGSOURCE_SOFTWARE)
EricLew 0:80ee8f3b695e 800 {
EricLew 0:80ee8f3b695e 801 /* Enable external trigger interrupt */
EricLew 0:80ee8f3b695e 802 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_EXTTRIG);
EricLew 0:80ee8f3b695e 803 }
EricLew 0:80ee8f3b695e 804
EricLew 0:80ee8f3b695e 805 /* Enable the Peripheral */
EricLew 0:80ee8f3b695e 806 __HAL_LPTIM_ENABLE(hlptim);
EricLew 0:80ee8f3b695e 807
EricLew 0:80ee8f3b695e 808 /* Load the period value in the autoreload register */
EricLew 0:80ee8f3b695e 809 __HAL_LPTIM_AUTORELOAD_SET(hlptim, Period);
EricLew 0:80ee8f3b695e 810
EricLew 0:80ee8f3b695e 811 /* Load the pulse value in the compare register */
EricLew 0:80ee8f3b695e 812 __HAL_LPTIM_COMPARE_SET(hlptim, Pulse);
EricLew 0:80ee8f3b695e 813
EricLew 0:80ee8f3b695e 814 /* Start timer in continuous mode */
EricLew 0:80ee8f3b695e 815 __HAL_LPTIM_START_SINGLE(hlptim);
EricLew 0:80ee8f3b695e 816
EricLew 0:80ee8f3b695e 817 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 818 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 819
EricLew 0:80ee8f3b695e 820 /* Return function status */
EricLew 0:80ee8f3b695e 821 return HAL_OK;
EricLew 0:80ee8f3b695e 822 }
EricLew 0:80ee8f3b695e 823
EricLew 0:80ee8f3b695e 824 /**
EricLew 0:80ee8f3b695e 825 * @brief Stop the LPTIM Set once mode in interrupt mode.
EricLew 0:80ee8f3b695e 826 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 827 * @retval HAL status
EricLew 0:80ee8f3b695e 828 */
EricLew 0:80ee8f3b695e 829 HAL_StatusTypeDef HAL_LPTIM_SetOnce_Stop_IT(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 830 {
EricLew 0:80ee8f3b695e 831 /* Check the parameters */
EricLew 0:80ee8f3b695e 832 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 833
EricLew 0:80ee8f3b695e 834 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 835 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 836
EricLew 0:80ee8f3b695e 837 /* Disable the Peripheral */
EricLew 0:80ee8f3b695e 838 __HAL_LPTIM_DISABLE(hlptim);
EricLew 0:80ee8f3b695e 839
EricLew 0:80ee8f3b695e 840 /* Disable Autoreload write complete interrupt */
EricLew 0:80ee8f3b695e 841 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_ARROK);
EricLew 0:80ee8f3b695e 842
EricLew 0:80ee8f3b695e 843 /* Disable Compare write complete interrupt */
EricLew 0:80ee8f3b695e 844 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_CMPOK);
EricLew 0:80ee8f3b695e 845
EricLew 0:80ee8f3b695e 846 /* Disable Autoreload match interrupt */
EricLew 0:80ee8f3b695e 847 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_ARRM);
EricLew 0:80ee8f3b695e 848
EricLew 0:80ee8f3b695e 849 /* Disable Compare match interrupt */
EricLew 0:80ee8f3b695e 850 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_CMPM);
EricLew 0:80ee8f3b695e 851
EricLew 0:80ee8f3b695e 852 /* If external trigger source is used, then disable external trigger interrupt */
EricLew 0:80ee8f3b695e 853 if ((hlptim->Init.Trigger.Source) != LPTIM_TRIGSOURCE_SOFTWARE)
EricLew 0:80ee8f3b695e 854 {
EricLew 0:80ee8f3b695e 855 /* Disable external trigger interrupt */
EricLew 0:80ee8f3b695e 856 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_EXTTRIG);
EricLew 0:80ee8f3b695e 857 }
EricLew 0:80ee8f3b695e 858
EricLew 0:80ee8f3b695e 859 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 860 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 861
EricLew 0:80ee8f3b695e 862 /* Return function status */
EricLew 0:80ee8f3b695e 863 return HAL_OK;
EricLew 0:80ee8f3b695e 864 }
EricLew 0:80ee8f3b695e 865
EricLew 0:80ee8f3b695e 866 /**
EricLew 0:80ee8f3b695e 867 * @brief Start the Encoder interface.
EricLew 0:80ee8f3b695e 868 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 869 * @param Period : Specifies the Autoreload value.
EricLew 0:80ee8f3b695e 870 * This parameter must be a value between 0x0000 and 0xFFFF.
EricLew 0:80ee8f3b695e 871 * @retval HAL status
EricLew 0:80ee8f3b695e 872 */
EricLew 0:80ee8f3b695e 873 HAL_StatusTypeDef HAL_LPTIM_Encoder_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Period)
EricLew 0:80ee8f3b695e 874 {
EricLew 0:80ee8f3b695e 875 HAL_StatusTypeDef status = HAL_OK;
EricLew 0:80ee8f3b695e 876 uint32_t tmpcfgr;
EricLew 0:80ee8f3b695e 877
EricLew 0:80ee8f3b695e 878 /* Check the parameters */
EricLew 0:80ee8f3b695e 879 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 880 assert_param(IS_LPTIM_PERIOD(Period));
EricLew 0:80ee8f3b695e 881 assert_param(hlptim->Init.Clock.Source == LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC);
EricLew 0:80ee8f3b695e 882 assert_param(hlptim->Init.Clock.Prescaler == LPTIM_PRESCALER_DIV1);
EricLew 0:80ee8f3b695e 883 assert_param(IS_LPTIM_CLOCK_POLARITY(hlptim->Init.UltraLowPowerClock.Polarity));
EricLew 0:80ee8f3b695e 884
EricLew 0:80ee8f3b695e 885 /* Encoder feature is only available for LPTIM1 instance */
EricLew 0:80ee8f3b695e 886 if (hlptim->Instance == LPTIM1)
EricLew 0:80ee8f3b695e 887 {
EricLew 0:80ee8f3b695e 888 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 889 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 890
EricLew 0:80ee8f3b695e 891 /* Get the LPTIMx CFGR value */
EricLew 0:80ee8f3b695e 892 tmpcfgr = hlptim->Instance->CFGR;
EricLew 0:80ee8f3b695e 893
EricLew 0:80ee8f3b695e 894 /* Clear CKPOL bits */
EricLew 0:80ee8f3b695e 895 tmpcfgr &= (uint32_t)(~LPTIM_CFGR_CKPOL);
EricLew 0:80ee8f3b695e 896
EricLew 0:80ee8f3b695e 897 /* Set Input polarity */
EricLew 0:80ee8f3b695e 898 tmpcfgr |= hlptim->Init.UltraLowPowerClock.Polarity;
EricLew 0:80ee8f3b695e 899
EricLew 0:80ee8f3b695e 900 /* Write to LPTIMx CFGR */
EricLew 0:80ee8f3b695e 901 hlptim->Instance->CFGR = tmpcfgr;
EricLew 0:80ee8f3b695e 902
EricLew 0:80ee8f3b695e 903 /* Set ENC bit to enable the encoder interface */
EricLew 0:80ee8f3b695e 904 hlptim->Instance->CFGR |= LPTIM_CFGR_ENC;
EricLew 0:80ee8f3b695e 905
EricLew 0:80ee8f3b695e 906 /* Enable the Peripheral */
EricLew 0:80ee8f3b695e 907 __HAL_LPTIM_ENABLE(hlptim);
EricLew 0:80ee8f3b695e 908
EricLew 0:80ee8f3b695e 909 /* Load the period value in the autoreload register */
EricLew 0:80ee8f3b695e 910 __HAL_LPTIM_AUTORELOAD_SET(hlptim, Period);
EricLew 0:80ee8f3b695e 911
EricLew 0:80ee8f3b695e 912 /* Start timer in continuous mode */
EricLew 0:80ee8f3b695e 913 __HAL_LPTIM_START_CONTINUOUS(hlptim);
EricLew 0:80ee8f3b695e 914
EricLew 0:80ee8f3b695e 915 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 916 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 917 }
EricLew 0:80ee8f3b695e 918 else
EricLew 0:80ee8f3b695e 919 {
EricLew 0:80ee8f3b695e 920 status = HAL_ERROR;
EricLew 0:80ee8f3b695e 921 }
EricLew 0:80ee8f3b695e 922
EricLew 0:80ee8f3b695e 923 /* Return function status */
EricLew 0:80ee8f3b695e 924 return status;
EricLew 0:80ee8f3b695e 925 }
EricLew 0:80ee8f3b695e 926
EricLew 0:80ee8f3b695e 927 /**
EricLew 0:80ee8f3b695e 928 * @brief Stop the Encoder interface.
EricLew 0:80ee8f3b695e 929 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 930 * @retval HAL status
EricLew 0:80ee8f3b695e 931 */
EricLew 0:80ee8f3b695e 932 HAL_StatusTypeDef HAL_LPTIM_Encoder_Stop(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 933 {
EricLew 0:80ee8f3b695e 934 /* Check the parameters */
EricLew 0:80ee8f3b695e 935 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 936
EricLew 0:80ee8f3b695e 937 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 938 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 939
EricLew 0:80ee8f3b695e 940 /* Disable the Peripheral */
EricLew 0:80ee8f3b695e 941 __HAL_LPTIM_DISABLE(hlptim);
EricLew 0:80ee8f3b695e 942
EricLew 0:80ee8f3b695e 943 /* Reset ENC bit to disable the encoder interface */
EricLew 0:80ee8f3b695e 944 hlptim->Instance->CFGR &= ~LPTIM_CFGR_ENC;
EricLew 0:80ee8f3b695e 945
EricLew 0:80ee8f3b695e 946 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 947 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 948
EricLew 0:80ee8f3b695e 949 /* Return function status */
EricLew 0:80ee8f3b695e 950 return HAL_OK;
EricLew 0:80ee8f3b695e 951 }
EricLew 0:80ee8f3b695e 952
EricLew 0:80ee8f3b695e 953 /**
EricLew 0:80ee8f3b695e 954 * @brief Start the Encoder interface in interrupt mode.
EricLew 0:80ee8f3b695e 955 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 956 * @param Period : Specifies the Autoreload value.
EricLew 0:80ee8f3b695e 957 * This parameter must be a value between 0x0000 and 0xFFFF.
EricLew 0:80ee8f3b695e 958 * @retval HAL status
EricLew 0:80ee8f3b695e 959 */
EricLew 0:80ee8f3b695e 960 HAL_StatusTypeDef HAL_LPTIM_Encoder_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Period)
EricLew 0:80ee8f3b695e 961 {
EricLew 0:80ee8f3b695e 962 HAL_StatusTypeDef status = HAL_OK;
EricLew 0:80ee8f3b695e 963 uint32_t tmpcfgr;
EricLew 0:80ee8f3b695e 964
EricLew 0:80ee8f3b695e 965 /* Check the parameters */
EricLew 0:80ee8f3b695e 966 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 967 assert_param(IS_LPTIM_PERIOD(Period));
EricLew 0:80ee8f3b695e 968 assert_param(hlptim->Init.Clock.Source == LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC);
EricLew 0:80ee8f3b695e 969 assert_param(hlptim->Init.Clock.Prescaler == LPTIM_PRESCALER_DIV1);
EricLew 0:80ee8f3b695e 970 assert_param(IS_LPTIM_CLOCK_POLARITY(hlptim->Init.UltraLowPowerClock.Polarity));
EricLew 0:80ee8f3b695e 971
EricLew 0:80ee8f3b695e 972 /* Encoder feature is only available for LPTIM1 instance */
EricLew 0:80ee8f3b695e 973 if (hlptim->Instance == LPTIM1)
EricLew 0:80ee8f3b695e 974 {
EricLew 0:80ee8f3b695e 975 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 976 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 977
EricLew 0:80ee8f3b695e 978 /* Configure edge sensitivity for encoder mode */
EricLew 0:80ee8f3b695e 979 /* Get the LPTIMx CFGR value */
EricLew 0:80ee8f3b695e 980 tmpcfgr = hlptim->Instance->CFGR;
EricLew 0:80ee8f3b695e 981
EricLew 0:80ee8f3b695e 982 /* Clear CKPOL bits */
EricLew 0:80ee8f3b695e 983 tmpcfgr &= (uint32_t)(~LPTIM_CFGR_CKPOL);
EricLew 0:80ee8f3b695e 984
EricLew 0:80ee8f3b695e 985 /* Set Input polarity */
EricLew 0:80ee8f3b695e 986 tmpcfgr |= hlptim->Init.UltraLowPowerClock.Polarity;
EricLew 0:80ee8f3b695e 987
EricLew 0:80ee8f3b695e 988 /* Write to LPTIMx CFGR */
EricLew 0:80ee8f3b695e 989 hlptim->Instance->CFGR = tmpcfgr;
EricLew 0:80ee8f3b695e 990
EricLew 0:80ee8f3b695e 991 /* Set ENC bit to enable the encoder interface */
EricLew 0:80ee8f3b695e 992 hlptim->Instance->CFGR |= LPTIM_CFGR_ENC;
EricLew 0:80ee8f3b695e 993
EricLew 0:80ee8f3b695e 994 /* Enable "switch to down direction" interrupt */
EricLew 0:80ee8f3b695e 995 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_DOWN);
EricLew 0:80ee8f3b695e 996
EricLew 0:80ee8f3b695e 997 /* Enable "switch to up direction" interrupt */
EricLew 0:80ee8f3b695e 998 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_UP);
EricLew 0:80ee8f3b695e 999
EricLew 0:80ee8f3b695e 1000 /* Enable the Peripheral */
EricLew 0:80ee8f3b695e 1001 __HAL_LPTIM_ENABLE(hlptim);
EricLew 0:80ee8f3b695e 1002
EricLew 0:80ee8f3b695e 1003 /* Load the period value in the autoreload register */
EricLew 0:80ee8f3b695e 1004 __HAL_LPTIM_AUTORELOAD_SET(hlptim, Period);
EricLew 0:80ee8f3b695e 1005
EricLew 0:80ee8f3b695e 1006 /* Start timer in continuous mode */
EricLew 0:80ee8f3b695e 1007 __HAL_LPTIM_START_CONTINUOUS(hlptim);
EricLew 0:80ee8f3b695e 1008
EricLew 0:80ee8f3b695e 1009 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 1010 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 1011 }
EricLew 0:80ee8f3b695e 1012 else
EricLew 0:80ee8f3b695e 1013 {
EricLew 0:80ee8f3b695e 1014 status = HAL_ERROR;
EricLew 0:80ee8f3b695e 1015 }
EricLew 0:80ee8f3b695e 1016
EricLew 0:80ee8f3b695e 1017 /* Return function status */
EricLew 0:80ee8f3b695e 1018 return status;
EricLew 0:80ee8f3b695e 1019 }
EricLew 0:80ee8f3b695e 1020
EricLew 0:80ee8f3b695e 1021 /**
EricLew 0:80ee8f3b695e 1022 * @brief Stop the Encoder interface in interrupt mode.
EricLew 0:80ee8f3b695e 1023 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 1024 * @retval HAL status
EricLew 0:80ee8f3b695e 1025 */
EricLew 0:80ee8f3b695e 1026 HAL_StatusTypeDef HAL_LPTIM_Encoder_Stop_IT(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 1027 {
EricLew 0:80ee8f3b695e 1028 /* Check the parameters */
EricLew 0:80ee8f3b695e 1029 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 1030
EricLew 0:80ee8f3b695e 1031 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 1032 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 1033
EricLew 0:80ee8f3b695e 1034 /* Disable the Peripheral */
EricLew 0:80ee8f3b695e 1035 __HAL_LPTIM_DISABLE(hlptim);
EricLew 0:80ee8f3b695e 1036
EricLew 0:80ee8f3b695e 1037 /* Reset ENC bit to disable the encoder interface */
EricLew 0:80ee8f3b695e 1038 hlptim->Instance->CFGR &= ~LPTIM_CFGR_ENC;
EricLew 0:80ee8f3b695e 1039
EricLew 0:80ee8f3b695e 1040 /* Disable "switch to down direction" interrupt */
EricLew 0:80ee8f3b695e 1041 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_DOWN);
EricLew 0:80ee8f3b695e 1042
EricLew 0:80ee8f3b695e 1043 /* Disable "switch to up direction" interrupt */
EricLew 0:80ee8f3b695e 1044 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_UP);
EricLew 0:80ee8f3b695e 1045
EricLew 0:80ee8f3b695e 1046 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 1047 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 1048
EricLew 0:80ee8f3b695e 1049 /* Return function status */
EricLew 0:80ee8f3b695e 1050 return HAL_OK;
EricLew 0:80ee8f3b695e 1051 }
EricLew 0:80ee8f3b695e 1052
EricLew 0:80ee8f3b695e 1053 /**
EricLew 0:80ee8f3b695e 1054 * @brief Start the Timeout function.
EricLew 0:80ee8f3b695e 1055 * @note The first trigger event will start the timer, any successive
EricLew 0:80ee8f3b695e 1056 * trigger event will reset the counter and the timer restarts.
EricLew 0:80ee8f3b695e 1057 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 1058 * @param Period : Specifies the Autoreload value.
EricLew 0:80ee8f3b695e 1059 * This parameter must be a value between 0x0000 and 0xFFFF.
EricLew 0:80ee8f3b695e 1060 * @param Timeout : Specifies the TimeOut value to rest the counter.
EricLew 0:80ee8f3b695e 1061 * This parameter must be a value between 0x0000 and 0xFFFF.
EricLew 0:80ee8f3b695e 1062 * @retval HAL status
EricLew 0:80ee8f3b695e 1063 */
EricLew 0:80ee8f3b695e 1064 HAL_StatusTypeDef HAL_LPTIM_TimeOut_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Timeout)
EricLew 0:80ee8f3b695e 1065 {
EricLew 0:80ee8f3b695e 1066 /* Check the parameters */
EricLew 0:80ee8f3b695e 1067 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 1068 assert_param(IS_LPTIM_PERIOD(Period));
EricLew 0:80ee8f3b695e 1069 assert_param(IS_LPTIM_PULSE(Timeout));
EricLew 0:80ee8f3b695e 1070
EricLew 0:80ee8f3b695e 1071 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 1072 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 1073
EricLew 0:80ee8f3b695e 1074 /* Set TIMOUT bit to enable the timeout function */
EricLew 0:80ee8f3b695e 1075 hlptim->Instance->CFGR |= LPTIM_CFGR_TIMOUT;
EricLew 0:80ee8f3b695e 1076
EricLew 0:80ee8f3b695e 1077 /* Enable the Peripheral */
EricLew 0:80ee8f3b695e 1078 __HAL_LPTIM_ENABLE(hlptim);
EricLew 0:80ee8f3b695e 1079
EricLew 0:80ee8f3b695e 1080 /* Load the period value in the autoreload register */
EricLew 0:80ee8f3b695e 1081 __HAL_LPTIM_AUTORELOAD_SET(hlptim, Period);
EricLew 0:80ee8f3b695e 1082
EricLew 0:80ee8f3b695e 1083 /* Load the Timeout value in the compare register */
EricLew 0:80ee8f3b695e 1084 __HAL_LPTIM_COMPARE_SET(hlptim, Timeout);
EricLew 0:80ee8f3b695e 1085
EricLew 0:80ee8f3b695e 1086 /* Start timer in continuous mode */
EricLew 0:80ee8f3b695e 1087 __HAL_LPTIM_START_CONTINUOUS(hlptim);
EricLew 0:80ee8f3b695e 1088
EricLew 0:80ee8f3b695e 1089 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 1090 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 1091
EricLew 0:80ee8f3b695e 1092 /* Return function status */
EricLew 0:80ee8f3b695e 1093 return HAL_OK;
EricLew 0:80ee8f3b695e 1094 }
EricLew 0:80ee8f3b695e 1095
EricLew 0:80ee8f3b695e 1096 /**
EricLew 0:80ee8f3b695e 1097 * @brief Stop the Timeout function.
EricLew 0:80ee8f3b695e 1098 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 1099 * @retval HAL status
EricLew 0:80ee8f3b695e 1100 */
EricLew 0:80ee8f3b695e 1101 HAL_StatusTypeDef HAL_LPTIM_TimeOut_Stop(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 1102 {
EricLew 0:80ee8f3b695e 1103 /* Check the parameters */
EricLew 0:80ee8f3b695e 1104 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 1105
EricLew 0:80ee8f3b695e 1106 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 1107 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 1108
EricLew 0:80ee8f3b695e 1109 /* Disable the Peripheral */
EricLew 0:80ee8f3b695e 1110 __HAL_LPTIM_DISABLE(hlptim);
EricLew 0:80ee8f3b695e 1111
EricLew 0:80ee8f3b695e 1112 /* Reset TIMOUT bit to enable the timeout function */
EricLew 0:80ee8f3b695e 1113 hlptim->Instance->CFGR &= ~LPTIM_CFGR_TIMOUT;
EricLew 0:80ee8f3b695e 1114
EricLew 0:80ee8f3b695e 1115 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 1116 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 1117
EricLew 0:80ee8f3b695e 1118 /* Return function status */
EricLew 0:80ee8f3b695e 1119 return HAL_OK;
EricLew 0:80ee8f3b695e 1120 }
EricLew 0:80ee8f3b695e 1121
EricLew 0:80ee8f3b695e 1122 /**
EricLew 0:80ee8f3b695e 1123 * @brief Start the Timeout function in interrupt mode.
EricLew 0:80ee8f3b695e 1124 * @note The first trigger event will start the timer, any successive
EricLew 0:80ee8f3b695e 1125 * trigger event will reset the counter and the timer restarts.
EricLew 0:80ee8f3b695e 1126 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 1127 * @param Period : Specifies the Autoreload value.
EricLew 0:80ee8f3b695e 1128 * This parameter must be a value between 0x0000 and 0xFFFF.
EricLew 0:80ee8f3b695e 1129 * @param Timeout : Specifies the TimeOut value to rest the counter.
EricLew 0:80ee8f3b695e 1130 * This parameter must be a value between 0x0000 and 0xFFFF.
EricLew 0:80ee8f3b695e 1131 * @retval HAL status
EricLew 0:80ee8f3b695e 1132 */
EricLew 0:80ee8f3b695e 1133 HAL_StatusTypeDef HAL_LPTIM_TimeOut_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Timeout)
EricLew 0:80ee8f3b695e 1134 {
EricLew 0:80ee8f3b695e 1135 /* Check the parameters */
EricLew 0:80ee8f3b695e 1136 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 1137 assert_param(IS_LPTIM_PERIOD(Period));
EricLew 0:80ee8f3b695e 1138 assert_param(IS_LPTIM_PULSE(Timeout));
EricLew 0:80ee8f3b695e 1139
EricLew 0:80ee8f3b695e 1140 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 1141 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 1142
EricLew 0:80ee8f3b695e 1143 /* Set TIMOUT bit to enable the timeout function */
EricLew 0:80ee8f3b695e 1144 hlptim->Instance->CFGR |= LPTIM_CFGR_TIMOUT;
EricLew 0:80ee8f3b695e 1145
EricLew 0:80ee8f3b695e 1146 /* Enable Compare match interrupt */
EricLew 0:80ee8f3b695e 1147 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_CMPM);
EricLew 0:80ee8f3b695e 1148
EricLew 0:80ee8f3b695e 1149 /* Enable the Peripheral */
EricLew 0:80ee8f3b695e 1150 __HAL_LPTIM_ENABLE(hlptim);
EricLew 0:80ee8f3b695e 1151
EricLew 0:80ee8f3b695e 1152 /* Load the period value in the autoreload register */
EricLew 0:80ee8f3b695e 1153 __HAL_LPTIM_AUTORELOAD_SET(hlptim, Period);
EricLew 0:80ee8f3b695e 1154
EricLew 0:80ee8f3b695e 1155 /* Load the Timeout value in the compare register */
EricLew 0:80ee8f3b695e 1156 __HAL_LPTIM_COMPARE_SET(hlptim, Timeout);
EricLew 0:80ee8f3b695e 1157
EricLew 0:80ee8f3b695e 1158 /* Start timer in continuous mode */
EricLew 0:80ee8f3b695e 1159 __HAL_LPTIM_START_CONTINUOUS(hlptim);
EricLew 0:80ee8f3b695e 1160
EricLew 0:80ee8f3b695e 1161 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 1162 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 1163
EricLew 0:80ee8f3b695e 1164 /* Return function status */
EricLew 0:80ee8f3b695e 1165 return HAL_OK;
EricLew 0:80ee8f3b695e 1166 }
EricLew 0:80ee8f3b695e 1167
EricLew 0:80ee8f3b695e 1168 /**
EricLew 0:80ee8f3b695e 1169 * @brief Stop the Timeout function in interrupt mode.
EricLew 0:80ee8f3b695e 1170 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 1171 * @retval HAL status
EricLew 0:80ee8f3b695e 1172 */
EricLew 0:80ee8f3b695e 1173 HAL_StatusTypeDef HAL_LPTIM_TimeOut_Stop_IT(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 1174 {
EricLew 0:80ee8f3b695e 1175 /* Check the parameters */
EricLew 0:80ee8f3b695e 1176 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 1177
EricLew 0:80ee8f3b695e 1178 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 1179 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 1180
EricLew 0:80ee8f3b695e 1181 /* Disable the Peripheral */
EricLew 0:80ee8f3b695e 1182 __HAL_LPTIM_DISABLE(hlptim);
EricLew 0:80ee8f3b695e 1183
EricLew 0:80ee8f3b695e 1184 /* Reset TIMOUT bit to enable the timeout function */
EricLew 0:80ee8f3b695e 1185 hlptim->Instance->CFGR &= ~LPTIM_CFGR_TIMOUT;
EricLew 0:80ee8f3b695e 1186
EricLew 0:80ee8f3b695e 1187 /* Disable Compare match interrupt */
EricLew 0:80ee8f3b695e 1188 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_CMPM);
EricLew 0:80ee8f3b695e 1189
EricLew 0:80ee8f3b695e 1190 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 1191 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 1192
EricLew 0:80ee8f3b695e 1193 /* Return function status */
EricLew 0:80ee8f3b695e 1194 return HAL_OK;
EricLew 0:80ee8f3b695e 1195 }
EricLew 0:80ee8f3b695e 1196
EricLew 0:80ee8f3b695e 1197 /**
EricLew 0:80ee8f3b695e 1198 * @brief Start the Counter mode.
EricLew 0:80ee8f3b695e 1199 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 1200 * @param Period : Specifies the Autoreload value.
EricLew 0:80ee8f3b695e 1201 * This parameter must be a value between 0x0000 and 0xFFFF.
EricLew 0:80ee8f3b695e 1202 * @retval HAL status
EricLew 0:80ee8f3b695e 1203 */
EricLew 0:80ee8f3b695e 1204 HAL_StatusTypeDef HAL_LPTIM_Counter_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Period)
EricLew 0:80ee8f3b695e 1205 {
EricLew 0:80ee8f3b695e 1206 /* Check the parameters */
EricLew 0:80ee8f3b695e 1207 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 1208 assert_param(IS_LPTIM_PERIOD(Period));
EricLew 0:80ee8f3b695e 1209
EricLew 0:80ee8f3b695e 1210 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 1211 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 1212
EricLew 0:80ee8f3b695e 1213 /* If clock source is not ULPTIM clock and counter source is external, then it must not be prescaled */
EricLew 0:80ee8f3b695e 1214 if((hlptim->Init.Clock.Source != LPTIM_CLOCKSOURCE_ULPTIM) && (hlptim->Init.CounterSource == LPTIM_COUNTERSOURCE_EXTERNAL))
EricLew 0:80ee8f3b695e 1215 {
EricLew 0:80ee8f3b695e 1216 /* Check if clock is prescaled */
EricLew 0:80ee8f3b695e 1217 assert_param(IS_LPTIM_CLOCK_PRESCALERDIV1(hlptim->Init.Clock.Prescaler));
EricLew 0:80ee8f3b695e 1218 /* Set clock prescaler to 0 */
EricLew 0:80ee8f3b695e 1219 hlptim->Instance->CFGR &= ~LPTIM_CFGR_PRESC;
EricLew 0:80ee8f3b695e 1220 }
EricLew 0:80ee8f3b695e 1221
EricLew 0:80ee8f3b695e 1222 /* Enable the Peripheral */
EricLew 0:80ee8f3b695e 1223 __HAL_LPTIM_ENABLE(hlptim);
EricLew 0:80ee8f3b695e 1224
EricLew 0:80ee8f3b695e 1225 /* Load the period value in the autoreload register */
EricLew 0:80ee8f3b695e 1226 __HAL_LPTIM_AUTORELOAD_SET(hlptim, Period);
EricLew 0:80ee8f3b695e 1227
EricLew 0:80ee8f3b695e 1228 /* Start timer in continuous mode */
EricLew 0:80ee8f3b695e 1229 __HAL_LPTIM_START_CONTINUOUS(hlptim);
EricLew 0:80ee8f3b695e 1230
EricLew 0:80ee8f3b695e 1231 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 1232 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 1233
EricLew 0:80ee8f3b695e 1234 /* Return function status */
EricLew 0:80ee8f3b695e 1235 return HAL_OK;
EricLew 0:80ee8f3b695e 1236 }
EricLew 0:80ee8f3b695e 1237
EricLew 0:80ee8f3b695e 1238 /**
EricLew 0:80ee8f3b695e 1239 * @brief Stop the Counter mode.
EricLew 0:80ee8f3b695e 1240 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 1241 * @retval HAL status
EricLew 0:80ee8f3b695e 1242 */
EricLew 0:80ee8f3b695e 1243 HAL_StatusTypeDef HAL_LPTIM_Counter_Stop(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 1244 {
EricLew 0:80ee8f3b695e 1245 /* Check the parameters */
EricLew 0:80ee8f3b695e 1246 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 1247
EricLew 0:80ee8f3b695e 1248 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 1249 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 1250
EricLew 0:80ee8f3b695e 1251 /* Disable the Peripheral */
EricLew 0:80ee8f3b695e 1252 __HAL_LPTIM_DISABLE(hlptim);
EricLew 0:80ee8f3b695e 1253
EricLew 0:80ee8f3b695e 1254 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 1255 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 1256
EricLew 0:80ee8f3b695e 1257 /* Return function status */
EricLew 0:80ee8f3b695e 1258 return HAL_OK;
EricLew 0:80ee8f3b695e 1259 }
EricLew 0:80ee8f3b695e 1260
EricLew 0:80ee8f3b695e 1261 /**
EricLew 0:80ee8f3b695e 1262 * @brief Start the Counter mode in interrupt mode.
EricLew 0:80ee8f3b695e 1263 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 1264 * @param Period : Specifies the Autoreload value.
EricLew 0:80ee8f3b695e 1265 * This parameter must be a value between 0x0000 and 0xFFFF.
EricLew 0:80ee8f3b695e 1266 * @retval HAL status
EricLew 0:80ee8f3b695e 1267 */
EricLew 0:80ee8f3b695e 1268 HAL_StatusTypeDef HAL_LPTIM_Counter_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Period)
EricLew 0:80ee8f3b695e 1269 {
EricLew 0:80ee8f3b695e 1270 /* Check the parameters */
EricLew 0:80ee8f3b695e 1271 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 1272 assert_param(IS_LPTIM_PERIOD(Period));
EricLew 0:80ee8f3b695e 1273
EricLew 0:80ee8f3b695e 1274 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 1275 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 1276
EricLew 0:80ee8f3b695e 1277 /* If clock source is not ULPTIM clock and counter source is external, then it must not be prescaled */
EricLew 0:80ee8f3b695e 1278 if((hlptim->Init.Clock.Source != LPTIM_CLOCKSOURCE_ULPTIM) && (hlptim->Init.CounterSource == LPTIM_COUNTERSOURCE_EXTERNAL))
EricLew 0:80ee8f3b695e 1279 {
EricLew 0:80ee8f3b695e 1280 /* Check if clock is prescaled */
EricLew 0:80ee8f3b695e 1281 assert_param(IS_LPTIM_CLOCK_PRESCALERDIV1(hlptim->Init.Clock.Prescaler));
EricLew 0:80ee8f3b695e 1282 /* Set clock prescaler to 0 */
EricLew 0:80ee8f3b695e 1283 hlptim->Instance->CFGR &= ~LPTIM_CFGR_PRESC;
EricLew 0:80ee8f3b695e 1284 }
EricLew 0:80ee8f3b695e 1285
EricLew 0:80ee8f3b695e 1286 /* Enable Autoreload write complete interrupt */
EricLew 0:80ee8f3b695e 1287 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_ARROK);
EricLew 0:80ee8f3b695e 1288
EricLew 0:80ee8f3b695e 1289 /* Enable Autoreload match interrupt */
EricLew 0:80ee8f3b695e 1290 __HAL_LPTIM_ENABLE_IT(hlptim, LPTIM_IT_ARRM);
EricLew 0:80ee8f3b695e 1291
EricLew 0:80ee8f3b695e 1292 /* Enable the Peripheral */
EricLew 0:80ee8f3b695e 1293 __HAL_LPTIM_ENABLE(hlptim);
EricLew 0:80ee8f3b695e 1294
EricLew 0:80ee8f3b695e 1295 /* Load the period value in the autoreload register */
EricLew 0:80ee8f3b695e 1296 __HAL_LPTIM_AUTORELOAD_SET(hlptim, Period);
EricLew 0:80ee8f3b695e 1297
EricLew 0:80ee8f3b695e 1298 /* Start timer in continuous mode */
EricLew 0:80ee8f3b695e 1299 __HAL_LPTIM_START_CONTINUOUS(hlptim);
EricLew 0:80ee8f3b695e 1300
EricLew 0:80ee8f3b695e 1301 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 1302 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 1303
EricLew 0:80ee8f3b695e 1304 /* Return function status */
EricLew 0:80ee8f3b695e 1305 return HAL_OK;
EricLew 0:80ee8f3b695e 1306 }
EricLew 0:80ee8f3b695e 1307
EricLew 0:80ee8f3b695e 1308 /**
EricLew 0:80ee8f3b695e 1309 * @brief Stop the Counter mode in interrupt mode.
EricLew 0:80ee8f3b695e 1310 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 1311 * @retval HAL status
EricLew 0:80ee8f3b695e 1312 */
EricLew 0:80ee8f3b695e 1313 HAL_StatusTypeDef HAL_LPTIM_Counter_Stop_IT(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 1314 {
EricLew 0:80ee8f3b695e 1315 /* Check the parameters */
EricLew 0:80ee8f3b695e 1316 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 1317
EricLew 0:80ee8f3b695e 1318 /* Set the LPTIM state */
EricLew 0:80ee8f3b695e 1319 hlptim->State= HAL_LPTIM_STATE_BUSY;
EricLew 0:80ee8f3b695e 1320
EricLew 0:80ee8f3b695e 1321 /* Disable the Peripheral */
EricLew 0:80ee8f3b695e 1322 __HAL_LPTIM_DISABLE(hlptim);
EricLew 0:80ee8f3b695e 1323
EricLew 0:80ee8f3b695e 1324 /* Disable Autoreload write complete interrupt */
EricLew 0:80ee8f3b695e 1325 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_ARROK);
EricLew 0:80ee8f3b695e 1326
EricLew 0:80ee8f3b695e 1327 /* Disable Autoreload match interrupt */
EricLew 0:80ee8f3b695e 1328 __HAL_LPTIM_DISABLE_IT(hlptim, LPTIM_IT_ARRM);
EricLew 0:80ee8f3b695e 1329
EricLew 0:80ee8f3b695e 1330 /* Change the TIM state*/
EricLew 0:80ee8f3b695e 1331 hlptim->State= HAL_LPTIM_STATE_READY;
EricLew 0:80ee8f3b695e 1332
EricLew 0:80ee8f3b695e 1333 /* Return function status */
EricLew 0:80ee8f3b695e 1334 return HAL_OK;
EricLew 0:80ee8f3b695e 1335 }
EricLew 0:80ee8f3b695e 1336
EricLew 0:80ee8f3b695e 1337 /**
EricLew 0:80ee8f3b695e 1338 * @}
EricLew 0:80ee8f3b695e 1339 */
EricLew 0:80ee8f3b695e 1340
EricLew 0:80ee8f3b695e 1341 /** @defgroup LPTIM_Group3 LPTIM Read operation functions
EricLew 0:80ee8f3b695e 1342 * @brief Read operation functions.
EricLew 0:80ee8f3b695e 1343 *
EricLew 0:80ee8f3b695e 1344 @verbatim
EricLew 0:80ee8f3b695e 1345 ==============================================================================
EricLew 0:80ee8f3b695e 1346 ##### LPTIM Read operation functions #####
EricLew 0:80ee8f3b695e 1347 ==============================================================================
EricLew 0:80ee8f3b695e 1348 [..] This section provides LPTIM Reading functions.
EricLew 0:80ee8f3b695e 1349 (+) Read the counter value.
EricLew 0:80ee8f3b695e 1350 (+) Read the period (Auto-reload) value.
EricLew 0:80ee8f3b695e 1351 (+) Read the pulse (Compare)value.
EricLew 0:80ee8f3b695e 1352 @endverbatim
EricLew 0:80ee8f3b695e 1353 * @{
EricLew 0:80ee8f3b695e 1354 */
EricLew 0:80ee8f3b695e 1355
EricLew 0:80ee8f3b695e 1356 /**
EricLew 0:80ee8f3b695e 1357 * @brief Return the current counter value.
EricLew 0:80ee8f3b695e 1358 * @param hlptim: LPTIM handle
EricLew 0:80ee8f3b695e 1359 * @retval Counter value.
EricLew 0:80ee8f3b695e 1360 */
EricLew 0:80ee8f3b695e 1361 uint32_t HAL_LPTIM_ReadCounter(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 1362 {
EricLew 0:80ee8f3b695e 1363 /* Check the parameters */
EricLew 0:80ee8f3b695e 1364 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 1365
EricLew 0:80ee8f3b695e 1366 return (hlptim->Instance->CNT);
EricLew 0:80ee8f3b695e 1367 }
EricLew 0:80ee8f3b695e 1368
EricLew 0:80ee8f3b695e 1369 /**
EricLew 0:80ee8f3b695e 1370 * @brief Return the current Autoreload (Period) value.
EricLew 0:80ee8f3b695e 1371 * @param hlptim: LPTIM handle
EricLew 0:80ee8f3b695e 1372 * @retval Autoreload value.
EricLew 0:80ee8f3b695e 1373 */
EricLew 0:80ee8f3b695e 1374 uint32_t HAL_LPTIM_ReadAutoReload(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 1375 {
EricLew 0:80ee8f3b695e 1376 /* Check the parameters */
EricLew 0:80ee8f3b695e 1377 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 1378
EricLew 0:80ee8f3b695e 1379 return (hlptim->Instance->ARR);
EricLew 0:80ee8f3b695e 1380 }
EricLew 0:80ee8f3b695e 1381
EricLew 0:80ee8f3b695e 1382 /**
EricLew 0:80ee8f3b695e 1383 * @brief Return the current Compare (Pulse) value.
EricLew 0:80ee8f3b695e 1384 * @param hlptim: LPTIM handle
EricLew 0:80ee8f3b695e 1385 * @retval Compare value.
EricLew 0:80ee8f3b695e 1386 */
EricLew 0:80ee8f3b695e 1387 uint32_t HAL_LPTIM_ReadCompare(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 1388 {
EricLew 0:80ee8f3b695e 1389 /* Check the parameters */
EricLew 0:80ee8f3b695e 1390 assert_param(IS_LPTIM_INSTANCE(hlptim->Instance));
EricLew 0:80ee8f3b695e 1391
EricLew 0:80ee8f3b695e 1392 return (hlptim->Instance->CMP);
EricLew 0:80ee8f3b695e 1393 }
EricLew 0:80ee8f3b695e 1394
EricLew 0:80ee8f3b695e 1395 /**
EricLew 0:80ee8f3b695e 1396 * @}
EricLew 0:80ee8f3b695e 1397 */
EricLew 0:80ee8f3b695e 1398
EricLew 0:80ee8f3b695e 1399
EricLew 0:80ee8f3b695e 1400
EricLew 0:80ee8f3b695e 1401 /** @defgroup LPTIM_Group4 LPTIM IRQ handler and callbacks
EricLew 0:80ee8f3b695e 1402 * @brief LPTIM IRQ handler.
EricLew 0:80ee8f3b695e 1403 *
EricLew 0:80ee8f3b695e 1404 @verbatim
EricLew 0:80ee8f3b695e 1405 ==============================================================================
EricLew 0:80ee8f3b695e 1406 ##### LPTIM IRQ handler and callbacks #####
EricLew 0:80ee8f3b695e 1407 ==============================================================================
EricLew 0:80ee8f3b695e 1408 [..] This section provides LPTIM IRQ handler and callback functions called within
EricLew 0:80ee8f3b695e 1409 the IRQ handler.
EricLew 0:80ee8f3b695e 1410
EricLew 0:80ee8f3b695e 1411 @endverbatim
EricLew 0:80ee8f3b695e 1412 * @{
EricLew 0:80ee8f3b695e 1413 */
EricLew 0:80ee8f3b695e 1414
EricLew 0:80ee8f3b695e 1415 /**
EricLew 0:80ee8f3b695e 1416 * @brief Handle LPTIM interrupt request.
EricLew 0:80ee8f3b695e 1417 * @param hlptim: LPTIM handle
EricLew 0:80ee8f3b695e 1418 * @retval None
EricLew 0:80ee8f3b695e 1419 */
EricLew 0:80ee8f3b695e 1420 void HAL_LPTIM_IRQHandler(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 1421 {
EricLew 0:80ee8f3b695e 1422 /* Compare match interrupt */
EricLew 0:80ee8f3b695e 1423 if(__HAL_LPTIM_GET_FLAG(hlptim, LPTIM_FLAG_CMPM) != RESET)
EricLew 0:80ee8f3b695e 1424 {
EricLew 0:80ee8f3b695e 1425 if(__HAL_LPTIM_GET_IT_SOURCE(hlptim, LPTIM_IT_CMPM) != RESET)
EricLew 0:80ee8f3b695e 1426 {
EricLew 0:80ee8f3b695e 1427 /* Clear Compare match flag */
EricLew 0:80ee8f3b695e 1428 __HAL_LPTIM_CLEAR_FLAG(hlptim, LPTIM_FLAG_CMPM);
EricLew 0:80ee8f3b695e 1429
EricLew 0:80ee8f3b695e 1430 /* Compare match Callback */
EricLew 0:80ee8f3b695e 1431 HAL_LPTIM_CompareMatchCallback(hlptim);
EricLew 0:80ee8f3b695e 1432 }
EricLew 0:80ee8f3b695e 1433 }
EricLew 0:80ee8f3b695e 1434
EricLew 0:80ee8f3b695e 1435 /* Autoreload match interrupt */
EricLew 0:80ee8f3b695e 1436 if(__HAL_LPTIM_GET_FLAG(hlptim, LPTIM_FLAG_ARRM) != RESET)
EricLew 0:80ee8f3b695e 1437 {
EricLew 0:80ee8f3b695e 1438 if(__HAL_LPTIM_GET_IT_SOURCE(hlptim, LPTIM_IT_ARRM) != RESET)
EricLew 0:80ee8f3b695e 1439 {
EricLew 0:80ee8f3b695e 1440 /* Clear Autoreload match flag */
EricLew 0:80ee8f3b695e 1441 __HAL_LPTIM_CLEAR_FLAG(hlptim, LPTIM_FLAG_ARRM);
EricLew 0:80ee8f3b695e 1442
EricLew 0:80ee8f3b695e 1443 /* Autoreload match Callback */
EricLew 0:80ee8f3b695e 1444 HAL_LPTIM_AutoReloadMatchCallback(hlptim);
EricLew 0:80ee8f3b695e 1445 }
EricLew 0:80ee8f3b695e 1446 }
EricLew 0:80ee8f3b695e 1447
EricLew 0:80ee8f3b695e 1448 /* Trigger detected interrupt */
EricLew 0:80ee8f3b695e 1449 if(__HAL_LPTIM_GET_FLAG(hlptim, LPTIM_FLAG_EXTTRIG) != RESET)
EricLew 0:80ee8f3b695e 1450 {
EricLew 0:80ee8f3b695e 1451 if(__HAL_LPTIM_GET_IT_SOURCE(hlptim, LPTIM_IT_EXTTRIG) != RESET)
EricLew 0:80ee8f3b695e 1452 {
EricLew 0:80ee8f3b695e 1453 /* Clear Trigger detected flag */
EricLew 0:80ee8f3b695e 1454 __HAL_LPTIM_CLEAR_FLAG(hlptim, LPTIM_FLAG_EXTTRIG);
EricLew 0:80ee8f3b695e 1455
EricLew 0:80ee8f3b695e 1456 /* Trigger detected callback */
EricLew 0:80ee8f3b695e 1457 HAL_LPTIM_TriggerCallback(hlptim);
EricLew 0:80ee8f3b695e 1458 }
EricLew 0:80ee8f3b695e 1459 }
EricLew 0:80ee8f3b695e 1460
EricLew 0:80ee8f3b695e 1461 /* Compare write interrupt */
EricLew 0:80ee8f3b695e 1462 if(__HAL_LPTIM_GET_FLAG(hlptim, LPTIM_FLAG_CMPOK) != RESET)
EricLew 0:80ee8f3b695e 1463 {
EricLew 0:80ee8f3b695e 1464 if(__HAL_LPTIM_GET_IT_SOURCE(hlptim, LPTIM_IT_CMPOK) != RESET)
EricLew 0:80ee8f3b695e 1465 {
EricLew 0:80ee8f3b695e 1466 /* Clear Compare write flag */
EricLew 0:80ee8f3b695e 1467 __HAL_LPTIM_CLEAR_FLAG(hlptim, LPTIM_FLAG_CMPOK);
EricLew 0:80ee8f3b695e 1468
EricLew 0:80ee8f3b695e 1469 /* Compare write Callback */
EricLew 0:80ee8f3b695e 1470 HAL_LPTIM_CompareWriteCallback(hlptim);
EricLew 0:80ee8f3b695e 1471 }
EricLew 0:80ee8f3b695e 1472 }
EricLew 0:80ee8f3b695e 1473
EricLew 0:80ee8f3b695e 1474 /* Autoreload write interrupt */
EricLew 0:80ee8f3b695e 1475 if(__HAL_LPTIM_GET_FLAG(hlptim, LPTIM_FLAG_ARROK) != RESET)
EricLew 0:80ee8f3b695e 1476 {
EricLew 0:80ee8f3b695e 1477 if(__HAL_LPTIM_GET_IT_SOURCE(hlptim, LPTIM_IT_ARROK) != RESET)
EricLew 0:80ee8f3b695e 1478 {
EricLew 0:80ee8f3b695e 1479 /* Clear Autoreload write flag */
EricLew 0:80ee8f3b695e 1480 __HAL_LPTIM_CLEAR_FLAG(hlptim, LPTIM_FLAG_ARROK);
EricLew 0:80ee8f3b695e 1481
EricLew 0:80ee8f3b695e 1482 /* Autoreload write Callback */
EricLew 0:80ee8f3b695e 1483 HAL_LPTIM_AutoReloadWriteCallback(hlptim);
EricLew 0:80ee8f3b695e 1484 }
EricLew 0:80ee8f3b695e 1485 }
EricLew 0:80ee8f3b695e 1486
EricLew 0:80ee8f3b695e 1487 /* Direction counter changed from Down to Up interrupt */
EricLew 0:80ee8f3b695e 1488 if(__HAL_LPTIM_GET_FLAG(hlptim, LPTIM_FLAG_UP) != RESET)
EricLew 0:80ee8f3b695e 1489 {
EricLew 0:80ee8f3b695e 1490 if(__HAL_LPTIM_GET_IT_SOURCE(hlptim, LPTIM_IT_UP) != RESET)
EricLew 0:80ee8f3b695e 1491 {
EricLew 0:80ee8f3b695e 1492 /* Clear Direction counter changed from Down to Up flag */
EricLew 0:80ee8f3b695e 1493 __HAL_LPTIM_CLEAR_FLAG(hlptim, LPTIM_FLAG_UP);
EricLew 0:80ee8f3b695e 1494
EricLew 0:80ee8f3b695e 1495 /* Direction counter changed from Down to Up Callback */
EricLew 0:80ee8f3b695e 1496 HAL_LPTIM_DirectionUpCallback(hlptim);
EricLew 0:80ee8f3b695e 1497 }
EricLew 0:80ee8f3b695e 1498 }
EricLew 0:80ee8f3b695e 1499
EricLew 0:80ee8f3b695e 1500 /* Direction counter changed from Up to Down interrupt */
EricLew 0:80ee8f3b695e 1501 if(__HAL_LPTIM_GET_FLAG(hlptim, LPTIM_FLAG_DOWN) != RESET)
EricLew 0:80ee8f3b695e 1502 {
EricLew 0:80ee8f3b695e 1503 if(__HAL_LPTIM_GET_IT_SOURCE(hlptim, LPTIM_IT_DOWN) != RESET)
EricLew 0:80ee8f3b695e 1504 {
EricLew 0:80ee8f3b695e 1505 /* Clear Direction counter changed from Up to Down flag */
EricLew 0:80ee8f3b695e 1506 __HAL_LPTIM_CLEAR_FLAG(hlptim, LPTIM_FLAG_DOWN);
EricLew 0:80ee8f3b695e 1507
EricLew 0:80ee8f3b695e 1508 /* Direction counter changed from Up to Down Callback */
EricLew 0:80ee8f3b695e 1509 HAL_LPTIM_DirectionDownCallback(hlptim);
EricLew 0:80ee8f3b695e 1510 }
EricLew 0:80ee8f3b695e 1511 }
EricLew 0:80ee8f3b695e 1512 }
EricLew 0:80ee8f3b695e 1513
EricLew 0:80ee8f3b695e 1514 /**
EricLew 0:80ee8f3b695e 1515 * @brief Compare match callback in non-blocking mode.
EricLew 0:80ee8f3b695e 1516 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 1517 * @retval None
EricLew 0:80ee8f3b695e 1518 */
EricLew 0:80ee8f3b695e 1519 __weak void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 1520 {
EricLew 0:80ee8f3b695e 1521 /* NOTE : This function should not be modified, when the callback is needed,
EricLew 0:80ee8f3b695e 1522 the HAL_LPTIM_CompareMatchCallback could be implemented in the user file
EricLew 0:80ee8f3b695e 1523 */
EricLew 0:80ee8f3b695e 1524 }
EricLew 0:80ee8f3b695e 1525
EricLew 0:80ee8f3b695e 1526 /**
EricLew 0:80ee8f3b695e 1527 * @brief Autoreload match callback in non-blocking mode.
EricLew 0:80ee8f3b695e 1528 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 1529 * @retval None
EricLew 0:80ee8f3b695e 1530 */
EricLew 0:80ee8f3b695e 1531 __weak void HAL_LPTIM_AutoReloadMatchCallback(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 1532 {
EricLew 0:80ee8f3b695e 1533 /* NOTE : This function should not be modified, when the callback is needed,
EricLew 0:80ee8f3b695e 1534 the HAL_LPTIM_AutoReloadMatchCallback could be implemented in the user file
EricLew 0:80ee8f3b695e 1535 */
EricLew 0:80ee8f3b695e 1536 }
EricLew 0:80ee8f3b695e 1537
EricLew 0:80ee8f3b695e 1538 /**
EricLew 0:80ee8f3b695e 1539 * @brief Trigger detected callback in non-blocking mode.
EricLew 0:80ee8f3b695e 1540 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 1541 * @retval None
EricLew 0:80ee8f3b695e 1542 */
EricLew 0:80ee8f3b695e 1543 __weak void HAL_LPTIM_TriggerCallback(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 1544 {
EricLew 0:80ee8f3b695e 1545 /* NOTE : This function should not be modified, when the callback is needed,
EricLew 0:80ee8f3b695e 1546 the HAL_LPTIM_TriggerCallback could be implemented in the user file
EricLew 0:80ee8f3b695e 1547 */
EricLew 0:80ee8f3b695e 1548 }
EricLew 0:80ee8f3b695e 1549
EricLew 0:80ee8f3b695e 1550 /**
EricLew 0:80ee8f3b695e 1551 * @brief Compare write callback in non-blocking mode.
EricLew 0:80ee8f3b695e 1552 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 1553 * @retval None
EricLew 0:80ee8f3b695e 1554 */
EricLew 0:80ee8f3b695e 1555 __weak void HAL_LPTIM_CompareWriteCallback(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 1556 {
EricLew 0:80ee8f3b695e 1557 /* NOTE : This function should not be modified, when the callback is needed,
EricLew 0:80ee8f3b695e 1558 the HAL_LPTIM_CompareWriteCallback could be implemented in the user file
EricLew 0:80ee8f3b695e 1559 */
EricLew 0:80ee8f3b695e 1560 }
EricLew 0:80ee8f3b695e 1561
EricLew 0:80ee8f3b695e 1562 /**
EricLew 0:80ee8f3b695e 1563 * @brief Autoreload write callback in non-blocking mode.
EricLew 0:80ee8f3b695e 1564 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 1565 * @retval None
EricLew 0:80ee8f3b695e 1566 */
EricLew 0:80ee8f3b695e 1567 __weak void HAL_LPTIM_AutoReloadWriteCallback(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 1568 {
EricLew 0:80ee8f3b695e 1569 /* NOTE : This function should not be modified, when the callback is needed,
EricLew 0:80ee8f3b695e 1570 the HAL_LPTIM_AutoReloadWriteCallback could be implemented in the user file
EricLew 0:80ee8f3b695e 1571 */
EricLew 0:80ee8f3b695e 1572 }
EricLew 0:80ee8f3b695e 1573
EricLew 0:80ee8f3b695e 1574 /**
EricLew 0:80ee8f3b695e 1575 * @brief Direction counter changed from Down to Up callback in non-blocking mode.
EricLew 0:80ee8f3b695e 1576 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 1577 * @retval None
EricLew 0:80ee8f3b695e 1578 */
EricLew 0:80ee8f3b695e 1579 __weak void HAL_LPTIM_DirectionUpCallback(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 1580 {
EricLew 0:80ee8f3b695e 1581 /* NOTE : This function should not be modified, when the callback is needed,
EricLew 0:80ee8f3b695e 1582 the HAL_LPTIM_DirectionUpCallback could be implemented in the user file
EricLew 0:80ee8f3b695e 1583 */
EricLew 0:80ee8f3b695e 1584 }
EricLew 0:80ee8f3b695e 1585
EricLew 0:80ee8f3b695e 1586 /**
EricLew 0:80ee8f3b695e 1587 * @brief Direction counter changed from Up to Down callback in non-blocking mode.
EricLew 0:80ee8f3b695e 1588 * @param hlptim : LPTIM handle
EricLew 0:80ee8f3b695e 1589 * @retval None
EricLew 0:80ee8f3b695e 1590 */
EricLew 0:80ee8f3b695e 1591 __weak void HAL_LPTIM_DirectionDownCallback(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 1592 {
EricLew 0:80ee8f3b695e 1593 /* NOTE : This function should not be modified, when the callback is needed,
EricLew 0:80ee8f3b695e 1594 the HAL_LPTIM_DirectionDownCallback could be implemented in the user file
EricLew 0:80ee8f3b695e 1595 */
EricLew 0:80ee8f3b695e 1596 }
EricLew 0:80ee8f3b695e 1597
EricLew 0:80ee8f3b695e 1598 /**
EricLew 0:80ee8f3b695e 1599 * @}
EricLew 0:80ee8f3b695e 1600 */
EricLew 0:80ee8f3b695e 1601
EricLew 0:80ee8f3b695e 1602 /** @defgroup LPTIM_Group5 Peripheral State functions
EricLew 0:80ee8f3b695e 1603 * @brief Peripheral State functions.
EricLew 0:80ee8f3b695e 1604 *
EricLew 0:80ee8f3b695e 1605 @verbatim
EricLew 0:80ee8f3b695e 1606 ==============================================================================
EricLew 0:80ee8f3b695e 1607 ##### Peripheral State functions #####
EricLew 0:80ee8f3b695e 1608 ==============================================================================
EricLew 0:80ee8f3b695e 1609 [..]
EricLew 0:80ee8f3b695e 1610 This subsection permits to get in run-time the status of the peripheral.
EricLew 0:80ee8f3b695e 1611
EricLew 0:80ee8f3b695e 1612 @endverbatim
EricLew 0:80ee8f3b695e 1613 * @{
EricLew 0:80ee8f3b695e 1614 */
EricLew 0:80ee8f3b695e 1615
EricLew 0:80ee8f3b695e 1616 /**
EricLew 0:80ee8f3b695e 1617 * @brief Return the LPTIM handle state.
EricLew 0:80ee8f3b695e 1618 * @param hlptim: LPTIM handle
EricLew 0:80ee8f3b695e 1619 * @retval HAL state
EricLew 0:80ee8f3b695e 1620 */
EricLew 0:80ee8f3b695e 1621 HAL_LPTIM_StateTypeDef HAL_LPTIM_GetState(LPTIM_HandleTypeDef *hlptim)
EricLew 0:80ee8f3b695e 1622 {
EricLew 0:80ee8f3b695e 1623 /* Return LPTIM handle state */
EricLew 0:80ee8f3b695e 1624 return hlptim->State;
EricLew 0:80ee8f3b695e 1625 }
EricLew 0:80ee8f3b695e 1626
EricLew 0:80ee8f3b695e 1627 /**
EricLew 0:80ee8f3b695e 1628 * @}
EricLew 0:80ee8f3b695e 1629 */
EricLew 0:80ee8f3b695e 1630
EricLew 0:80ee8f3b695e 1631
EricLew 0:80ee8f3b695e 1632 /**
EricLew 0:80ee8f3b695e 1633 * @}
EricLew 0:80ee8f3b695e 1634 */
EricLew 0:80ee8f3b695e 1635
EricLew 0:80ee8f3b695e 1636 #endif /* HAL_LPTIM_MODULE_ENABLED */
EricLew 0:80ee8f3b695e 1637 /**
EricLew 0:80ee8f3b695e 1638 * @}
EricLew 0:80ee8f3b695e 1639 */
EricLew 0:80ee8f3b695e 1640
EricLew 0:80ee8f3b695e 1641 /**
EricLew 0:80ee8f3b695e 1642 * @}
EricLew 0:80ee8f3b695e 1643 */
EricLew 0:80ee8f3b695e 1644
EricLew 0:80ee8f3b695e 1645 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
EricLew 0:80ee8f3b695e 1646