STM32L4xx_HAL_Driver  1.14.0
Initialization and de-initialization functions

Initialization and Configuration functions. More...

Functions

HAL_StatusTypeDef HAL_UART_Init (UART_HandleTypeDef *huart)
 Initialize the UART mode according to the specified parameters in the UART_InitTypeDef and initialize the associated handle. More...
 
HAL_StatusTypeDef HAL_HalfDuplex_Init (UART_HandleTypeDef *huart)
 Initialize the half-duplex mode according to the specified parameters in the UART_InitTypeDef and creates the associated handle. More...
 
HAL_StatusTypeDef HAL_LIN_Init (UART_HandleTypeDef *huart, uint32_t BreakDetectLength)
 Initialize the LIN mode according to the specified parameters in the UART_InitTypeDef and creates the associated handle. More...
 
HAL_StatusTypeDef HAL_MultiProcessor_Init (UART_HandleTypeDef *huart, uint8_t Address, uint32_t WakeUpMethod)
 Initialize the multiprocessor mode according to the specified parameters in the UART_InitTypeDef and initialize the associated handle. More...
 
HAL_StatusTypeDef HAL_UART_DeInit (UART_HandleTypeDef *huart)
 DeInitialize the UART peripheral. More...
 
void HAL_UART_MspInit (UART_HandleTypeDef *huart)
 Initialize the UART MSP. More...
 
void HAL_UART_MspDeInit (UART_HandleTypeDef *huart)
 DeInitialize the UART MSP. More...
 
HAL_StatusTypeDef HAL_UART_RegisterCallback (UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID, pUART_CallbackTypeDef pCallback)
 Register a User UART Callback To be used instead of the weak predefined callback. More...
 
HAL_StatusTypeDef HAL_UART_UnRegisterCallback (UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID)
 Unregister an UART Callback UART callaback is redirected to the weak predefined callback. More...
 

Detailed Description

Initialization and Configuration functions.

===============================================================================
            ##### Initialization and Configuration functions #####
 ===============================================================================
    [..]
    This subsection provides a set of functions allowing to initialize the USARTx or the UARTy
    in asynchronous mode.
      (+) For the asynchronous mode the parameters below can be configured:
        (++) Baud Rate
        (++) Word Length
        (++) Stop Bit
        (++) Parity: If the parity is enabled, then the MSB bit of the data written
             in the data register is transmitted but is changed by the parity bit.
        (++) Hardware flow control
        (++) Receiver/transmitter modes
        (++) Over Sampling Method
        (++) One-Bit Sampling Method
      (+) For the asynchronous mode, the following advanced features can be configured as well:
        (++) TX and/or RX pin level inversion
        (++) data logical level inversion
        (++) RX and TX pins swap
        (++) RX overrun detection disabling
        (++) DMA disabling on RX error
        (++) MSB first on communication line
        (++) auto Baud rate detection
    [..]
    The HAL_UART_Init(), HAL_HalfDuplex_Init(), HAL_LIN_Init()and HAL_MultiProcessor_Init()API
    follow respectively the UART asynchronous, UART Half duplex, UART LIN mode
    and UART multiprocessor mode configuration procedures (details for the procedures
    are available in reference manual).

Depending on the frame length defined by the M1 and M0 bits (7-bit, 8-bit or 9-bit), the possible UART formats are listed in the following table.

Table 1. UART frame format. +--------------------------------------------------------------------—+ | M1 bit | M0 bit | PCE bit | UART frame | |------—|------—|--------—|------------------------------------—| | 0 | 0 | 0 | | SB | 8 bit data | STB | | |------—|------—|--------—|------------------------------------—| | 0 | 0 | 1 | | SB | 7 bit data | PB | STB | | |------—|------—|--------—|------------------------------------—| | 0 | 1 | 0 | | SB | 9 bit data | STB | | |------—|------—|--------—|------------------------------------—| | 0 | 1 | 1 | | SB | 8 bit data | PB | STB | | |------—|------—|--------—|------------------------------------—| | 1 | 0 | 0 | | SB | 7 bit data | STB | | |------—|------—|--------—|------------------------------------—| | 1 | 0 | 1 | | SB | 6 bit data | PB | STB | | +--------------------------------------------------------------------—+

Function Documentation

