在STM32F429-Discovery中使用定时器外设制作输入脉冲计数器

时间:2015-09-28 17:31:09

标签: timer stm32f4discovery

我想在STM32F429I-Disco板上使用定时器外设TIM计数脉冲。我已将TIM3初始化为:

  TIM_SlaveConfigTypeDef sSlaveConfig;
  TIM_MasterConfigTypeDef sMasterConfig;

  htim3.Instance = TIM3;
  htim3.Init.Prescaler = 0;
  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim3.Init.Period = 1000;
  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  HAL_TIM_Base_Init(&htim3);

  sSlaveConfig.SlaveMode = TIM_SLAVEMODE_EXTERNAL1;
  sSlaveConfig.InputTrigger = TIM_TS_TI2FP2;
  sSlaveConfig.TriggerPolarity = TIM_TRIGGERPOLARITY_RISING;
  sSlaveConfig.TriggerFilter = 15;
  HAL_TIM_SlaveConfigSynchronization(&htim3, &sSlaveConfig);

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig);

在MSP中它是这样的:

if (htim->Instance == TIM3)
{
    GPIO_InitTypeDef   GPIO_InitStruct;
    __TIM3_CLK_ENABLE();

    GPIO_InitStruct.Pin = GPIO_PIN_4;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

我知道它是PB4引脚中设置的定时器,它由该引脚中的脉冲触发。

我想要的是计算这些脉冲,就像这样:

while(1)
{
    uint8_t buffer[128];
    int numberSize = snprintf((char*)buffer, 128, "%d",(int) __HAL_TIM_GetCounter(&htim3));
    writeStrOnCell(buffer, numberSize, 0, 0);

    HAL_Delay(500);
}

但没有任何工作......我没有得到脉冲。当我按下用户按钮时,我将PB4连接到PA0。

由于

1 个答案:

答案 0 :(得分:0)

可能您忘了配置NVIC。

示例:

HAL_NVIC_SetPriority(TIM3_IRQn, 0, 1);
HAL_NVIC_EnableIRQ(TIMx_IRQn);

请注意,在此示例中,定时器具有相当高的中断优先级。