I'm using a Nucleo-F446RE with CubeIDE and HAL.
I can write code which uses TIMER1, DMA request TIM1_UP to use DMA2 Stream 5 for memory-peripheral (GPIOC) transfers. I set the up DMA using:
HAL_DMA_Start(&hdma_tim1_up, (uint32_t) prbsdata, (uint32_t)(&GPIOC->ODR), 16);
When I try to change to TIMER2, the only choice in HAL is request TIM2_UP/CH3 using DMA1 Stream 1. When I run my code I get a TEIF transfer error. Since I'm not using FIFO, this appears to be a bus error. Here's my DMA setup line:
HAL_DMA_Start(&hdma_tim2_up_ch3, (uint32_t) prbsdata, (uint32_t)(&GPIOC->ODR), 16);
Looking at block diagrams, I thought I could use DMA1 -> AHB/APB bridge -> GPIOC.
Given the errors I'm getting, I'm now thinking there is no way to get from DMA1 to GPIO registers, or there is a special setup which I've yet to decipher from the documentation.
The real problem I'm trying to solve is that I'd like to connect DMA to the BSRR register, which requires a full word transfer and TIMER1 only supports half-words.
Any advice/help is appreciated.