STM32
直播中

独当一面

10年用户 824经验值
擅长:可编程逻辑
私信 关注
[问答]

stm32f205定时器2 ETR功能读不出数据的原因?

STM32f205 定时器2 ETR功能读不出数据
一下是配置(ETR重映射到PB3口)
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_tiM2, ENABLE);
TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;
TIM_TimeBaseStructInit( TIM_TimeBaseStructure);
   
//配置TIMER2作为计数器
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
TIM_TimeBaseStructure.TIM_Prescaler = 0x0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2,  TIM_TimeBaseStructure); // Time base configuration        
TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0x0f);        
TIM_SetCounter(TIM2, 0);
TIM_Cmd(TIM2, ENABLE);

GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_TIM2);
        
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;     
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOB,  GPIO_InitStructure);

回帖(1)

张敏

2024-5-17 18:00:24
根据您提供的代码片段,我将逐步分析可能导致STM32F205定时器2 ETR功能读不出数据的原因。

1. 首先,确保您已经正确地配置了GPIOB的PB3引脚。由于ETR被重映射到PB3,您需要设置PB3为浮空输入模式。以下是配置PB3的示例代码:

```c
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_InitStructure);
```

2. 检查ETR重映射是否正确配置。在您的代码中,没有看到ETR重映射的配置。您需要在初始化TIM2之前,配置ETR重映射。以下是示例代码:

```c
AFIO_InitTypeDef AFIO_InitStructure;
AFIO_InitStructure.AFIO_MAPR = AFIO_MAPR_TIM2_ETR_RMP;
AFIO_Init(&AFIO_InitStructure);
```

3. 接下来,确保您正确地配置了TIM2的ETR输入。以下是配置ETR的示例代码:

```c
TIM_ETRInitTypeDef TIM_ETRInitStructure;
TIM_ETRInitStructure.TIM_ExtTRGPSC = TIM_ExtTRGPSC_OFF;
TIM_ETRInitStructure.TIM_ExtTRGPolarity = TIM_ExtTRGPolarity_NonInverted;
TIM_ETRInitStructure.TIM_ExtTRGFilter = 0xF;
TIM_ETRClockMSMConfig(TIM2, &TIM_ETRInitStructure);
```

4. 确保您的定时器时基配置正确。从您提供的代码片段中,我注意到TIM_ClockDivision字段没有正确设置。您需要将其设置为TIM_CKD_DIV1,如下所示:

```c
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
```

5. 最后,确保您已经正确地初始化了TIM2,并启动了计数器。以下是示例代码:

```c
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_Cmd(TIM2, ENABLE);
```

综上所述,您需要检查GPIOB的PB3引脚配置、ETR重映射配置、ETR输入配置、定时器时基配置以及TIM2的初始化和计数器启动。如果这些步骤都正确无误,那么您的STM32F205定时器2 ETR功能应该能够正常读取数据。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分