Решено (для поисковиков) stm32f411 - DMA (Memory->GPIO) по
таймеру TIM1. HAL_DMA_Init(&hdma_tim1_up);
HAL_DMA_Start(&hdma_tim1_up, (uint32_t)&DMAbuff, (uint32_t)&GPIOB->ODR, MAX_TICKS);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
TIM1->DIER |= (1 << 8);
Или с регистрами
DMA2_Stream5->PAR = (uint32_t)&(GPIOB->ODR); // Set peripheral address
DMA2_Stream5->M0AR = (uint32_t)&DMAbuff; // Set memory address
DMA2_Stream5->NDTR = MAX_TICKS; // set number of bytes to transfer
DMA2_Stream5->CR = (6 << DMA_SxCR_CHSEL_Pos) | // enable channel 6 (TIM1_UP)
(2 << DMA_SxCR_PL_Pos) | // set to high priority
(1 << DMA_SxCR_DIR_Pos) | //set memory-to-peripheral
(1 << DMA_SxCR_MINC_Pos) | //Incremement memory address
(0 << DMA_SxCR_MSIZE_Pos) | // Set memory data width to a byte
(0 << DMA_SxCR_PSIZE_Pos) | // Set peripheral data width to a byte
(1 << DMA_SxCR_CIRC_Pos) | // Set to circular mode
(1 << DMA_SxCR_EN_Pos); //enable DMA
TIM1->DIER |= (1 << 8); // set UDE bit (update dma request enable)
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);