◆ HAL_HalfDuplex_Init()

HAL_StatusTypeDef HAL_HalfDuplex_Init ( UART_HandleTypeDef huart)

Initialize the half-duplex mode according to the specified parameters in the UART_InitTypeDef and creates the associated handle.

Parameters
huartUART handle.
Return values
HALstatus

Definition at line 381 of file stm32l4xx_hal_uart.c.

382 {
383  /* Check the UART handle allocation */
384  if (huart == NULL)
385  {
386  return HAL_ERROR;
387  }
388 
389  /* Check UART instance */
390  assert_param(IS_UART_HALFDUPLEX_INSTANCE(huart->Instance));
391 
392  if (huart->gState == HAL_UART_STATE_RESET)
393  {
394  /* Allocate lock resource and initialize it */
395  huart->Lock = HAL_UNLOCKED;
396 
397 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
399 
400  if (huart->MspInitCallback == NULL)
401  {
403  }
404 
405  /* Init the low level hardware */
406  huart->MspInitCallback(huart);
407 #else
408  /* Init the low level hardware : GPIO, CLOCK */
409  HAL_UART_MspInit(huart);
410 #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
411  }
412 
413  huart->gState = HAL_UART_STATE_BUSY;
414 
415  __HAL_UART_DISABLE(huart);
416 
417  /* Set the UART Communication parameters */
418  if (UART_SetConfig(huart) == HAL_ERROR)
419  {
420  return HAL_ERROR;
421  }
422 
423  if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT)
424  {
425  UART_AdvFeatureConfig(huart);
426  }
427 
428  /* In half-duplex mode, the following bits must be kept cleared:
429  - LINEN and CLKEN bits in the USART_CR2 register,
430  - SCEN and IREN bits in the USART_CR3 register.*/
431  CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
432  CLEAR_BIT(huart->Instance->CR3, (USART_CR3_IREN | USART_CR3_SCEN));
433 
434  /* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */
435  SET_BIT(huart->Instance->CR3, USART_CR3_HDSEL);
436 
437  __HAL_UART_ENABLE(huart);
438 
439  /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
440  return (UART_CheckIdleState(huart));
441 }
HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart)
Check the UART Idle State.
void UART_AdvFeatureConfig(UART_HandleTypeDef *huart)
Configure the UART peripheral advanced features.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
Initialize the UART MSP.
USART_TypeDef * Instance
UART_AdvFeatureInitTypeDef AdvancedInit
void(* MspInitCallback)(struct __UART_HandleTypeDef *huart)
void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart)
Initialize the callbacks to their default values.
HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
Configure the UART peripheral.
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))
__IO HAL_UART_StateTypeDef gState

◆ HAL_LIN_Init()

HAL_StatusTypeDef HAL_LIN_Init ( UART_HandleTypeDef huart,
uint32_t  BreakDetectLength 
)

Initialize the LIN mode according to the specified parameters in the UART_InitTypeDef and creates the associated handle.

Parameters
huartUART handle.
BreakDetectLengthSpecifies the LIN break detection length. This parameter can be one of the following values:
  • UART_LINBREAKDETECTLENGTH_10B 10-bit break detection
  • UART_LINBREAKDETECTLENGTH_11B 11-bit break detection
Return values
HALstatus

Definition at line 454 of file stm32l4xx_hal_uart.c.

