STM32L4xx_HAL_Driver  1.14.0
IRDA Private Functions

Functions

void IRDA_InitCallbacksToDefault (IRDA_HandleTypeDef *hirda)
 Initialize the callbacks to their default values. More...
 
static HAL_StatusTypeDef IRDA_SetConfig (IRDA_HandleTypeDef *hirda)
 Configure the IRDA peripheral. More...
 
static HAL_StatusTypeDef IRDA_CheckIdleState (IRDA_HandleTypeDef *hirda)
 Check the IRDA Idle State. More...
 
static HAL_StatusTypeDef IRDA_WaitOnFlagUntilTimeout (IRDA_HandleTypeDef *hirda, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout)
 Handle IRDA Communication Timeout. More...
 
static void IRDA_EndTxTransfer (IRDA_HandleTypeDef *hirda)
 End ongoing Tx transfer on IRDA peripheral (following error detection or Transmit completion). More...
 
static void IRDA_EndRxTransfer (IRDA_HandleTypeDef *hirda)
 End ongoing Rx transfer on UART peripheral (following error detection or Reception completion). More...
 
static void IRDA_DMATransmitCplt (DMA_HandleTypeDef *hdma)
 DMA IRDA transmit process complete callback. More...
 
static void IRDA_DMATransmitHalfCplt (DMA_HandleTypeDef *hdma)
 DMA IRDA transmit process half complete callback. More...
 
static void IRDA_DMAReceiveCplt (DMA_HandleTypeDef *hdma)
 DMA IRDA receive process complete callback. More...
 
static void IRDA_DMAReceiveHalfCplt (DMA_HandleTypeDef *hdma)
 DMA IRDA receive process half complete callback. More...
 
static void IRDA_DMAError (DMA_HandleTypeDef *hdma)
 DMA IRDA communication error callback. More...
 
static void IRDA_DMAAbortOnError (DMA_HandleTypeDef *hdma)
 DMA IRDA communication abort callback, when initiated by HAL services on Error (To be called at end of DMA Abort procedure following error occurrence). More...
 
static void IRDA_DMATxAbortCallback (DMA_HandleTypeDef *hdma)
 DMA IRDA Tx communication abort callback, when initiated by user (To be called at end of DMA Tx Abort procedure following user abort request). More...
 
static void IRDA_DMARxAbortCallback (DMA_HandleTypeDef *hdma)
 DMA IRDA Rx communication abort callback, when initiated by user (To be called at end of DMA Rx Abort procedure following user abort request). More...
 
static void IRDA_DMATxOnlyAbortCallback (DMA_HandleTypeDef *hdma)
 DMA IRDA Tx communication abort callback, when initiated by user by a call to HAL_IRDA_AbortTransmit_IT API (Abort only Tx transfer) (This callback is executed at end of DMA Tx Abort procedure following user abort request, and leads to user Tx Abort Complete callback execution). More...
 
static void IRDA_DMARxOnlyAbortCallback (DMA_HandleTypeDef *hdma)
 DMA IRDA Rx communication abort callback, when initiated by user by a call to HAL_IRDA_AbortReceive_IT API (Abort only Rx transfer) (This callback is executed at end of DMA Rx Abort procedure following user abort request, and leads to user Rx Abort Complete callback execution). More...
 
static void IRDA_Transmit_IT (IRDA_HandleTypeDef *hirda)
 Send an amount of data in interrupt mode. More...
 
static void IRDA_EndTransmit_IT (IRDA_HandleTypeDef *hirda)
 Wrap up transmission in non-blocking mode. More...
 
static void IRDA_Receive_IT (IRDA_HandleTypeDef *hirda)
 Receive an amount of data in interrupt mode. More...
 

Detailed Description

Function Documentation

◆ IRDA_CheckIdleState()

static HAL_StatusTypeDef IRDA_CheckIdleState ( IRDA_HandleTypeDef hirda)
static

Check the IRDA Idle State.

Parameters
hirdaPointer to a IRDA_HandleTypeDef structure that contains the configuration information for the specified IRDA module.
Return values
HALstatus

Definition at line 2382 of file stm32l4xx_hal_irda.c.

