使用定时器的 DMA 到 GPIO 控制不起作用

问题描述 投票:0回答:1

我想使用 DMA 和定时器来控制 GPIO 输出。目标生成 1MHz 的 CLK 信号并控制与 CLK 同步的 PB0。

我使用Nucleo-F411RE作为开发板。我已按照论坛的说明并配置了程序。

配置:

HCLK:100MHz

定时器3:

enter image description here

enter image description here

main.c中的程序:

uint32_t dummy_data[7] = {0} ;
dummy_data[0] = 0x00000001 ;
dummy_data[1] = 0x00010000 ;
dummy_data[2] = 0x00000000 ;
dummy_data[3] = 0x00000000 ;
dummy_data[4] = 0x00000001 ;
dummy_data[5] = 0x00010000 ;
dummy_data[6] = 0x00000000 ;

HAL_DMA_Start(&hdma_tim3_ch4_up, (uint32_t)dummy_data, (uint32_t)&(GPIOB->BSRR), 7) ;
HAL_TIM_Base_Start(&htim3) ;
HAL_TIM_OC_Start(&htim3, TIM_CHANNEL_4) ;
TIM3->DIER |= (1 << 8 )  ;

我期望在 PB0 中看到与 PC9(输出比较引脚)PWM 同步的脉冲。 但作为输出,我在 PC9 中仅获得 1MHz PWM,并且 PB0 没有变化。 我错过了什么吗?任何建议都会有帮助。

c timer embedded stm32 dma
1个回答
0
投票

对于 STM32 F4,没有从 DMA1 到 AHB 外设的连接。因此,我配置了 TIM1 PWM CN1 (APB2) 来触发内存中的 DMA2 Stream 5 到外设模式,以在 GPIOB->BSRR 中写入字,而不是 TIM3 中的 DMA1。现在可以了(可以成功写入GPIOB->BSRR寄存器)。

仅适用于STM32 F411RE:

GPIOB(AHB1) is connected with DMA2 (DMA2 Stream 5)
DMA2 is connected with APB2 (So TIM1 PWM CN1)
© www.soinside.com 2019 - 2024. All rights reserved.