STM32L4xx_HAL_Driver  1.14.0
LPTIM Private Functions

Functions

void LPTIM_Disable (LPTIM_HandleTypeDef *lptim)
 Disable LPTIM HW instance. More...
 
static void LPTIM_ResetCallback (LPTIM_HandleTypeDef *lptim)
 Reset interrupt callbacks to the legacy weak callbacks. More...
 

Detailed Description

Function Documentation

◆ LPTIM_Disable()

void LPTIM_Disable ( LPTIM_HandleTypeDef lptim)

Disable LPTIM HW instance.

Parameters
lptimpointer to a LPTIM_HandleTypeDef structure that contains the configuration information for LPTIM module.
Note
The following sequence is required to solve LPTIM disable HW limitation. Please check Errata Sheet ES0335 for more details under "MCU may remain stuck in LPTIM interrupt when entering Stop mode" section.
Return values
None

Definition at line 2224 of file stm32l4xx_hal_lptim.c.

2225 {
2226  uint32_t tmpclksource = 0;
2227  uint32_t tmpIER;
2228  uint32_t tmpCFGR;
2229  uint32_t tmpCMP;
2230  uint32_t tmpARR;
2231  uint32_t tmpOR;
2232 
2233  __disable_irq();
2234 
2235  /*********** Save LPTIM Config ***********/
2236  /* Save LPTIM source clock */
2237  switch ((uint32_t)lptim->Instance)
2238  {
2239  case LPTIM1_BASE:
2240  tmpclksource = __HAL_RCC_GET_LPTIM1_SOURCE();
2241  break;
2242 #if defined(LPTIM2)
2243  case LPTIM2_BASE:
2244  tmpclksource = __HAL_RCC_GET_LPTIM2_SOURCE();
2245  break;
2246 #endif /* LPTIM2 */
2247  default:
2248  break;
2249  }
2250 
2251  /* Save LPTIM configuration registers */
2252  tmpIER = lptim->Instance->IER;
2253  tmpCFGR = lptim->Instance->CFGR;
2254  tmpCMP = lptim->Instance->CMP;
2255  tmpARR = lptim->Instance->ARR;
2256  tmpOR = lptim->Instance->OR;
2257 
2258  /*********** Reset LPTIM ***********/
2259  switch ((uint32_t)lptim->Instance)
2260  {
2261  case LPTIM1_BASE:
2262  __HAL_RCC_LPTIM1_FORCE_RESET();
2263  __HAL_RCC_LPTIM1_RELEASE_RESET();
2264  break;
2265 #if defined(LPTIM2)
2266  case LPTIM2_BASE:
2267  __HAL_RCC_LPTIM2_FORCE_RESET();
2268  __HAL_RCC_LPTIM2_RELEASE_RESET();
2269  break;
2270 #endif /* LPTIM2 */
2271  default:
2272  break;
2273  }
2274 
2275  /*********** Restore LPTIM Config ***********/
2276  uint32_t Ref_Time;
2277  uint32_t Time_Elapsed;
2278 
2279  if ((tmpCMP != 0UL) || (tmpARR != 0UL))
2280  {
2281  /* Force LPTIM source kernel clock from APB */
2282  switch ((uint32_t)lptim->Instance)
2283  {
2284  case LPTIM1_BASE:
2285  __HAL_RCC_LPTIM1_CONFIG(RCC_LPTIM1CLKSOURCE_PCLK1);
2286  break;
2287 #if defined(LPTIM2)
2288  case LPTIM2_BASE:
2289  __HAL_RCC_LPTIM2_CONFIG(RCC_LPTIM2CLKSOURCE_PCLK1);
2290  break;
2291 #endif /* LPTIM2 */
2292  default:
2293  break;
2294  }
2295 
2296  if (tmpCMP != 0UL)
2297  {
2298  /* Restore CMP register (LPTIM should be enabled first) */
2299  lptim->Instance->CR |= LPTIM_CR_ENABLE;
2300  lptim->Instance->CMP = tmpCMP;
2301  /* Polling on CMP write ok status after above restore operation */
2302  Ref_Time = HAL_GetTick();
2303  do
2304  {
2305  Time_Elapsed = HAL_GetTick() - Ref_Time;
2306  } while ((!(__HAL_LPTIM_GET_FLAG(lptim, LPTIM_FLAG_CMPOK))) && (Time_Elapsed <= TIMEOUT));
2307 
2308  __HAL_LPTIM_CLEAR_FLAG(lptim, LPTIM_FLAG_CMPOK);
2309  }
2310 
2311  if (tmpARR != 0UL)
2312  {
2313  /* Restore ARR register (LPTIM should be enabled first) */
2314  lptim->Instance->CR |= LPTIM_CR_ENABLE;
2315  lptim->Instance->ARR = tmpARR;
2316  /* Polling on ARR write ok status after above restore operation */
2317  Ref_Time = HAL_GetTick();
2318  do
2319  {
2320  Time_Elapsed = HAL_GetTick() - Ref_Time;
2321  } while ((!(__HAL_LPTIM_GET_FLAG(lptim, LPTIM_FLAG_ARROK))) && (Time_Elapsed <= TIMEOUT));
2322 
2323  __HAL_LPTIM_CLEAR_FLAG(lptim, LPTIM_FLAG_ARROK);
2324  }
2325 
2326  /* Restore LPTIM source kernel clock */
2327  switch ((uint32_t)lptim->Instance)
2328  {
2329  case LPTIM1_BASE:
2330  __HAL_RCC_LPTIM1_CONFIG(tmpclksource);
2331  break;
2332 #if defined(LPTIM2)
2333  case LPTIM2_BASE:
2334  __HAL_RCC_LPTIM2_CONFIG(tmpclksource);
2335  break;
2336 #endif /* LPTIM2 */
2337  default:
2338  break;
2339  }
2340  }
2341 
2342  /* Restore configuration registers (LPTIM should be disabled first) */
2343  lptim->Instance->CR &= ~(LPTIM_CR_ENABLE);
2344  lptim->Instance->IER = tmpIER;
2345  lptim->Instance->CFGR = tmpCFGR;
2346  lptim->Instance->OR = tmpOR;
2347 
2348  __enable_irq();
2349 }
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.