455 {
456  /* Check the UART handle allocation */
457  if (huart == NULL)
458  {
459  return HAL_ERROR;
460  }
461 
462  /* Check the LIN UART instance */
463  assert_param(IS_UART_LIN_INSTANCE(huart->Instance));
464  /* Check the Break detection length parameter */
465  assert_param(IS_UART_LIN_BREAK_DETECT_LENGTH(BreakDetectLength));
466 
467  /* LIN mode limited to 16-bit oversampling only */
468  if (huart->Init.OverSampling == UART_OVERSAMPLING_8)
469  {
470  return HAL_ERROR;
471  }
472  /* LIN mode limited to 8-bit data length */
473  if (huart->Init.WordLength != UART_WORDLENGTH_8B)
474  {
475  return HAL_ERROR;
476  }
477 
478  if (huart->gState == HAL_UART_STATE_RESET)
479  {
480  /* Allocate lock resource and initialize it */
481  huart->Lock = HAL_UNLOCKED;
482 
483 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
485 
486  if (huart->MspInitCallback == NULL)
487  {
489  }
490 
491  /* Init the low level hardware */
492  huart->MspInitCallback(huart);
493 #else
494  /* Init the low level hardware : GPIO, CLOCK */
495  HAL_UART_MspInit(huart);
496 #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
497  }
498 
499  huart->gState = HAL_UART_STATE_BUSY;
500 
501  __HAL_UART_DISABLE(huart);
502 
503  /* Set the UART Communication parameters */
504  if (UART_SetConfig(huart) == HAL_ERROR)
505  {
506  return HAL_ERROR;
507  }
508 
509  if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT)
510  {
511  UART_AdvFeatureConfig(huart);
512  }
513 
514  /* In LIN mode, the following bits must be kept cleared:
515  - LINEN and CLKEN bits in the USART_CR2 register,
516  - SCEN and IREN bits in the USART_CR3 register.*/
517  CLEAR_BIT(huart->Instance->CR2, USART_CR2_CLKEN);
518  CLEAR_BIT(huart->Instance->CR3, (USART_CR3_HDSEL | USART_CR3_IREN | USART_CR3_SCEN));
519 
520  /* Enable the LIN mode by setting the LINEN bit in the CR2 register */
521  SET_BIT(huart->Instance->CR2, USART_CR2_LINEN);
522 
523  /* Set the USART LIN Break detection length. */
524  MODIFY_REG(huart->Instance->CR2, USART_CR2_LBDL, BreakDetectLength);
525 
526  __HAL_UART_ENABLE(huart);
527 
528  /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
529  return (UART_CheckIdleState(huart));
530 }
HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart)
Check the UART Idle State.
void UART_AdvFeatureConfig(UART_HandleTypeDef *huart)
Configure the UART peripheral advanced features.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
Initialize the UART MSP.
USART_TypeDef * Instance
UART_AdvFeatureInitTypeDef AdvancedInit
void(* MspInitCallback)(struct __UART_HandleTypeDef *huart)
void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart)
Initialize the callbacks to their default values.
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
Configure the UART peripheral.
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))
__IO HAL_UART_StateTypeDef gState

◆ HAL_MultiProcessor_Init()

HAL_StatusTypeDef HAL_MultiProcessor_Init ( UART_HandleTypeDef huart,
uint8_t  Address,
uint32_t  WakeUpMethod 
)

Initialize the multiprocessor mode according to the specified parameters in the UART_InitTypeDef and initialize the associated handle.

Parameters
huartUART handle.
AddressUART node address (4-, 6-, 7- or 8-bit long).
WakeUpMethodSpecifies the UART wakeup method. This parameter can be one of the following values:
  • UART_WAKEUPMETHOD_IDLELINE WakeUp by an idle line detection
  • UART_WAKEUPMETHOD_ADDRESSMARK WakeUp by an address mark
Note
If the user resorts to idle line detection wake up, the Address parameter is useless and ignored by the initialization function.
If the user resorts to address mark wake up, the address length detection is configured by default to 4 bits only. For the UART to be able to manage 6-, 7- or 8-bit long addresses detection, the API HAL_MultiProcessorEx_AddressLength_Set() must be called after HAL_MultiProcessor_Init().
Return values
HALstatus

Definition at line 551 of file stm32l4xx_hal_uart.c.

