HAL EXTI Use Cases

User application initializing and configuring an EXTI line (Direct)

@startuml

hide footbox
skinparam ParticipantPadding 150
skinparam DefaultFontSize 26
skinparam ArrowFontSize 24
skinparam NoteFontSize 22
skinparam boxPadding 80
skinparam backgroundColor #FBFBFB
skinparam DiagramBorderColor #black
skinparam DiagramBorderThickness 2
skinparam Padding 6
scale 800 Width
!pragma teoz true

|||
|||
== Initialization ==
|||
|||

"User Application" -> "System Driver":  **     HAL_Init();**
note right: **   Configure System Clock**
"System Driver" --> "User Application": hal status: HAL_OK
note left:  **return**

"User Application" -> "HAL EXTI Driver":  **     HAL_EXTI_Init(&hexti, HAL_EXTI_LINE_7);**
note right: **   Initialize the EXTI**\n**Store Line into Handle**
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left:  **return**

|||
|||
== Configuration ==
|||
|||
hnote across:**<size:28><color:GREEN>This sequence bloc shall be ignored in case of EXTI direct line</size>**
|||
group opt
|||
note over "User Application": "**p_exti_config->gpio_port = HAL_EXTI_GPIOC**"
"User Application" -> "HAL EXTI Driver":  **     HAL_EXTI_SetConfig(&hexti, &p_exti_config);**
note right: **   Configure the EXTI Line**\n**      stored in the handle**
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left:  **return**
|||
end group
|||
|||

hnote across:**<size:28><color:GREEN>In case the EXTI is used to trigger other peripherals, \
the above sequence is adequate</size>**
@enduml

Called functions:

User application managing an interrupt with an Interrupt Service Routine (Direct)

@startuml

hide footbox
skinparam ParticipantPadding 150
skinparam DefaultFontSize 26
skinparam ArrowFontSize 24
skinparam NoteFontSize 22
skinparam boxPadding 80
skinparam backgroundColor #FBFBFB
skinparam DiagramBorderColor #black
skinparam DiagramBorderThickness 2
skinparam Padding 6
scale 1600 Width
!pragma teoz true

== Initialization ==

"User Application" -> "System Driver": HAL_Init()
note right: Configure System Clock
"System Driver" --> "User Application": hal status: HAL_OK
note left: return

"User Application" -> "HAL GPIO Driver": HAL_GPIO_Init(HAL_GPIOG, HAL_GPIO_PIN_2, &p_gpio_config)
note right: Initialize the GPIO Pin to use
"HAL GPIO Driver" --> "User Application": hal status: HAL_OK
note left: return

"User Application" -> "HAL EXTI Driver": HAL_EXTI_Init(&hexti, HAL_EXTI_LINE_2)
note right: Initialize the EXTI\nStore Line into Handle
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

== Configuration ==

note across: <size:28><color:GREEN>This sequence block shall be ignored in case of EXTI direct line</size>

alt Optional Configuration

"User Application" -> "HAL EXTI Driver": HAL_EXTI_SetConfig(&hexti, &p_exti_config)
note right: Configure the EXTI Line\nstored in the handle
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

end

== NVIC Settings ==

"User Application" -> "System Driver": HAL_CORTEX_NVIC_SetPriority()
note right: Configure IRQ priority for the EXTI line 2
"System Driver" --> "User Application": Priority set
"User Application" -> "System Driver": HAL_CORTEX_NVIC_EnableIRQ()
note right: Enable interrupt in the NVIC for the EXTI line 2
"System Driver" --> "User Application": Interrupt enabled

== Register Callback ==

note across: <size:28><color:GREEN>This sequence block shall be ignored in case of EXTI direct line</size>

alt Optional Callback Registration

"User Application" -> "HAL EXTI Driver": HAL_EXTI_RegisterTriggerCallback(&hexti, &user_cb)
note right: Register the user defined callback
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

end

== Enable the EXTI ==

