STM32定时器外部时钟更新事件

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

我需要在另一个外部信号的每个下降沿通过 DMA 从某些 GPIO 引脚读取数据。我将时钟信号设置为 TIMER 外部时钟(下降沿),并将 PSC 值和 ARR 值设置为 0。我将定时器更新事件设置为 DMA 请求。

问题是,根据公式

f = Fclock/((PSC+1)*(ARR+1))
,DMA根据来自引脚的时钟信号在每个下降沿触发。但没有触发发生。

当我将 ARR 值设置为 1 时,每 2 个下降沿触发 DMA 1 次。

这是我当前的配置:

DMA2_Stream5->NDTR = 20;
DMA2_Stream5->M0AR = (uint32_t) &buffer[0];
DMA2_Stream5->PAR = (uint32_t) &GPIOB->IDR;           
DMA2_Stream5->CR = (6u << DMA_SxCR_CHSEL_Pos) |       // select channel 6, see DMA request mapping in the reference manual
           DMA_SxCR_MSIZE_1 |      // 0b10:memory data size 32 bit
           DMA_SxCR_PSIZE_1 |      // 0b10:peripheral data size 32 bit
           DMA_SxCR_MINC |         // memory increment
           DMA_SxCR_EN |           // enable channel
           DMA_SxCR_TCIE_Msk |     // Transfer complete interrupt enable
           0;
TIM1->DIER = TIM_DIER_UDE;          //Update DMA request enable
TIM1->SMCR |= 1 << 15;              //ETR is inverted,
TIM1->CR1 = TIM_CR1_CEN;            //TIM1 enable

如何配置 DMA 在外部信号的每个下降沿触发?

arm embedded stm32 dma
1个回答
0
投票

哪个STM32?

下次,读出并发布所有相关外设寄存器的内容(这里是TIM和DMA/DMAMUX)。

ARR值为0

如果设置 ARR=0,定时器的计数器不会运行(即不会根据时钟更改其值,也不会生成更新事件),请参阅 RM 中 TIMx_ARR 寄存器的说明。

不要使用 ETR 和更新,而是将输入信号连接到定时器的通道之一,将该通道设置为输入捕获,并从该通道触发 DMA。

JW

© www.soinside.com 2019 - 2024. All rights reserved.