552 {
553  /* Check the UART handle allocation */
554  if (huart == NULL)
555  {
556  return HAL_ERROR;
557  }
558 
559  /* Check the wake up method parameter */
560  assert_param(IS_UART_WAKEUPMETHOD(WakeUpMethod));
561 
562  if (huart->gState == HAL_UART_STATE_RESET)
563  {
564  /* Allocate lock resource and initialize it */
565  huart->Lock = HAL_UNLOCKED;
566 
567 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
569 
570  if (huart->MspInitCallback == NULL)
571  {
573  }
574 
575  /* Init the low level hardware */
576  huart->MspInitCallback(huart);
577 #else
578  /* Init the low level hardware : GPIO, CLOCK */
579  HAL_UART_MspInit(huart);
580 #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
581  }
582 
583  huart->gState = HAL_UART_STATE_BUSY;
584 
585  __HAL_UART_DISABLE(huart);
586 
587  /* Set the UART Communication parameters */
588  if (UART_SetConfig(huart) == HAL_ERROR)
589  {
590  return HAL_ERROR;
591  }
592 
593  if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT)
594  {
595  UART_AdvFeatureConfig(huart);
596  }
597 
598  /* In multiprocessor mode, the following bits must be kept cleared:
599  - LINEN and CLKEN bits in the USART_CR2 register,
600  - SCEN, HDSEL and IREN bits in the USART_CR3 register. */
601  CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
602  CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
603 
604  if (WakeUpMethod == UART_WAKEUPMETHOD_ADDRESSMARK)
605  {
606  /* If address mark wake up method is chosen, set the USART address node */
607  MODIFY_REG(huart->Instance->CR2, USART_CR2_ADD, ((uint32_t)Address << UART_CR2_ADDRESS_LSB_POS));
608  }
609 
610  /* Set the wake up method by setting the WAKE bit in the CR1 register */
611  MODIFY_REG(huart->Instance->CR1, USART_CR1_WAKE, WakeUpMethod);
612 
613  __HAL_UART_ENABLE(huart);
614 
615  /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
616  return (UART_CheckIdleState(huart));
617 }
HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart)
Check the UART Idle State.
void UART_AdvFeatureConfig(UART_HandleTypeDef *huart)
Configure the UART peripheral advanced features.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
Initialize the UART MSP.
USART_TypeDef * Instance
UART_AdvFeatureInitTypeDef AdvancedInit
void(* MspInitCallback)(struct __UART_HandleTypeDef *huart)
void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart)
Initialize the callbacks to their default values.
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
Configure the UART peripheral.
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))
__IO HAL_UART_StateTypeDef gState

◆ HAL_UART_DeInit()

HAL_StatusTypeDef HAL_UART_DeInit ( UART_HandleTypeDef huart)

DeInitialize the UART peripheral.

Parameters
huartUART handle.
Return values
HALstatus

Definition at line 625 of file stm32l4xx_hal_uart.c.

626 {
627  /* Check the UART handle allocation */
628  if (huart == NULL)
629  {
630  return HAL_ERROR;
631  }
632 
633  /* Check the parameters */
634  assert_param((IS_UART_INSTANCE(huart->Instance)) || (IS_LPUART_INSTANCE(huart->Instance)));
635 
636  huart->gState = HAL_UART_STATE_BUSY;
637 
638  __HAL_UART_DISABLE(huart);
639 
640  huart->Instance->CR1 = 0x0U;
641  huart->Instance->CR2 = 0x0U;
642  huart->Instance->CR3 = 0x0U;
643 
644 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
645  if (huart->MspDeInitCallback == NULL)
646  {
648  }
649  /* DeInit the low level hardware */
650  huart->MspDeInitCallback(huart);
651 #else
652  /* DeInit the low level hardware */
653  HAL_UART_MspDeInit(huart);
654 #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
655 
656  huart->ErrorCode = HAL_UART_ERROR_NONE;
657  huart->gState = HAL_UART_STATE_RESET;
658  huart->RxState = HAL_UART_STATE_RESET;
659 
660  __HAL_UNLOCK(huart);
661 
662  return HAL_OK;
663 }
__IO HAL_UART_StateTypeDef RxState
__HAL_UNLOCK(hrtc)
return HAL_OK
USART_TypeDef * Instance
void HAL_UART_MspDeInit(UART_HandleTypeDef *huart)
DeInitialize the UART MSP.
void(* MspDeInitCallback)(struct __UART_HandleTypeDef *huart)
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))
__IO HAL_UART_StateTypeDef gState

◆ HAL_UART_Init()

HAL_StatusTypeDef HAL_UART_Init ( UART_HandleTypeDef huart)

Initialize the UART mode according to the specified parameters in the UART_InitTypeDef and initialize the associated handle.

Parameters
huartUART handle.
Return values
HALstatus

Definition at line 308 of file stm32l4xx_hal_uart.c.