"User Application" -> "HAL EXTI Driver": HAL_EXTI_Enable(&hexti, HAL_EXTI_MODE_INTERRUPT)
note right: Activate interrupt mode for\nthe current EXTI
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

== Interrupt Service Routine ==

"EXTI_IRQHandler" <- : Interrupt
note left: Receive an interrupt signal
"EXTI_IRQHandler" --> "HAL EXTI Driver": HAL_EXTI_IRQHandler(&hexti)
note left: Call the IRQ Handler to manage upcoming interrupts\nIn the case of direct EXTI line, the IRQHandler must be changed by the IRQHandler of selected direct EXTI line
"HAL EXTI Driver" -> "User Application": p_trigger_cb()


note left: This function takes the trigger as parameter to report\nthe pending request: rising, falling or rising_falling


@enduml

Called functions:

User application managing consecutive interrupts with Interrupt Service Routine (Direct)

@startuml

hide footbox
skinparam ParticipantPadding 150
skinparam DefaultFontSize 26
skinparam ArrowFontSize 24
skinparam NoteFontSize 22
skinparam boxPadding 80
skinparam backgroundColor #FBFBFB
skinparam DiagramBorderColor #black
skinparam DiagramBorderThickness 2
skinparam Padding 6
skinparam SequenceGroupBorderThickness 5
scale 1600 Width
!pragma teoz true

== Initialization ==

"User Application" -> "System Driver": HAL_Init()
note right: Configure System Clock
"System Driver" --> "User Application": hal status: HAL_OK
note left: return

"User Application" -> "HAL GPIO Driver": HAL_GPIO_Init(HAL_GPIOC, HAL_GPIO_PIN_13, &p_gpio_config)
note right: Initialize the GPIO\nPin to use
"HAL GPIO Driver" --> "User Application": hal status: HAL_OK
note left: return

"User Application" -> "HAL EXTI Driver": HAL_EXTI_Init(&hexti, HAL_EXTI_LINE_13)
note right: Initialize the EXTI\nStore Line into Handle
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

== Configuration ==

note across: <size:28><color:GREEN>This sequence block shall be ignored in case of EXTI direct line</size>

alt Optional Configuration

"User Application" -> "HAL EXTI Driver": HAL_EXTI_SetConfig(&hexti, &p_exti_config)
note right: Configure the EXTI Line\nstored in the handle
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

end

== NVIC Settings ==

"User Application" -> "System Driver": HAL_CORTEX_NVIC_SetPriority()
note right: Configure IRQ priority for the EXTI line 13
"System Driver" --> "User Application": Priority set
"User Application" -> "System Driver": HAL_CORTEX_NVIC_EnableIRQ()
note right: Enable interrupt in the NVIC for the EXTI line 13
"System Driver" --> "User Application": Interrupt enabled

== Register Callback ==

note across: <size:28><color:GREEN>This sequence block shall be ignored in case of EXTI direct line</size>

alt Optional Callback Registration

"User Application" -> "HAL EXTI Driver": HAL_EXTI_RegisterTriggerCallback(&hexti, &user_cb)
note right: Register the user defined callback
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

end

== Enable the EXTI ==

"User Application" -> "HAL EXTI Driver": HAL_EXTI_Enable(&hexti, HAL_EXTI_MODE_INTERRUPT)
note right: Activate interrupt mode for\nthe current EXTI
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

== Interrupt Service Routine ==

group Several interrupts occurring consecutively
"EXTI_IRQHandler" <- : Interrupt
note left: Receive an interrupt signal
"EXTI_IRQHandler" -> "HAL EXTI Driver": HAL_EXTI_IRQHandler(&hexti)
note left: Call the IRQ Handler to manage upcoming interrupts\nIn the case of direct EXTI line, the IRQHandler must be changed by the IRQHandler of selected direct EXTI line
"EXTI_IRQHandler" --> "HAL EXTI Driver": pending flag cleared
"HAL EXTI Driver" -> "User Application": p_trigger_cb()