2383 {
2384  uint32_t tickstart;
2385 
2386  /* Initialize the IRDA ErrorCode */
2387  hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
2388 
2389  /* Init tickstart for timeout managment*/
2390  tickstart = HAL_GetTick();
2391 
2392  /* Check if the Transmitter is enabled */
2393  if ((hirda->Instance->CR1 & USART_CR1_TE) == USART_CR1_TE)
2394  {
2395  /* Wait until TEACK flag is set */
2396  if (IRDA_WaitOnFlagUntilTimeout(hirda, USART_ISR_TEACK, RESET, tickstart, IRDA_TEACK_REACK_TIMEOUT) != HAL_OK)
2397  {
2398  /* Timeout occurred */
2399  return HAL_TIMEOUT;
2400  }
2401  }
2402  /* Check if the Receiver is enabled */
2403  if ((hirda->Instance->CR1 & USART_CR1_RE) == USART_CR1_RE)
2404  {
2405  /* Wait until REACK flag is set */
2406  if (IRDA_WaitOnFlagUntilTimeout(hirda, USART_ISR_REACK, RESET, tickstart, IRDA_TEACK_REACK_TIMEOUT) != HAL_OK)
2407  {
2408  /* Timeout occurred */
2409  return HAL_TIMEOUT;
2410  }
2411  }
2412 
2413  /* Initialize the IRDA state*/
2414  hirda->gState = HAL_IRDA_STATE_READY;
2415  hirda->RxState = HAL_IRDA_STATE_READY;
2416 
2417  /* Process Unlocked */
2418  __HAL_UNLOCK(hirda);
2419 
2420  return HAL_OK;
2421 }
static HAL_StatusTypeDef IRDA_WaitOnFlagUntilTimeout(IRDA_HandleTypeDef *hirda, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout)
Handle IRDA Communication Timeout.
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.
__HAL_UNLOCK(hrtc)
return HAL_OK

◆ IRDA_DMAAbortOnError()

static void IRDA_DMAAbortOnError ( DMA_HandleTypeDef hdma)
static

DMA IRDA communication abort callback, when initiated by HAL services on Error (To be called at end of DMA Abort procedure following error occurrence).

Parameters
hdmaDMA handle.
Return values
None

Definition at line 2662 of file stm32l4xx_hal_irda.c.

2663 {
2664  IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)(hdma->Parent);
2665  hirda->RxXferCount = 0U;
2666  hirda->TxXferCount = 0U;
2667 
2668 #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1)
2669  /* Call registered user error callback */
2670  hirda->ErrorCallback(hirda);
2671 #else
2672  /* Call legacy weak user error callback */
2673  HAL_IRDA_ErrorCallback(hirda);
2674 #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */
2675 }
void HAL_IRDA_ErrorCallback(IRDA_HandleTypeDef *hirda)
IRDA error callback.
struct __IRDA_HandleTypeDef else typedef struct endif IRDA_HandleTypeDef
IRDA handle Structure definition.

◆ IRDA_DMAError()

static void IRDA_DMAError ( DMA_HandleTypeDef hdma)
static

DMA IRDA communication error callback.

Parameters
hdmaPointer to a DMA_HandleTypeDef structure that contains the configuration information for the specified DMA module.
Return values
None

Definition at line 2622 of file stm32l4xx_hal_irda.c.

2623 {
2624  IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)(hdma->Parent);
2625 
2626  /* Stop IRDA DMA Tx request if ongoing */
2627  if (hirda->gState == HAL_IRDA_STATE_BUSY_TX)
2628  {
2629  if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAT))
2630  {
2631  hirda->TxXferCount = 0U;
2632  IRDA_EndTxTransfer(hirda);
2633  }
2634  }
2635 
2636  /* Stop IRDA DMA Rx request if ongoing */
2637  if (hirda->RxState == HAL_IRDA_STATE_BUSY_RX)
2638  {
2639  if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAR))
2640  {
2641  hirda->RxXferCount = 0U;
2642  IRDA_EndRxTransfer(hirda);
2643  }
2644  }
2645 
2646  hirda->ErrorCode |= HAL_IRDA_ERROR_DMA;
2647 #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1)
2648  /* Call registered user error callback */
2649  hirda->ErrorCallback(hirda);
2650 #else
2651  /* Call legacy weak user error callback */
2652  HAL_IRDA_ErrorCallback(hirda);
2653 #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */
2654 }
static void IRDA_EndRxTransfer(IRDA_HandleTypeDef *hirda)
End ongoing Rx transfer on UART peripheral (following error detection or Reception completion)...
void HAL_IRDA_ErrorCallback(IRDA_HandleTypeDef *hirda)
IRDA error callback.
static void IRDA_EndTxTransfer(IRDA_HandleTypeDef *hirda)
End ongoing Tx transfer on IRDA peripheral (following error detection or Transmit completion)...
struct __IRDA_HandleTypeDef else typedef struct endif IRDA_HandleTypeDef
IRDA handle Structure definition.

◆ IRDA_DMAReceiveCplt()

static void IRDA_DMAReceiveCplt ( DMA_HandleTypeDef hdma)
static

DMA IRDA receive process complete callback.

Parameters
hdmaPointer to a DMA_HandleTypeDef structure that contains the configuration information for the specified DMA module.
Return values
None

Definition at line 2567 of file stm32l4xx_hal_irda.c.