309 {
310  /* Check the UART handle allocation */
311  if (huart == NULL)
312  {
313  return HAL_ERROR;
314  }
315 
316  if (huart->Init.HwFlowCtl != UART_HWCONTROL_NONE)
317  {
318  /* Check the parameters */
319  assert_param(IS_UART_HWFLOW_INSTANCE(huart->Instance));
320  }
321  else
322  {
323  /* Check the parameters */
324  assert_param((IS_UART_INSTANCE(huart->Instance)) || (IS_LPUART_INSTANCE(huart->Instance)));
325  }
326 
327  if (huart->gState == HAL_UART_STATE_RESET)
328  {
329  /* Allocate lock resource and initialize it */
330  huart->Lock = HAL_UNLOCKED;
331 
332 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
334 
335  if (huart->MspInitCallback == NULL)
336  {
338  }
339 
340  /* Init the low level hardware */
341  huart->MspInitCallback(huart);
342 #else
343  /* Init the low level hardware : GPIO, CLOCK */
344  HAL_UART_MspInit(huart);
345 #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
346  }
347 
348  huart->gState = HAL_UART_STATE_BUSY;
349 
350  __HAL_UART_DISABLE(huart);
351 
352  /* Set the UART Communication parameters */
353  if (UART_SetConfig(huart) == HAL_ERROR)
354  {
355  return HAL_ERROR;
356  }
357 
358  if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT)
359  {
360  UART_AdvFeatureConfig(huart);
361  }
362 
363  /* In asynchronous mode, the following bits must be kept cleared:
364  - LINEN and CLKEN bits in the USART_CR2 register,
365  - SCEN, HDSEL and IREN bits in the USART_CR3 register.*/
366  CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
367  CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
368 
369  __HAL_UART_ENABLE(huart);
370 
371  /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
372  return (UART_CheckIdleState(huart));
373 }
HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart)
Check the UART Idle State.
void UART_AdvFeatureConfig(UART_HandleTypeDef *huart)
Configure the UART peripheral advanced features.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
Initialize the UART MSP.
USART_TypeDef * Instance
UART_AdvFeatureInitTypeDef AdvancedInit
void(* MspInitCallback)(struct __UART_HandleTypeDef *huart)
void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart)
Initialize the callbacks to their default values.
HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
Configure the UART peripheral.
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))
__IO HAL_UART_StateTypeDef gState

◆ HAL_UART_MspDeInit()

__weak void HAL_UART_MspDeInit ( UART_HandleTypeDef huart)

DeInitialize the UART MSP.

Parameters
huartUART handle.
Return values
None

Definition at line 685 of file stm32l4xx_hal_uart.c.

686 {
687  /* Prevent unused argument(s) compilation warning */
688  UNUSED(huart);
689 
690  /* NOTE : This function should not be modified, when the callback is needed,
691  the HAL_UART_MspDeInit can be implemented in the user file
692  */
693 }

◆ HAL_UART_MspInit()

__weak void HAL_UART_MspInit ( UART_HandleTypeDef huart)

Initialize the UART MSP.

Parameters
huartUART handle.
Return values
None

Definition at line 670 of file stm32l4xx_hal_uart.c.

671 {
672  /* Prevent unused argument(s) compilation warning */
673  UNUSED(huart);
674 
675  /* NOTE : This function should not be modified, when the callback is needed,
676  the HAL_UART_MspInit can be implemented in the user file
677  */
678 }

◆ HAL_UART_RegisterCallback()

HAL_StatusTypeDef HAL_UART_RegisterCallback ( UART_HandleTypeDef huart,
HAL_UART_CallbackIDTypeDef  CallbackID,
pUART_CallbackTypeDef  pCallback 
)

Register a User UART Callback To be used instead of the weak predefined callback.

Parameters
huartuart handle
CallbackIDID of the callback to be registered This parameter can be one of the following values:
pCallbackpointer to the Callback function
Return values
HALstatus

Definition at line 718 of file stm32l4xx_hal_uart.c.

