2026-04-05 4:20 AM - last edited on 2026-04-08 4:04 AM by mƎALLEm
Hi.
I'm looking for an STM32 with a lot of GPIO triggered DMA channels. I need 8 channels that trigger when a pin changes state, and which can read/write to GPIO registers and DMA registers.
It's for implementing a bus interface where I need to read address pins and write them into the lower 16 bits of DMA address registers, and use pin transitions to trigger GPIO state changes (GPIO data values, GPIO direction bits).
Are there any parts that can do that? The M0+ series doesn't have enough DMA channels that can be triggered by GPIOs. The M3 and M4 doesn't seem to allow triggering from GPIOs.
2026-04-08 4:19 AM - edited 2026-04-08 4:32 AM
Hello @qua ,
What about using PSSI interface?
Please refer to these knowledge base articles:
Do you need a fast slave interface with high throughput? This is for you.
How to configure and use the PSSI on the STM32H7
2026-04-08 4:31 AM
The PSSI is interesting, but I think not suitable for this. You need to be able to capture addresses, and then set up the data read/write using them. It might be possible, but it seems like you would need a multiplexer for address and data, at the very least.
2026-04-08 4:51 AM
Ah, the good old dual-port RAM replacement-by-mcu problem.
PSSI won't solve the addressability problem; it's basically just a parallel (8- or 16-bit wide) FIFO.
What would really be needed is an AHB master port exposed to outside world, but that won't happen ever (I doubt even hard-core-in-FPGA have such).
GPDMA/LPDMA in newer STM32 have scatter/gather ability, that might solve the issue with address not writable to DMA registers while DMA is enabled; but it significantly increases latency due to the linked-list-load and also may introduce some other nasty side effects. I am not familiar with them at all.
All in all, IMO, handcrafted interrupt may win at the end of the day, simply because no available hardware is fit to the purpose.
Or just build the dual-port-like RAM from an external parallel RAM, latches/buffers, and some glue logic.
Or just buy the ready-made thing, if you have the money.
One minor thing, I wouldn't bother with threestating GPIO in the mcu at all, that can be solved by a simple '245-style buffer (and you need one anyway for the level shift).
JW