2568 {
2569  IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)(hdma->Parent);
2570 
2571  /* DMA Normal mode */
2572  if (HAL_IS_BIT_CLR(hdma->Instance->CCR, DMA_CCR_CIRC))
2573  {
2574  hirda->RxXferCount = 0U;
2575 
2576  /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */
2577  CLEAR_BIT(hirda->Instance->CR1, USART_CR1_PEIE);
2578  CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE);
2579 
2580  /* Disable the DMA transfer for the receiver request by resetting the DMAR bit
2581  in the IRDA CR3 register */
2582  CLEAR_BIT(hirda->Instance->CR3, USART_CR3_DMAR);
2583 
2584  /* At end of Rx process, restore hirda->RxState to Ready */
2585  hirda->RxState = HAL_IRDA_STATE_READY;
2586  }
2587 
2588 #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1)
2589  /* Call registered Rx complete callback */
2590  hirda->RxCpltCallback(hirda);
2591 #else
2592  /* Call legacy weak Rx complete callback */
2593  HAL_IRDA_RxCpltCallback(hirda);
2594 #endif /* USE_HAL_IRDA_REGISTER_CALLBACKS */
2595 }
DMA_Channel_TypeDef * Instance
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
struct __IRDA_HandleTypeDef else typedef struct endif IRDA_HandleTypeDef
IRDA handle Structure definition.
void HAL_IRDA_RxCpltCallback(IRDA_HandleTypeDef *hirda)
Rx Transfer completed callback.

◆ IRDA_DMAReceiveHalfCplt()

static void IRDA_DMAReceiveHalfCplt ( DMA_HandleTypeDef hdma)
static

DMA IRDA receive process half complete callback.

Parameters
hdmaPointer to a DMA_HandleTypeDef structure that contains the configuration information for the specified DMA module.
Return values
None

Definition at line 2603 of file stm32l4xx_hal_irda.c.

2604 {
2605  IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)(hdma->Parent);
2606 
2607 #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1)
2608  /*Call registered Rx Half complete callback*/
2609  hirda->RxHalfCpltCallback(hirda);
2610 #else
2611  /* Call legacy weak Rx Half complete callback */
2613 #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */
2614 }
void HAL_IRDA_RxHalfCpltCallback(IRDA_HandleTypeDef *hirda)
Rx Half Transfer complete callback.
struct __IRDA_HandleTypeDef else typedef struct endif IRDA_HandleTypeDef
IRDA handle Structure definition.

◆ IRDA_DMARxAbortCallback()

static void IRDA_DMARxAbortCallback ( DMA_HandleTypeDef hdma)
static

DMA IRDA Rx communication abort callback, when initiated by user (To be called at end of DMA Rx Abort procedure following user abort request).

Note
When this callback is executed, User Abort complete call back is called only if no Abort still ongoing for Tx DMA Handle.
Parameters
hdmaDMA handle.
Return values
None

Definition at line 2733 of file stm32l4xx_hal_irda.c.

2734 {
2735  IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)(hdma->Parent);
2736 
2737  hirda->hdmarx->XferAbortCallback = NULL;
2738 
2739  /* Check if an Abort process is still ongoing */
2740  if (hirda->hdmatx != NULL)
2741  {
2742  if (hirda->hdmatx->XferAbortCallback != NULL)
2743  {
2744  return;
2745  }
2746  }
2747 
2748  /* No Abort process still ongoing : All DMA channels are aborted, call user Abort Complete callback */
2749  hirda->TxXferCount = 0U;
2750  hirda->RxXferCount = 0U;
2751 
2752  /* Reset errorCode */
2753  hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
2754 
2755  /* Clear the Error flags in the ICR register */
2756  __HAL_IRDA_CLEAR_FLAG(hirda, IRDA_CLEAR_OREF | IRDA_CLEAR_NEF | IRDA_CLEAR_PEF | IRDA_CLEAR_FEF);
2757 
2758  /* Restore hirda->gState and hirda->RxState to Ready */
2759  hirda->gState = HAL_IRDA_STATE_READY;
2760  hirda->RxState = HAL_IRDA_STATE_READY;
2761 
2762  /* Call user Abort complete callback */
2763 #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1)
2764  /* Call registered Abort complete callback */
2765  hirda->AbortCpltCallback(hirda);
2766 #else
2767  /* Call legacy weak Abort complete callback */
2769 #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */
2770 }
void HAL_IRDA_AbortCpltCallback(IRDA_HandleTypeDef *hirda)
IRDA Abort Complete callback.
struct __IRDA_HandleTypeDef else typedef struct endif IRDA_HandleTypeDef
IRDA handle Structure definition.

◆ IRDA_DMARxOnlyAbortCallback()

static void IRDA_DMARxOnlyAbortCallback ( DMA_HandleTypeDef hdma)
static

DMA IRDA Rx communication abort callback, when initiated by user by a call to HAL_IRDA_AbortReceive_IT API (Abort only Rx transfer) (This callback is executed at end of DMA Rx Abort procedure following user abort request, and leads to user Rx Abort Complete callback execution).

Parameters
hdmaDMA handle.
Return values
None

Definition at line 2808 of file stm32l4xx_hal_irda.c.