720 {
721  HAL_StatusTypeDef status = HAL_OK;
722 
723  if (pCallback == NULL)
724  {
725  huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
726 
727  return HAL_ERROR;
728  }
729 
730  __HAL_LOCK(huart);
731 
732  if (huart->gState == HAL_UART_STATE_READY)
733  {
734  switch (CallbackID)
735  {
737  huart->TxHalfCpltCallback = pCallback;
738  break;
739 
741  huart->TxCpltCallback = pCallback;
742  break;
743 
745  huart->RxHalfCpltCallback = pCallback;
746  break;
747 
749  huart->RxCpltCallback = pCallback;
750  break;
751 
752  case HAL_UART_ERROR_CB_ID :
753  huart->ErrorCallback = pCallback;
754  break;
755 
757  huart->AbortCpltCallback = pCallback;
758  break;
759 
761  huart->AbortTransmitCpltCallback = pCallback;
762  break;
763 
765  huart->AbortReceiveCpltCallback = pCallback;
766  break;
767 
768  case HAL_UART_WAKEUP_CB_ID :
769  huart->WakeupCallback = pCallback;
770  break;
771 
772 #if defined(USART_CR1_FIFOEN)
774  huart->RxFifoFullCallback = pCallback;
775  break;
776 
778  huart->TxFifoEmptyCallback = pCallback;
779  break;
780 #endif /* USART_CR1_FIFOEN */
781 
783  huart->MspInitCallback = pCallback;
784  break;
785 
787  huart->MspDeInitCallback = pCallback;
788  break;
789 
790  default :
791  huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
792 
793  status = HAL_ERROR;
794  break;
795  }
796  }
797  else if (huart->gState == HAL_UART_STATE_RESET)
798  {
799  switch (CallbackID)
800  {
802  huart->MspInitCallback = pCallback;
803  break;
804 
806  huart->MspDeInitCallback = pCallback;
807  break;
808 
809  default :
810  huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
811 
812  status = HAL_ERROR;
813  break;
814  }
815  }
816  else
817  {
818  huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
819 
820  status = HAL_ERROR;
821  }
822 
823  __HAL_UNLOCK(huart);
824 
825  return status;
826 }
void(* TxFifoEmptyCallback)(struct __UART_HandleTypeDef *huart)
void(* RxCpltCallback)(struct __UART_HandleTypeDef *huart)
void(* RxHalfCpltCallback)(struct __UART_HandleTypeDef *huart)
__HAL_UNLOCK(hrtc)
void(* WakeupCallback)(struct __UART_HandleTypeDef *huart)
__HAL_LOCK(hrtc)
return HAL_OK
void(* TxCpltCallback)(struct __UART_HandleTypeDef *huart)
void(* TxHalfCpltCallback)(struct __UART_HandleTypeDef *huart)
void(* MspInitCallback)(struct __UART_HandleTypeDef *huart)
void(* ErrorCallback)(struct __UART_HandleTypeDef *huart)
void(* RxFifoFullCallback)(struct __UART_HandleTypeDef *huart)
void(* AbortCpltCallback)(struct __UART_HandleTypeDef *huart)
void(* MspDeInitCallback)(struct __UART_HandleTypeDef *huart)
void(* AbortTransmitCpltCallback)(struct __UART_HandleTypeDef *huart)
void(* AbortReceiveCpltCallback)(struct __UART_HandleTypeDef *huart)
__IO HAL_UART_StateTypeDef gState

◆ HAL_UART_UnRegisterCallback()

HAL_StatusTypeDef HAL_UART_UnRegisterCallback ( UART_HandleTypeDef huart,
HAL_UART_CallbackIDTypeDef  CallbackID 
)

Unregister an UART Callback UART callaback is redirected to the weak predefined callback.

Parameters
huartuart handle
CallbackIDID of the callback to be unregistered This parameter can be one of the following values:
Return values
HALstatus

Definition at line 849 of file stm32l4xx_hal_uart.c.