note left: This function takes the trigger as parameter to report\nthe pending request: rising, falling or rising_falling


note over "User Application": Callback functions can be user defined\notherwise default callback functions can be used

"User Application" --> "HAL EXTI Driver": No pending flag

end

@enduml

Called functions:

User application changing the EXTI configuration

@startuml

hide footbox
skinparam ParticipantPadding 150
skinparam DefaultFontSize 26
skinparam ArrowFontSize 24
skinparam NoteFontSize 22
skinparam boxPadding 80
skinparam backgroundColor #FBFBFB
skinparam DiagramBorderColor #black
skinparam DiagramBorderThickness 2
skinparam Padding 6
scale 1600 Width
!pragma teoz true

== Initialization ==

"User Application" -> "System Driver": HAL_Init()
note right: Configure System Clock
"System Driver" --> "User Application": hal status: HAL_OK
note left: return

"User Application" -> "HAL EXTI Driver": HAL_EXTI_Init(&hexti, HAL_EXTI_LINE_17)
note right: Initialize the EXTI:\nStore Line into Handle
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

== Configuration ==

"User Application" -> "HAL EXTI Driver": HAL_EXTI_SetConfig(&hexti, &p_exti_config)
note right: Configure the EXTI Line\nstored in the handle
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

== NVIC Settings ==

"User Application" -> "System Driver": HAL_CORTEX_NVIC_SetPriority()
note right: Configure IRQ priority for the EXTI line 17
"System Driver" --> "User Application": Priority set
"User Application" -> "System Driver": HAL_CORTEX_NVIC_EnableIRQ()
note right: Enable interrupt in the NVIC for the EXTI line 17
"System Driver" --> "User Application": Interrupt enabled

== Register Callback ==

"User Application" -> "HAL EXTI Driver": HAL_EXTI_RegisterTriggerCallback(&hexti, &user_cb)
note right: Register the user defined callback
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

== Enable the EXTI ==

"User Application" -> "HAL EXTI Driver": HAL_EXTI_Enable(&hexti, HAL_EXTI_MODE_INTERRUPT_EVENT)
note right: Activate interrupt/event mode for\nthe current EXTI line
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

== Interrupt Service Routine ==

"EXTI_IRQHandler" <- : Interrupt
note left: Receive an interrupt signal
"EXTI_IRQHandler" --> "HAL EXTI Driver": HAL_EXTI_IRQHandler(&hexti)
note left: Call the IRQ Handler to manage upcoming interrupts
"HAL EXTI Driver" -> "User Application": p_trigger_cb()


note left: This function takes the trigger as parameter to report\nthe pending request: rising, falling or rising_falling


== Disable the EXTI ==

"User Application" -> "HAL EXTI Driver": HAL_EXTI_Disable(&hexti)
note right: Deactivate a mode for\nthe current EXTI line
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

"User Application" -> "System Driver": HAL_CORTEX_NVIC_DisableIRQ(COMP_IRQn)
note right: Disable EXTI line\ninterrupt in the NVIC
"System Driver" --> "User Application": Interrupt disabled

== New Configuration ==

"User Application" -> "HAL EXTI Driver": HAL_EXTI_SetConfig(&hexti, &p_exti_config)
note right: Configure the EXTI Line\nstored in the handle
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

== Enable the EXTI with new mode ==

"User Application" -> "HAL EXTI Driver": HAL_EXTI_Enable(&hexti, HAL_EXTI_MODE_EVENT)
note right: Activate event mode for\nthe current EXTI line
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

@enduml

Called functions:

User application deinitializing EXTI (Direct)

@startuml

hide footbox
skinparam ParticipantPadding 150
skinparam DefaultFontSize 26
skinparam ArrowFontSize 24
skinparam NoteFontSize 22
skinparam boxPadding 80
skinparam backgroundColor #FBFBFB
skinparam DiagramBorderColor #black
skinparam DiagramBorderThickness 2
skinparam Padding 6
scale 1600 Width
!pragma teoz true

== Initialization ==

