HAL FMAC Overview

Introducing FMAC

group FMAC_Introduction

  • This introduction is under development.

Module and files

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

Module and files diagram

Component diagram

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

@startuml



!$ppp = "FMAC"

!use_ppp_ll = 1

!use_ppp_isr = 1

!$use_hal_service = 1

!$use_hal_rcc = 1

!$use_hal_dma = 1

!$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\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

interface "$ppp_ISR" as PPP_ISR



[$ppp_ISR] -U- PPP_ISR

[CMSIS-Devices]

[$ppp_ISR]

!if ($use_hal_dma == 1)

  [DMA ISR]

  interface "DMA ISR" as DMA_ISR

  [DMA ISR] -u- DMA_ISR

!endif  

}



package "HW" #LightCyan {

[STM32_HW]

interface "$ppp_xIRQ" as PPPx_IRQ

[STM32_HW] -u- PPPx_IRQ

!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

[$ppp_ISR] -d-( PPPx_IRQ

[$ppp_name] -d-( PPP_ISR



@enduml

Configuration table

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

group FMAC_Configuration_Table

Configuration inside the FMAC driver

Config defines

Description

Default value

Note

USE_HAL_FMAC_CLK_ENABLE_MODEL

stm32u5xx_hal_conf.h

HAL_CLK_ENABLE_NO

Enable the gating of the periph clk

USE_HAL_FMAC_MODULE

stm32u5xx_hal_conf.h

1

When set, HAL FMAC module is enabled

USE_HAL_FMAC_DMA

stm32u5xx_hal_conf.h

1

Enable DMA code inside FMAC

USE_HAL_FMAC_GET_LAST_ERRORS

stm32u5xx_hal_conf.h

0

Enable the get last errors

USE_HAL_FMAC_USER_DATA

stm32u5xx_hal_conf.h

0

Enable the set/get user data

USE_HAL_FMAC_REGISTER_CALLBACKS

stm32u5xx_hal_conf.h

0

Enable the register callbacks assert

USE_HAL_CHECK_PARAM

stm32u5xx_hal_conf.h

0

Check parameters (pointers or sizes) in runtime

USE_HAL_CHECK_PROCESS_STATE

stm32u5xx_hal_conf.h

0

Atomic access and return HAL_BUSY if bad state in process

USE_ASSERT_DBG_PARAM

from PreProcessor env

NA

Enable the params assert

USE_ASSERT_DBG_STATE

from PreProcessor env

NA

Enable the state assert