850 {
851  HAL_StatusTypeDef status = HAL_OK;
852 
853  __HAL_LOCK(huart);
854 
855  if (HAL_UART_STATE_READY == huart->gState)
856  {
857  switch (CallbackID)
858  {
860  huart->TxHalfCpltCallback = HAL_UART_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */
861  break;
862 
864  huart->TxCpltCallback = HAL_UART_TxCpltCallback; /* Legacy weak TxCpltCallback */
865  break;
866 
868  huart->RxHalfCpltCallback = HAL_UART_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */
869  break;
870 
872  huart->RxCpltCallback = HAL_UART_RxCpltCallback; /* Legacy weak RxCpltCallback */
873  break;
874 
875  case HAL_UART_ERROR_CB_ID :
876  huart->ErrorCallback = HAL_UART_ErrorCallback; /* Legacy weak ErrorCallback */
877  break;
878 
880  huart->AbortCpltCallback = HAL_UART_AbortCpltCallback; /* Legacy weak AbortCpltCallback */
881  break;
882 
884  huart->AbortTransmitCpltCallback = HAL_UART_AbortTransmitCpltCallback; /* Legacy weak AbortTransmitCpltCallback */
885  break;
886 
888  huart->AbortReceiveCpltCallback = HAL_UART_AbortReceiveCpltCallback; /* Legacy weak AbortReceiveCpltCallback */
889  break;
890 
891  case HAL_UART_WAKEUP_CB_ID :
892  huart->WakeupCallback = HAL_UARTEx_WakeupCallback; /* Legacy weak WakeupCallback */
893  break;
894 
895 #if defined(USART_CR1_FIFOEN)
897  huart->RxFifoFullCallback = HAL_UARTEx_RxFifoFullCallback; /* Legacy weak RxFifoFullCallback */
898  break;
899 
901  huart->TxFifoEmptyCallback = HAL_UARTEx_TxFifoEmptyCallback; /* Legacy weak TxFifoEmptyCallback */
902  break;
903 
904 #endif /* USART_CR1_FIFOEN */
906  huart->MspInitCallback = HAL_UART_MspInit; /* Legacy weak MspInitCallback */
907  break;
908 
910  huart->MspDeInitCallback = HAL_UART_MspDeInit; /* Legacy weak MspDeInitCallback */
911  break;
912 
913  default :
914  huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
915 
916  status = HAL_ERROR;
917  break;
918  }
919  }
920  else if (HAL_UART_STATE_RESET == huart->gState)
921  {
922  switch (CallbackID)
923  {
926  break;
927 
930  break;
931 
932  default :
933  huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
934 
935  status = HAL_ERROR;
936  break;
937  }
938  }
939  else
940  {
941  huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
942 
943  status = HAL_ERROR;
944  }
945 
946  __HAL_UNLOCK(huart);
947 
948  return status;
949 }
void(* TxFifoEmptyCallback)(struct __UART_HandleTypeDef *huart)
void HAL_UARTEx_TxFifoEmptyCallback(UART_HandleTypeDef *huart)
UART TX Fifo empty callback.
void(* RxCpltCallback)(struct __UART_HandleTypeDef *huart)
void(* RxHalfCpltCallback)(struct __UART_HandleTypeDef *huart)
void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart)
Tx Half Transfer completed callback.
void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart)
UART Abort Complete callback.
void HAL_UARTEx_RxFifoFullCallback(UART_HandleTypeDef *huart)
UART RX Fifo full callback.
__HAL_UNLOCK(hrtc)
void(* WakeupCallback)(struct __UART_HandleTypeDef *huart)
void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
UART Abort Receive Complete callback.
__HAL_LOCK(hrtc)
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
Initialize the UART MSP.
return HAL_OK
void(* TxCpltCallback)(struct __UART_HandleTypeDef *huart)
void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart)
Rx Half Transfer completed callback.
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
Rx Transfer completed callback.
void(* TxHalfCpltCallback)(struct __UART_HandleTypeDef *huart)
void(* MspInitCallback)(struct __UART_HandleTypeDef *huart)
void(* ErrorCallback)(struct __UART_HandleTypeDef *huart)
void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart)
UART wakeup from Stop mode callback.
void HAL_UART_MspDeInit(UART_HandleTypeDef *huart)
DeInitialize the UART MSP.
void HAL_UART_AbortTransmitCpltCallback(UART_HandleTypeDef *huart)
UART Abort Complete callback.
void(* RxFifoFullCallback)(struct __UART_HandleTypeDef *huart)
void(* AbortCpltCallback)(struct __UART_HandleTypeDef *huart)
void(* MspDeInitCallback)(struct __UART_HandleTypeDef *huart)
void(* AbortTransmitCpltCallback)(struct __UART_HandleTypeDef *huart)
void(* AbortReceiveCpltCallback)(struct __UART_HandleTypeDef *huart)
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
Tx Transfer completed callback.
__IO HAL_UART_StateTypeDef gState
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
UART error callback.