"User Application" -> "System Driver": HAL_Init()
note right: Configure System Clock
"System Driver" --> "User Application": hal status: HAL_OK
note left: return

"User Application" -> "HAL EXTI Driver": HAL_EXTI_Init(&hexti, HAL_EXTI_LINE_20)
note right: Initialize the EXTI:\nStore Line into Handle
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

== Configuration ==

note across: <size:28><color:GREEN>This sequence block shall be ignored in case of EXTI direct line</size>

alt Optional Configuration

"User Application" -> "HAL EXTI Driver": HAL_EXTI_SetConfig(&hexti, &p_exti_config)
note right: Configure the EXTI Line\nstored in the handle
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

end

== NVIC Settings ==

"User Application" -> "System Driver": HAL_CORTEX_NVIC_SetPriority()
note right: Configure IRQ priority for the EXTI line 20
"System Driver" --> "User Application": Priority set
"User Application" -> "System Driver": HAL_CORTEX_NVIC_EnableIRQ()
note right: Enable interrupt in the NVIC for the EXTI line 20
"System Driver" --> "User Application": Interrupt enabled

== Register Callback ==

note across: <size:28><color:GREEN>This sequence block shall be ignored in case of EXTI direct line</size>

alt Optional Callback Registration

"User Application" -> "HAL EXTI Driver": HAL_EXTI_RegisterTriggerCallback(&hexti, &user_cb)
note right: Register the user defined callback
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

end

== Enable the EXTI ==

"User Application" -> "HAL EXTI Driver": HAL_EXTI_Enable(&hexti, HAL_EXTI_MODE_INTERRUPT_EVENT)
note right: Activate interrupt/event mode for\nthe current EXTI line
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

== Interrupt Service Routine ==

group Several interrupts occurring consecutively
"EXTI_IRQHandler" <- : Interrupt
"EXTI_IRQHandler" -> "HAL EXTI Driver": HAL_EXTI_IRQHandler(&hexti)
note left: In the case of direct EXTI line, the IRQHandler must be changed by the IRQHandler of selected direct EXTI line
"EXTI_IRQHandler" --> "HAL EXTI Driver": pending flag cleared
"HAL EXTI Driver" -> "User Application": p_trigger_cb()


note left: This function takes the trigger as parameter to report\nthe pending request: rising, falling or rising_falling


"User Application" --> "HAL EXTI Driver": No pending flag

"User Application" -> "HAL EXTI Driver": HAL_EXTI_Disable(&hexti)
note right: Deactivate a mode for\nthe current EXTI line
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

note over "User Application": EXTI mode disabled: No interrupts occurring

"User Application" -> "HAL EXTI Driver": HAL_EXTI_Enable(&hexti, HAL_EXTI_MODE_INTERRUPT_EVENT)
note right: Activate interrupt/event mode for\nthe current EXTI line
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

"EXTI_IRQHandler" <- : Interrupt
"EXTI_IRQHandler" -> "HAL EXTI Driver": HAL_EXTI_IRQHandler(&hexti)
note left: In the case of direct EXTI line, the IRQHandler must be changed by the IRQHandler of selected direct EXTI line
"EXTI_IRQHandler" --> "HAL EXTI Driver": pending flag cleared
"HAL EXTI Driver" -> "User Application": p_trigger_cb()


note left: This function takes the trigger as parameter to report\nthe pending request: rising, falling or rising_falling


"User Application" --> "HAL EXTI Driver": No pending flag

end

== De-initializing EXTI ==

"HAL EXTI Driver" <-- "User Application": HAL_EXTI_DeInit(&hexti)
note right: EXTI deinitialized, interrupt or event\nmode disabled and trigger edge\nconfiguration is reset\nand pending flags are cleared

@enduml

Called functions:

User application with Wake-up from Stop Mode via event (Direct)

@startuml

