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