2809 {
2810  IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
2811 
2812  hirda->RxXferCount = 0U;
2813 
2814  /* Clear the Error flags in the ICR register */
2815  __HAL_IRDA_CLEAR_FLAG(hirda, IRDA_CLEAR_OREF | IRDA_CLEAR_NEF | IRDA_CLEAR_PEF | IRDA_CLEAR_FEF);
2816 
2817  /* Restore hirda->RxState to Ready */
2818  hirda->RxState = HAL_IRDA_STATE_READY;
2819 
2820  /* Call user Abort complete callback */
2821 #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1)
2822  /* Call registered Abort Receive Complete Callback */
2823  hirda->AbortReceiveCpltCallback(hirda);
2824 #else
2825  /* Call legacy weak Abort Receive Complete Callback */
2827 #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */
2828 }
void HAL_IRDA_AbortReceiveCpltCallback(IRDA_HandleTypeDef *hirda)
IRDA Abort Receive Complete callback.
DMA handle Structure definition.
struct __IRDA_HandleTypeDef else typedef struct endif IRDA_HandleTypeDef
IRDA handle Structure definition.

◆ IRDA_DMATransmitCplt()

static void IRDA_DMATransmitCplt ( DMA_HandleTypeDef hdma)
static

DMA IRDA transmit process complete callback.

Parameters
hdmaPointer to a DMA_HandleTypeDef structure that contains the configuration information for the specified DMA module.
Return values
None

Definition at line 2512 of file stm32l4xx_hal_irda.c.

2513 {
2514  IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)(hdma->Parent);
2515 
2516  /* DMA Normal mode */
2517  if (HAL_IS_BIT_CLR(hdma->Instance->CCR, DMA_CCR_CIRC))
2518  {
2519  hirda->TxXferCount = 0U;
2520 
2521  /* Disable the DMA transfer for transmit request by resetting the DMAT bit
2522  in the IRDA CR3 register */
2523  CLEAR_BIT(hirda->Instance->CR3, USART_CR3_DMAT);
2524 
2525  /* Enable the IRDA Transmit Complete Interrupt */
2526  SET_BIT(hirda->Instance->CR1, USART_CR1_TCIE);
2527  }
2528  /* DMA Circular mode */
2529  else
2530  {
2531 #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1)
2532  /* Call registered Tx complete callback */
2533  hirda->TxCpltCallback(hirda);
2534 #else
2535  /* Call legacy weak Tx complete callback */
2536  HAL_IRDA_TxCpltCallback(hirda);
2537 #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */
2538  }
2539 
2540 }
DMA_Channel_TypeDef * Instance
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
void HAL_IRDA_TxCpltCallback(IRDA_HandleTypeDef *hirda)
Tx Transfer completed callback.
struct __IRDA_HandleTypeDef else typedef struct endif IRDA_HandleTypeDef
IRDA handle Structure definition.

◆ IRDA_DMATransmitHalfCplt()

static void IRDA_DMATransmitHalfCplt ( DMA_HandleTypeDef hdma)
static

DMA IRDA transmit process half complete callback.

Parameters
hdmaPointer to a DMA_HandleTypeDef structure that contains the configuration information for the specified DMA module.
Return values
None

Definition at line 2548 of file stm32l4xx_hal_irda.c.

2549 {
2550  IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)(hdma->Parent);
2551 
2552 #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1)
2553  /* Call registered Tx Half complete callback */
2554  hirda->TxHalfCpltCallback(hirda);
2555 #else
2556  /* Call legacy weak Tx complete callback */
2558 #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */
2559 }
void HAL_IRDA_TxHalfCpltCallback(IRDA_HandleTypeDef *hirda)
Tx Half Transfer completed callback.
struct __IRDA_HandleTypeDef else typedef struct endif IRDA_HandleTypeDef
IRDA handle Structure definition.

◆ IRDA_DMATxAbortCallback()

static void IRDA_DMATxAbortCallback ( DMA_HandleTypeDef hdma)
static

DMA IRDA Tx communication abort callback, when initiated by user (To be called at end of DMA Tx Abort procedure following user abort request).

Note
When this callback is executed, User Abort complete call back is called only if no Abort still ongoing for Rx DMA Handle.
Parameters
hdmaDMA handle.
Return values
None

Definition at line 2685 of file stm32l4xx_hal_irda.c.

2686 {
2687  IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)(hdma->Parent);
2688 
2689  hirda->hdmatx->XferAbortCallback = NULL;
2690 
2691  /* Check if an Abort process is still ongoing */
2692  if (hirda->hdmarx != NULL)
2693  {
2694  if (hirda->hdmarx->XferAbortCallback != NULL)
2695  {
2696  return;
2697  }
2698  }
2699 
2700  /* No Abort process still ongoing : All DMA channels are aborted, call user Abort Complete callback */
2701  hirda->TxXferCount = 0U;
2702  hirda->RxXferCount = 0U;
2703 
2704  /* Reset errorCode */
2705  hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
2706 
2707  /* Clear the Error flags in the ICR register */
2708  __HAL_IRDA_CLEAR_FLAG(hirda, IRDA_CLEAR_OREF | IRDA_CLEAR_NEF | IRDA_CLEAR_PEF | IRDA_CLEAR_FEF);
2709 
2710  /* Restore hirda->gState and hirda->RxState to Ready */
2711  hirda->gState = HAL_IRDA_STATE_READY;
2712  hirda->RxState = HAL_IRDA_STATE_READY;
2713 
2714  /* Call user Abort complete callback */
2715 #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1)
2716  /* Call registered Abort complete callback */
2717  hirda->AbortCpltCallback(hirda);
2718 #else
2719  /* Call legacy weak Abort complete callback */
2721 #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */
2722 }
void HAL_IRDA_AbortCpltCallback(IRDA_HandleTypeDef *hirda)
IRDA Abort Complete callback.
struct __IRDA_HandleTypeDef else typedef struct endif IRDA_HandleTypeDef
IRDA handle Structure definition.