hide footbox
skinparam ParticipantPadding 150
skinparam DefaultFontSize 26
skinparam ArrowFontSize 24
skinparam NoteFontSize 22
skinparam boxPadding 80
skinparam backgroundColor #FBFBFB
skinparam DiagramBorderColor #black
skinparam DiagramBorderThickness 2
skinparam Padding 6
scale 1000 Width
!pragma teoz true

|||
|||
== Initialization ==
|||
|||

"User Application" -> "System Driver":  **     HAL_Init();**
note right: **   Configure System Clock**
"System Driver" --> "User Application": hal status: HAL_OK
note left:  **return**
"User Application" -> "HAL EXTI Driver":  **     HAL_EXTI_Init(&hexti, HAL_EXTI_LINE_6);**
note right: **   Initialize the EXTI:**\n**Store Line into Handle**
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left:  **return**

|||
|||
== Configuration ==
|||
|||
hnote across:**<size:28><color:GREEN>This sequence bloc shall be ignored in case of EXTI direct line</size>**
|||
group opt
|||

"User Application" -> "HAL EXTI Driver":  **     HAL_EXTI_SetConfig(&hexti, &p_exti_config);**
note right: **   Configure the EXTI Line**\n**      stored in the handle**
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left:  **return**
|||
end group

|||
|||
== Enable the EXTI ==
|||
|||

"User Application" -> "HAL EXTI Driver":  **     HAL_EXTI_Enable(&hexti, HAL_EXTI_MODE_EVENT);**
note right:  **   Activate Event mode for**\n**    the current EXTI line **
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left:  **return**

|||
|||
== Enter STOP Mode ==
|||
|||

"User Application" -> "System Driver":  **HAL_PWR_EnterSTOPMode( PWR_STOPENTRY_WFE);**
"System Driver" --> "User Application": MCU enters Stop Mode
{start} "User Application" <- "User Application"
...
...
...
{end} "User Application" -> "User Application"
{start} <-> {end}: <i>MCU in Stop Mode

|||
|||
== Wake-up from Stop Mode ==
|||
|||

 "System Driver"<- :  **     Event occured**
note right:  **   An event occured **\n** on the current EXTI line **
"User Application" <- "System Driver": **Wake-up the CPU from Stop Mode**\n**Resume with user application treatment**
note left:  **- Restore clock configuration**\n**- Reinitialize needed peripherals**\n**- Run mode restored**

@enduml

Called functions:

Wake-up from Stop Mode through an interrupt (Direct)

@startuml

hide footbox
skinparam ParticipantPadding 150
skinparam DefaultFontSize 26
skinparam ArrowFontSize 24
skinparam NoteFontSize 22
skinparam boxPadding 80
skinparam backgroundColor #FBFBFB
skinparam DiagramBorderColor #black
skinparam DiagramBorderThickness 2
skinparam Padding 6
scale 1600 Width
!pragma teoz true

== Initialization ==

"User Application" -> "System Driver": HAL_Init()
note right: Configure System Clock
"System Driver" --> "User Application": hal status: HAL_OK
note left: return

"User Application" -> "HAL EXTI Driver": HAL_EXTI_Init(&hexti, HAL_EXTI_LINE_1)
note right: Initialize the EXTI\nStore Line into Handle
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

== Configuration ==

note across: <size:28><color:GREEN>This sequence block shall be ignored in case of EXTI direct line</size>

alt Optional Configuration

"User Application" -> "HAL EXTI Driver": HAL_EXTI_SetConfig(&hexti, &p_exti_config)
note right: Configure the EXTI Line\nstored in the handle
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

end

== NVIC Settings ==

"User Application" -> "System Driver": HAL_CORTEX_NVIC_SetPriority()
note right: Configure IRQ priority for the EXTI line 1
"System Driver" --> "User Application": Priority set
"User Application" -> "System Driver": HAL_CORTEX_NVIC_EnableIRQ()
note right: Enable interrupt in the NVIC for the EXTI line 1
"System Driver" --> "User Application": Interrupt enabled

== Register Callback ==

note across: <size:28><color:GREEN>This sequence block shall be ignored in case of EXTI direct line</size>