◆ LPTIM_ResetCallback()

static void LPTIM_ResetCallback ( LPTIM_HandleTypeDef lptim)
static

Reset interrupt callbacks to the legacy weak callbacks.

Parameters
lptimpointer to a LPTIM_HandleTypeDef structure that contains the configuration information for LPTIM module.
Return values
None

Definition at line 2198 of file stm32l4xx_hal_lptim.c.

2199 {
2200  /* Reset the LPTIM callback to the legacy weak callbacks */
2201  lptim->CompareMatchCallback = HAL_LPTIM_CompareMatchCallback; /* Compare match Callback */
2202  lptim->AutoReloadMatchCallback = HAL_LPTIM_AutoReloadMatchCallback; /* Auto-reload match Callback */
2203  lptim->TriggerCallback = HAL_LPTIM_TriggerCallback; /* External trigger event detection Callback */
2204  lptim->CompareWriteCallback = HAL_LPTIM_CompareWriteCallback; /* Compare register write complete Callback */
2205  lptim->AutoReloadWriteCallback = HAL_LPTIM_AutoReloadWriteCallback; /* Auto-reload register write complete Callback */
2206  lptim->DirectionUpCallback = HAL_LPTIM_DirectionUpCallback; /* Up-counting direction change Callback */
2207  lptim->DirectionDownCallback = HAL_LPTIM_DirectionDownCallback; /* Down-counting direction change Callback */
2208 #if defined(LPTIM_RCR_REP)
2209  lptim->UpdateEventCallback = HAL_LPTIM_UpdateEventCallback; /* Update Event Callback */
2210  lptim->RepCounterWriteCallback = HAL_LPTIM_RepCounterWriteCallback; /* Repetition counter successful write Callback */
2211 #endif /* LPTIM_RCR_REP */
2212 }
__weak void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim)
Compare match callback in non-blocking mode.
__weak void HAL_LPTIM_DirectionDownCallback(LPTIM_HandleTypeDef *hlptim)
Direction counter changed from Up to Down callback in non-blocking mode.
__weak void HAL_LPTIM_RepCounterWriteCallback(LPTIM_HandleTypeDef *hlptim)
Successful APB bus write to repetition counter register callback in non-blocking mode.
__weak void HAL_LPTIM_DirectionUpCallback(LPTIM_HandleTypeDef *hlptim)
Direction counter changed from Down to Up callback in non-blocking mode.
__weak void HAL_LPTIM_AutoReloadWriteCallback(LPTIM_HandleTypeDef *hlptim)
Autoreload write callback in non-blocking mode.
__weak void HAL_LPTIM_AutoReloadMatchCallback(LPTIM_HandleTypeDef *hlptim)
Autoreload match callback in non-blocking mode.
__weak void HAL_LPTIM_TriggerCallback(LPTIM_HandleTypeDef *hlptim)
Trigger detected callback in non-blocking mode.
__weak void HAL_LPTIM_UpdateEventCallback(LPTIM_HandleTypeDef *hlptim)
Repetition counter underflowed (or contains zero) and LPTIM counter overflowed callback in non-blocki...
__weak void HAL_LPTIM_CompareWriteCallback(LPTIM_HandleTypeDef *hlptim)
Compare write callback in non-blocking mode.