Skip to main content
Visitor II
December 11, 2020
Solved

Make EXTI generates a request to DMA1 on STM32H7

  • December 11, 2020
  • 3 replies
  • 1570 views

Hi,

I'm trying to trig a DMA from the EXTI0 input. There is a good example in the STM32Cube package for the H7: Projects\STM32H743I-EVAL\Examples\DMA\DMAMUX_RequestGen

But this example uses the BDMA and I need to use the DMA1. I tried to make some modifications to the example but without success (see https://community.st.com/s/question/0D53W00000Pnct0SAB/make-the-stm32h7-example-dmamuxrequestgen-work-with-dma1-instead-of-bdma).

Reading the chapter "Block interconnect" I see that the source signal is called "exti_syscfg_exti0" when connected to dmamux2_gen20, but it is called " exti_exti0_it" when connected to dmamux1_gen6. I really don't understand what it means... For sure I use DMAMUX1 with the correct signal ID, but is there something else to change from the example using BDMA/DMAMUX2 ?

Thank you.

    This topic has been closed for replies.
    Best answer by GregB

    This is the answer I got from ST:

    The behaviour with the EXTI0 is different in domain D3 (triggering BDMA from EXTI0). This is due to the fact that the domain D3 is designed for autonomous mode where both CPU core are OFF. The EXTI0 can only be used as an event. It is automatically cleared.

    With DMAMUX1 in domain D2, if a trigger is needed without executing an IRQ handler, the EXTI0 is not the good one. A timer or a DMA event has to be used instead.

     

    More information can be found in the Release Manual (EXTI, DMAMUX, PWR sections) and AN5224 (STM32 DMAMUX: the DMA request router).

    3 replies

    Super User
    December 11, 2020

    ST does not care to clarify this.

    IMO, input to DMAMUX2 is not coming from EXTI module, ie. it's not the output of EXTI having been already latched, but directly from SYSCFG, i.e. it's the output of the EXTI input multiplexer, i.e. it's directly the pin assigned to given EXTI.

    OTOH, input to DMAMUX comes from output of the EXTI latch, so you have to set up also EXTI for the appropriate edge(s); and I'm not quite sure if you can do without clearing it in some way.

    https://community.st.com/s/question/0D50X0000Buds3C/stm32h7-triggering-a-spi-tx-transmission-via-dma-with-a-synch-event-on-exti0 although the problem there was somewhat different.

    I don't use H7.

    JW

    GregBAuthorAnswer
    Visitor II
    January 4, 2021

    This is the answer I got from ST:

    The behaviour with the EXTI0 is different in domain D3 (triggering BDMA from EXTI0). This is due to the fact that the domain D3 is designed for autonomous mode where both CPU core are OFF. The EXTI0 can only be used as an event. It is automatically cleared.

    With DMAMUX1 in domain D2, if a trigger is needed without executing an IRQ handler, the EXTI0 is not the good one. A timer or a DMA event has to be used instead.

     

    More information can be found in the Release Manual (EXTI, DMAMUX, PWR sections) and AN5224 (STM32 DMAMUX: the DMA request router).

    Super User
    January 4, 2021

    Thanks for coming back with that response.

    I am not even trying to understand it. The H7 is a beast and its documentation is lacking even more than other STM32's. I'm lucky enough to be able to stay away of it so far.

    JW