◆ IRDA_DMATxOnlyAbortCallback()

static void IRDA_DMATxOnlyAbortCallback ( DMA_HandleTypeDef hdma)
static

DMA IRDA Tx communication abort callback, when initiated by user by a call to HAL_IRDA_AbortTransmit_IT API (Abort only Tx transfer) (This callback is executed at end of DMA Tx Abort procedure following user abort request, and leads to user Tx Abort Complete callback execution).

Parameters
hdmaDMA handle.
Return values
None

Definition at line 2781 of file stm32l4xx_hal_irda.c.

2782 {
2783  IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)(hdma->Parent);
2784 
2785  hirda->TxXferCount = 0U;
2786 
2787  /* Restore hirda->gState to Ready */
2788  hirda->gState = HAL_IRDA_STATE_READY;
2789 
2790  /* Call user Abort complete callback */
2791 #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1)
2792  /* Call registered Abort Transmit Complete Callback */
2793  hirda->AbortTransmitCpltCallback(hirda);
2794 #else
2795  /* Call legacy weak Abort Transmit Complete Callback */
2797 #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */
2798 }
struct __IRDA_HandleTypeDef else typedef struct endif IRDA_HandleTypeDef
IRDA handle Structure definition.
void HAL_IRDA_AbortTransmitCpltCallback(IRDA_HandleTypeDef *hirda)
IRDA Abort Complete callback.

◆ IRDA_EndRxTransfer()

static void IRDA_EndRxTransfer ( IRDA_HandleTypeDef hirda)
static

End ongoing Rx transfer on UART peripheral (following error detection or Reception completion).

Parameters
hirdaPointer to a IRDA_HandleTypeDef structure that contains the configuration information for the specified IRDA module.
Return values
None

Definition at line 2491 of file stm32l4xx_hal_irda.c.

2492 {
2493  /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */
2494 #if defined(USART_CR1_FIFOEN)
2495  CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
2496 #else
2497  CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE));
2498 #endif /* USART_CR1_FIFOEN */
2499  CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE);
2500 
2501  /* At end of Rx process, restore hirda->RxState to Ready */
2502  hirda->RxState = HAL_IRDA_STATE_READY;
2503 }
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)

◆ IRDA_EndTransmit_IT()

static void IRDA_EndTransmit_IT ( IRDA_HandleTypeDef hirda)
static

Wrap up transmission in non-blocking mode.

Parameters
hirdaPointer to a IRDA_HandleTypeDef structure that contains the configuration information for the specified IRDA module.
Return values
None

Definition at line 2881 of file stm32l4xx_hal_irda.c.

2882 {
2883  /* Disable the IRDA Transmit Complete Interrupt */
2884  CLEAR_BIT(hirda->Instance->CR1, USART_CR1_TCIE);
2885 
2886  /* Tx process is ended, restore hirda->gState to Ready */
2887  hirda->gState = HAL_IRDA_STATE_READY;
2888 
2889 #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1)
2890  /* Call registered Tx complete callback */
2891  hirda->TxCpltCallback(hirda);
2892 #else
2893  /* Call legacy weak Tx complete callback */
2894  HAL_IRDA_TxCpltCallback(hirda);
2895 #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */
2896 }
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
void HAL_IRDA_TxCpltCallback(IRDA_HandleTypeDef *hirda)
Tx Transfer completed callback.

◆ IRDA_EndTxTransfer()

static void IRDA_EndTxTransfer ( IRDA_HandleTypeDef hirda)
static

End ongoing Tx transfer on IRDA peripheral (following error detection or Transmit completion).

Parameters
hirdaPointer to a IRDA_HandleTypeDef structure that contains the configuration information for the specified IRDA module.
Return values
None

Definition at line 2471 of file stm32l4xx_hal_irda.c.

2472 {
2473  /* Disable TXEIE and TCIE interrupts */
2474 #if defined(USART_CR1_FIFOEN)
2475  CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE));
2476 #else
2477  CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE));
2478 #endif /* USART_CR1_FIFOEN */
2479 
2480  /* At end of Tx process, restore hirda->gState to Ready */
2481  hirda->gState = HAL_IRDA_STATE_READY;
2482 }
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)

◆ IRDA_InitCallbacksToDefault()

void IRDA_InitCallbacksToDefault ( IRDA_HandleTypeDef hirda)

Initialize the callbacks to their default values.

Parameters
hirdaIRDA handle.
Return values
none

Definition at line 2255 of file stm32l4xx_hal_irda.c.