alt Optional Callback Registration

"User Application" -> "HAL EXTI Driver": HAL_EXTI_RegisterTriggerCallback(&hexti, &user_cb)
note right: Register the user defined callback
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

end

== Enable the EXTI ==

"User Application" -> "HAL EXTI Driver": HAL_EXTI_Enable(&hexti, HAL_EXTI_MODE_INTERRUPT)
note right: Activate interrupt mode for\nthe current EXTI
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

== Enter STOP Mode ==

"User Application" -> "System Driver": HAL_PWR_EnterSTOPMode(PWR_STOPENTRY_WFI)
"System Driver" --> "User Application": MCU enters Stop Mode

group MCU in Stop Mode
...
end

== System wake-up ==

"EXTI_IRQHandler" <- : Interrupt
note right: An interrupt occurred\non the current EXTI line
"EXTI_IRQHandler" --> "HAL EXTI Driver": HAL_EXTI_IRQHandler(&hexti)
note left: Call the IRQ Handler to manage upcoming interrupts\nIn the case of direct EXTI line, the IRQHandler must be changed by the IRQHandler of selected direct EXTI line
"HAL EXTI Driver" -> "System Driver": Wake-up the CPU from Stop Mode
note left: - Restore clock configuration\n- Reinitialize needed peripherals
"HAL EXTI Driver" -> "User Application": p_trigger_cb()


note left: This function takes the trigger as parameter to report\nthe pending request: rising, falling or rising_falling


"System Driver" -> "User Application": Resume with user application treatment
note left: Run mode restored

@enduml

Called functions:

Generating a software interrupt

@startuml

hide footbox
skinparam ParticipantPadding 150
skinparam DefaultFontSize 26
skinparam ArrowFontSize 24
skinparam NoteFontSize 22
skinparam boxPadding 80
skinparam backgroundColor #FBFBFB
skinparam DiagramBorderColor #black
skinparam DiagramBorderThickness 2
skinparam Padding 6
scale 1600 Width
!pragma teoz true

== Initialization ==

"User Application" -> "System Driver": HAL_Init()
note right: Configure System Clock
"System Driver" --> "User Application": hal status: HAL_OK
note left: return

"User Application" -> "HAL EXTI Driver": HAL_EXTI_Init(&hexti, HAL_EXTI_LINE_10)
note right: Initialize the EXTI\nStore Line into Handle
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

== NVIC Settings ==

"User Application" -> "System Driver": HAL_CORTEX_NVIC_SetPriority()
note right: Configure IRQ priority for the EXTI line 10
"System Driver" --> "User Application": Priority set
"User Application" -> "System Driver": HAL_CORTEX_NVIC_EnableIRQ()
note right: Enable interrupt in the NVIC for the EXTI line 10
"System Driver" --> "User Application": Interrupt enabled

== Register Callback ==

"User Application" -> "HAL EXTI Driver": HAL_EXTI_RegisterTriggerCallback(&hexti, &user_cbfn)
note right: Register the user defined callback
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

== Generate a Software Interrupt ==

"User Application" -> "HAL EXTI Driver": HAL_EXTI_GenerateSWI(&hexti)
note right: Generate a software interrupt signal on the dedicated line
"HAL EXTI Driver" --> "User Application": hal status: HAL_OK
note left: return

== Interrupt Service Routine ==

"EXTI_IRQHandler" <- "HAL EXTI Driver": Software Interrupt
note right: An interrupt occurred\non the current EXTI line
"EXTI_IRQHandler" --> "HAL EXTI Driver": HAL_EXTI_IRQHandler(&hexti)
note left: IRQ Handler called to manage pending interrupt

"EXTI_IRQHandler" --> "HAL EXTI Driver": Disable interrupt and clear pending flag
"HAL EXTI Driver" -> "User Application": p_trigger_cb()


note left: This function takes the trigger as parameter to report\nthe pending request: rising, falling or rising_falling


@enduml

Called functions: