HAL USART Overview

Introducing USART

group USART_Introduction

  • This introduction is under development.

Module and files

The following diagram illustrates the USART module and its associated files.

Module and files diagram

Component diagram

The following diagram illustrates the software components involved in the USART module. It shows the interactions between the user application, HAL drivers, low-level drivers, and the hardware components.

@startuml



!$use_ppp_core = 0

!$use_ppp_ll = 1

!$use_ppp_hal = 1



!$use_api_itf = 1

!$use_hal_itf = 1

!$use_ll_itf = 1

!$use_core_itf = 0



!$use_ppp_isr = 1



!$use_hal_service = 1

!$use_hal_rcc = 1

!$use_hal_dma = 1



!$use_ll_rcc = 0



!$ppp = "USART"

!$hal_api_itf = "HAL " + $ppp + " API"

!$appli_itf = "User Callback"

!$ppp_name = "HAL_"+$ppp

!$ppp_ISR = $ppp+" ISR"

!$ll_ppp = "LL_"+$ppp

!$hal_dma_itf = "HAL_DMA_StartDirectXfer()\nHAL_DMA_Abort_IT"

!$hal_rcc_itf = "\t\t\tHAL_RCC_GetClockFreq()\n\t\t\tHAL_RCC_"+$ppp+"_EnableClock()"

!$hal_ppp_itf = "DMA CallBacks\nDMA Half transfer complete CallBack\nError CallBacks"

!$hal_generic_itf = "HAL_GetTick()"

!$ll_ppp_itf = "LL " + $ppp +" API"

!$ppp_xIRQ = $ppp+"x_IRQ"



<style>

componentDiagram {

arrow {

FontSize 8

}

interface {

FontSize 8

}

}

</style>



title $ppp Software Component Diagram



Package "Application Layer" #DarkMagenta {



component [Appli]

interface "$appli_itf" as APPLI_Interface

[Appli] -r- APPLI_Interface

}



package "HAL" #DarkOrange {

[$ppp_name]

!if ($use_hal_dma == 1)

interface "$hal_ppp_itf" as HAL_PPP_Interface

[$ppp_name] -d- HAL_PPP_Interface

!endif

interface "$hal_api_itf" as HAL_PPP_APPLI_Interface

[$ppp_name] -u- HAL_PPP_APPLI_Interface



!if ($use_hal_service == 1)

  [HAL_SERVICE]

  interface "$hal_generic_itf" as HAL_Service_Interface

  [HAL_SERVICE] -r- HAL_Service_Interface

  [$ppp_name] -l-( HAL_Service_Interface

!endif  



!if ($use_hal_dma == 1)

  [HAL_DMA]

  interface "$hal_dma_itf" as HAL_DMA_Interface

  [HAL_DMA] -u- HAL_DMA_Interface

  [HAL_DMA] -u-( HAL_PPP_Interface

  [$ppp_name] --( HAL_DMA_Interface

!endif

!if ($use_hal_rcc == 1)

  [HAL_RCC]

  interface "$hal_rcc_itf" as HAL_RCC_Interface

  [HAL_RCC] -l- HAL_RCC_Interface

  [$ppp_name] -r-( HAL_RCC_Interface

!endif

}



[Appli] -d-( HAL_PPP_APPLI_Interface

[$ppp_name] -u-( APPLI_Interface



package "Low Layer" #Technology {



!if ($use_ppp_ll == 1)

  [$ll_ppp]

  interface "$ll_ppp_itf" as LL_PPP_Interface

  [$ll_ppp]  -u- LL_PPP_Interface

!endif 



!if ($use_ppp_isr == 1) 

interface "$ppp_ISR" as PPP_ISR

[$ppp_ISR] -U- PPP_ISR

[$ppp_ISR]

!endif



[CMSIS-Devices]

!if ($use_ll_rcc == 1)

  [LL_RCC]

  interface "LL RCC API" as LL_RCC_API

  [LL_RCC] -u- LL_RCC_API

  [HAL_RCC] -d-(LL_RCC_API

!endif



!if ($use_hal_dma == 1)

  [DMA ISR]

  interface "DMA ISR" as DMA_ISR

  [DMA ISR] -u- DMA_ISR

!endif  

}



package "HW" #LightCyan {

[STM32_HW]

!if ($use_ppp_isr == 1)

interface "$ppp_xIRQ" as PPPx_IRQ

[STM32_HW] -u- PPPx_IRQ

!endif

!if ($use_hal_dma == 1)

interface "DMAx_IRQ_Ch" as DMA_IRQ_CH

[STM32_HW] -u- DMA_IRQ_CH

[DMA ISR] -d-( DMA_IRQ_CH

[HAL_DMA] --( DMA_ISR

!endif

}

!if ($use_ppp_ll == 1)

[$ppp_name] -d-( LL_PPP_Interface

[$ll_ppp] .r.> [CMSIS-Devices]: $ppp register def

[STM32_HW] <.u. [$ll_ppp] : $ppp registers R/W

!else

[$ppp_name] .d.> [CMSIS-Devices]: $ppp register def

[STM32_HW] <.l. [$ppp_name] : $ppp registers R/W

!endif

!if ($use_ppp_isr == 1)

[$ppp_ISR] -d-( PPPx_IRQ

[$ppp_name] -d-( PPP_ISR

!endif

!if ($use_ll_rcc == 1)

[STM32_HW] <.u. [LL_RCC] : RCC registers R/W

!endif



@enduml

Configuration table

The following table lists the configuration defines for the HAL USART module, specifying their locations, default values, and descriptions:

group USART_Configuration_Table

Configuration inside the USART driver:

Config defines

Where

Default value

Note

USE_HAL_USART_MODULE

hal_conf.h

1

Enable the HAL USART module.

USE_HAL_USART_REGISTER_CALLBACKS

hal_conf.h

0

Enable the register callbacks

USE_HAL_USART_CLK_ENABLE_MODEL

hal_conf.h

HAL_CLK_ENABLE_NO

Enable peripheral clock in the HAL_USART_Init

USE_HAL_USART_USER_DATA

hal_conf.h

0

Add an user data inside HAL USART handle

USE_HAL_USART_GET_LAST_ERRORS

hal_conf.h

0

Add error member inside HAL USART handle

USE_HAL_USART_DMA

hal_conf.h

1

Enable DMA code inside HAL USART

USE_HAL_USART_FIFO

hal_conf.h

0

Enable FIFO code inside HAL USART

USE_HAL_CHECK_PARAM

hal_conf.h

0

Enable checking of vital parameters at runtime

USE_HAL_MUTEX

hal_conf.h

0

Enable the use of semaphore in the HAL driver

USE_HAL_CHECK_PROCESS_STATE

hal_conf.h

0

Enable atomic access to process state check

USE_ASSERT_DBG_PARAM

PreProcessor env

NA

Enable the params assert

USE_ASSERT_DBG_STATE

PreProcessor env

NA

Enable the state assert