2256 {
2257  /* Init the IRDA Callback settings */
2258  hirda->TxHalfCpltCallback = HAL_IRDA_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */
2259  hirda->TxCpltCallback = HAL_IRDA_TxCpltCallback; /* Legacy weak TxCpltCallback */
2260  hirda->RxHalfCpltCallback = HAL_IRDA_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */
2261  hirda->RxCpltCallback = HAL_IRDA_RxCpltCallback; /* Legacy weak RxCpltCallback */
2262  hirda->ErrorCallback = HAL_IRDA_ErrorCallback; /* Legacy weak ErrorCallback */
2263  hirda->AbortCpltCallback = HAL_IRDA_AbortCpltCallback; /* Legacy weak AbortCpltCallback */
2264  hirda->AbortTransmitCpltCallback = HAL_IRDA_AbortTransmitCpltCallback; /* Legacy weak AbortTransmitCpltCallback */
2265  hirda->AbortReceiveCpltCallback = HAL_IRDA_AbortReceiveCpltCallback; /* Legacy weak AbortReceiveCpltCallback */
2266 
2267 }
void HAL_IRDA_AbortReceiveCpltCallback(IRDA_HandleTypeDef *hirda)
IRDA Abort Receive Complete callback.
void HAL_IRDA_RxHalfCpltCallback(IRDA_HandleTypeDef *hirda)
Rx Half Transfer complete callback.
void HAL_IRDA_ErrorCallback(IRDA_HandleTypeDef *hirda)
IRDA error callback.
void HAL_IRDA_TxCpltCallback(IRDA_HandleTypeDef *hirda)
Tx Transfer completed callback.
void HAL_IRDA_TxHalfCpltCallback(IRDA_HandleTypeDef *hirda)
Tx Half Transfer completed callback.
void HAL_IRDA_AbortCpltCallback(IRDA_HandleTypeDef *hirda)
IRDA Abort Complete callback.
void HAL_IRDA_RxCpltCallback(IRDA_HandleTypeDef *hirda)
Rx Transfer completed callback.
void HAL_IRDA_AbortTransmitCpltCallback(IRDA_HandleTypeDef *hirda)
IRDA Abort Complete callback.

◆ IRDA_Receive_IT()

static void IRDA_Receive_IT ( IRDA_HandleTypeDef hirda)
static

Receive an amount of data in interrupt mode.

Note
Function is called under interruption only, once interruptions have been enabled by HAL_IRDA_Receive_IT()
Parameters
hirdaPointer to a IRDA_HandleTypeDef structure that contains the configuration information for the specified IRDA module.
Return values
None

Definition at line 2906 of file stm32l4xx_hal_irda.c.

2907 {
2908  uint16_t *tmp;
2909  uint16_t uhMask = hirda->Mask;
2910  uint16_t uhdata;
2911 
2912  /* Check that a Rx process is ongoing */
2913  if (hirda->RxState == HAL_IRDA_STATE_BUSY_RX)
2914  {
2915  uhdata = (uint16_t) READ_REG(hirda->Instance->RDR);
2916  if ((hirda->Init.WordLength == IRDA_WORDLENGTH_9B) && (hirda->Init.Parity == IRDA_PARITY_NONE))
2917  {
2918  tmp = (uint16_t *) hirda->pRxBuffPtr; /* Derogation R.11.3 */
2919  *tmp = (uint16_t)(uhdata & uhMask);
2920  hirda->pRxBuffPtr += 2U;
2921  }
2922  else
2923  {
2924  *hirda->pRxBuffPtr = (uint8_t)(uhdata & (uint8_t)uhMask);
2925  hirda->pRxBuffPtr++;
2926  }
2927 
2928  hirda->RxXferCount--;
2929  if (hirda->RxXferCount == 0U)
2930  {
2931  /* Disable the IRDA Parity Error Interrupt and RXNE interrupt */
2932 #if defined(USART_CR1_FIFOEN)
2933  CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
2934 #else
2935  CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE));
2936 #endif /* USART_CR1_FIFOEN */
2937 
2938  /* Disable the IRDA Error Interrupt: (Frame error, noise error, overrun error) */
2939  CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE);
2940 
2941  /* Rx process is completed, restore hirda->RxState to Ready */
2942  hirda->RxState = HAL_IRDA_STATE_READY;
2943 
2944 #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1)
2945  /* Call registered Rx complete callback */
2946  hirda->RxCpltCallback(hirda);
2947 #else
2948  /* Call legacy weak Rx complete callback */
2949  HAL_IRDA_RxCpltCallback(hirda);
2950 #endif /* USE_HAL_IRDA_REGISTER_CALLBACKS */
2951  }
2952  }
2953  else
2954  {
2955  /* Clear RXNE interrupt flag */
2956  __HAL_IRDA_SEND_REQ(hirda, IRDA_RXDATA_FLUSH_REQUEST);
2957  }
2958 }
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
void HAL_IRDA_RxCpltCallback(IRDA_HandleTypeDef *hirda)
Rx Transfer completed callback.

◆ IRDA_SetConfig()

static HAL_StatusTypeDef IRDA_SetConfig ( IRDA_HandleTypeDef hirda)
static

Configure the IRDA peripheral.

Parameters
hirdaPointer to a IRDA_HandleTypeDef structure that contains the configuration information for the specified IRDA module.
Return values
HALstatus

Definition at line 2276 of file stm32l4xx_hal_irda.c.

2277 {
2278  uint32_t tmpreg;
2279  IRDA_ClockSourceTypeDef clocksource;
2280  HAL_StatusTypeDef ret = HAL_OK;
2281 #if defined(USART_PRESC_PRESCALER)
2282  const uint16_t IRDAPrescTable[12] = {1U, 2U, 4U, 6U, 8U, 10U, 12U, 16U, 32U, 64U, 128U, 256U};
2283 #endif /* USART_PRESC_PRESCALER */
2284 
2285  /* Check the communication parameters */
2286  assert_param(IS_IRDA_BAUDRATE(hirda->Init.BaudRate));
2287  assert_param(IS_IRDA_WORD_LENGTH(hirda->Init.WordLength));
2288  assert_param(IS_IRDA_PARITY(hirda->Init.Parity));
2289  assert_param(IS_IRDA_TX_RX_MODE(hirda->Init.Mode));
2290  assert_param(IS_IRDA_PRESCALER(hirda->Init.Prescaler));
2291  assert_param(IS_IRDA_POWERMODE(hirda->Init.PowerMode));
2292 #if defined(USART_PRESC_PRESCALER)
2293  assert_param(IS_IRDA_CLOCKPRESCALER(hirda->Init.ClockPrescaler));
2294 #endif /* USART_PRESC_PRESCALER */
2295 
2296  /*-------------------------- USART CR1 Configuration -----------------------*/
2297  /* Configure the IRDA Word Length, Parity and transfer Mode:
2298  Set the M bits according to hirda->Init.WordLength value
2299  Set PCE and PS bits according to hirda->Init.Parity value
2300  Set TE and RE bits according to hirda->Init.Mode value */
2301  tmpreg = (uint32_t)hirda->Init.WordLength | hirda->Init.Parity | hirda->Init.Mode ;
2302 
2303  MODIFY_REG(hirda->Instance->CR1, IRDA_CR1_FIELDS, tmpreg);
2304 
2305  /*-------------------------- USART CR3 Configuration -----------------------*/
2306  MODIFY_REG(hirda->Instance->CR3, USART_CR3_IRLP, hirda->Init.PowerMode);
2307 
2308 #if defined(USART_PRESC_PRESCALER)
2309  /*--------------------- USART clock PRESC Configuration ----------------*/
2310  /* Configure
2311  * - IRDA Clock Prescaler: set PRESCALER according to hirda->Init.ClockPrescaler value */
2312  MODIFY_REG(hirda->Instance->PRESC, USART_PRESC_PRESCALER, hirda->Init.ClockPrescaler);
2313 #endif /* USART_PRESC_PRESCALER */
2314 
2315  /*-------------------------- USART GTPR Configuration ----------------------*/
2316  MODIFY_REG(hirda->Instance->GTPR, (uint16_t)USART_GTPR_PSC, (uint16_t)hirda->Init.Prescaler);
2317 
2318  /*-------------------------- USART BRR Configuration -----------------------*/
2319  IRDA_GETCLOCKSOURCE(hirda, clocksource);
2320  tmpreg = 0U;
2321  switch (clocksource)
2322  {
2324 #if defined(USART_PRESC_PRESCALER)
2325  tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(HAL_RCC_GetPCLK1Freq(), hirda->Init.BaudRate, hirda->Init.ClockPrescaler));
2326 #else
2327  tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(HAL_RCC_GetPCLK1Freq(), hirda->Init.BaudRate));
2328 #endif /* USART_PRESC_PRESCALER */
2329  break;
2331 #if defined(USART_PRESC_PRESCALER)
2332  tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(HAL_RCC_GetPCLK2Freq(), hirda->Init.BaudRate, hirda->Init.ClockPrescaler));
2333 #else
2334  tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(HAL_RCC_GetPCLK2Freq(), hirda->Init.BaudRate));
2335 #endif /* USART_PRESC_PRESCALER */
2336  break;
2337  case IRDA_CLOCKSOURCE_HSI:
2338 #if defined(USART_PRESC_PRESCALER)
2339  tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(HSI_VALUE, hirda->Init.BaudRate, hirda->Init.ClockPrescaler));
2340 #else
2341  tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(HSI_VALUE, hirda->Init.BaudRate));
2342 #endif /* USART_PRESC_PRESCALER */
2343  break;
2345 #if defined(USART_PRESC_PRESCALER)
2346  tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(HAL_RCC_GetSysClockFreq(), hirda->Init.BaudRate, hirda->Init.ClockPrescaler));
2347 #else
2348  tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(HAL_RCC_GetSysClockFreq(), hirda->Init.BaudRate));
2349 #endif /* USART_PRESC_PRESCALER */
2350  break;
2351  case IRDA_CLOCKSOURCE_LSE:
2352 #if defined(USART_PRESC_PRESCALER)
2353  tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16((uint32_t)LSE_VALUE, hirda->Init.BaudRate, hirda->Init.ClockPrescaler));
2354 #else
2355  tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16((uint32_t)LSE_VALUE, hirda->Init.BaudRate));
2356 #endif /* USART_PRESC_PRESCALER */
2357  break;
2358  default:
2359  ret = HAL_ERROR;
2360  break;
2361  }
2362 
2363  /* USARTDIV must be greater than or equal to 0d16 */
2364  if ((tmpreg >= USART_BRR_MIN) && (tmpreg <= USART_BRR_MAX))
2365  {
2366  hirda->Instance->BRR = tmpreg;
2367  }
2368  else
2369  {
2370  ret = HAL_ERROR;
2371  }
2372 
2373  return ret;
2374 }
uint32_t HAL_RCC_GetPCLK2Freq(void)
Return the PCLK2 frequency.
return HAL_OK
IRDA_ClockSourceTypeDef
IRDA clock sources definition.
uint32_t HAL_RCC_GetSysClockFreq(void)
Return the SYSCLK frequency.
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
uint32_t HAL_RCC_GetPCLK1Freq(void)
Return the PCLK1 frequency.
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))

