STM32F7上的定时器不稳定

2019-07-14 17:12发布

首先,我是一个完整的n00b,刚刚开始使用STM32。我在设置tiM1和使用外部中断EXTI3时遇到了一些奇怪的行为。我正在尝试测量外部中断的低输入频率,并使用TIM1递增1 MHz计数器,因此我可以以微秒为单位进行测量。我这样做,因为看起来SysTick不够快(1毫秒)给我一个准确的测量。
核心时钟为16 MHz,TIM1设置如下:
  1. <font size="4">htim1.Instance = TIM1;
  2. htim1.Init.Prescaler = 16; // 16 MHz / 16 = 1 MHz
  3. htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  4. htim1.Init.Period = 1; // 1Mhz no sub-dividing
  5. htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  6. htim1.Init.RepetitionCounter = 0;
  7. ...
  8. HAL_NVIC_SetPriority(EXTI3_IRQn, 0, 0);
  9. HAL_NVIC_EnableIRQ(EXTI3_IRQn);
  10. ...
  11. void TIM1_UP_TIM10_IRQHandler(void)
  12. {
  13.     timerTicks++;
  14.     HAL_TIM_IRQHandler(&htim1);
  15. }
  16. ...
  17. void EXTI1_IRQHandler(void)
  18. {
  19.     previousTimerTicks = currentTimerTicks;
  20.     currentTimerTicks = timerTicks;
  21. }
  22. ...
  23. // Start the timer as interrupt
  24. HAL_TIM_Base_Start_IT(&htim1);
  25. ...
  26. while(1){
  27.     // Blink a light so we know the program is running
  28.     HAL_GPIO_TogglePin(GPIOB, Led_Green_Pin);
  29.     HAL_Delay(100);
  30. }</font>
复制代码
但是,程序几乎锁定并且while()运行循环似乎没有执行。然而,我可以看到TIM1计数器正在递增。如果我将句点减慢到100,那么主应用程序循环似乎运行正常。这是TIM1和EXTI3在这个速度上发生冲突的问题 - 还是其他的事情发生在这里?我认为设备应该没有问题提供1 MHz计数器,但也许我这样做是错误的。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。