◆ IRDA_Transmit_IT()

static void IRDA_Transmit_IT ( IRDA_HandleTypeDef hirda)
static

Send an amount of data in interrupt mode.

Note
Function is called under interruption only, once interruptions have been enabled by HAL_IRDA_Transmit_IT().
Parameters
hirdaPointer to a IRDA_HandleTypeDef structure that contains the configuration information for the specified IRDA module.
Return values
None

Definition at line 2838 of file stm32l4xx_hal_irda.c.

2839 {
2840  uint16_t *tmp;
2841 
2842  /* Check that a Tx process is ongoing */
2843  if (hirda->gState == HAL_IRDA_STATE_BUSY_TX)
2844  {
2845  if (hirda->TxXferCount == 0U)
2846  {
2847  /* Disable the IRDA Transmit Data Register Empty Interrupt */
2848 #if defined(USART_CR1_FIFOEN)
2849  CLEAR_BIT(hirda->Instance->CR1, USART_CR1_TXEIE_TXFNFIE);
2850 #else
2851  CLEAR_BIT(hirda->Instance->CR1, USART_CR1_TXEIE);
2852 #endif /* USART_CR1_FIFOEN */
2853 
2854  /* Enable the IRDA Transmit Complete Interrupt */
2855  SET_BIT(hirda->Instance->CR1, USART_CR1_TCIE);
2856  }
2857  else
2858  {
2859  if ((hirda->Init.WordLength == IRDA_WORDLENGTH_9B) && (hirda->Init.Parity == IRDA_PARITY_NONE))
2860  {
2861  tmp = (uint16_t *) hirda->pTxBuffPtr; /* Derogation R.11.3 */
2862  hirda->Instance->TDR = (uint16_t)(*tmp & 0x01FFU);
2863  hirda->pTxBuffPtr += 2U;
2864  }
2865  else
2866  {
2867  hirda->Instance->TDR = (uint8_t)(*hirda->pTxBuffPtr & 0xFFU);
2868  hirda->pTxBuffPtr++;
2869  }
2870  hirda->TxXferCount--;
2871  }
2872  }
2873 }
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)

◆ IRDA_WaitOnFlagUntilTimeout()

static HAL_StatusTypeDef IRDA_WaitOnFlagUntilTimeout ( IRDA_HandleTypeDef hirda,
uint32_t  Flag,
FlagStatus  Status,
uint32_t  Tickstart,
uint32_t  Timeout 
)
static

Handle IRDA Communication Timeout.

Parameters
hirdaPointer to a IRDA_HandleTypeDef structure that contains the configuration information for the specified IRDA module.
FlagSpecifies the IRDA flag to check.
StatusFlag status (SET or RESET)
TickstartTick start value
TimeoutTimeout duration
Return values
HALstatus

Definition at line 2433 of file stm32l4xx_hal_irda.c.

2435 {
2436  /* Wait until flag is set */
2437  while ((__HAL_IRDA_GET_FLAG(hirda, Flag) ? SET : RESET) == Status)
2438  {
2439  /* Check for the Timeout */
2440  if (Timeout != HAL_MAX_DELAY)
2441  {
2442  if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
2443  {
2444  /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */
2445 #if defined(USART_CR1_FIFOEN)
2446  CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_TXEIE_TXFNFIE));
2447 #else
2448  CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE));
2449 #endif /* USART_CR1_FIFOEN */
2450  CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE);
2451 
2452  hirda->gState = HAL_IRDA_STATE_READY;
2453  hirda->RxState = HAL_IRDA_STATE_READY;
2454 
2455  /* Process Unlocked */
2456  __HAL_UNLOCK(hirda);
2457  return HAL_TIMEOUT;
2458  }
2459  }
2460  }
2461  return HAL_OK;
2462 }
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.
__HAL_UNLOCK(hrtc)
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
return HAL_OK