STM32F103 Timer2不中断

时间:2018-02-09 13:41:54

标签: c arm embedded stm32 iar

背景

我对STM32系列相对缺乏经验,所以我确信这很简单,而且我在某个地方错过了设置。

我正在尝试设置计时器以简单地中断更新事件,该事件应该在计数器以TIM2->ARR值翻转时显示。

  • 我目前在定时器中断内设置一个断点,它根本就没有触发
  • 我尝试过使用其他计时器模块
  • 计数器正在计数(我可以通过调试器观察)
  • 根据以下代码
  • 正确加载寄存器
  • 计数器翻转时设置TIM2->SR UIF(更新中断标志)

代码

void TIM_init(void){
    RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;

    TIM2->PSC = 1000;
    TIM2->ARR = 1000;
    TIM2->DIER = TIM_DIER_UIE;
    TIM2->EGR = TIM_EGR_UG;
    NVIC_EnableIRQ(TIM2_IRQn);

    DBGMCU->CR |= DBGMCU_CR_DBG_TIM2_STOP;
    TIM2->CR1 |= TIM_CR1_CEN;
}

void TIM2_IRQHandler(void){
    TIM2->SR &= ~TIM_SR_UIF;    // clear the interrupt flag
}

我也尝试按如下方式设置优先级分组,结果相同:

void TIM_init(void){
    RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;

    TIM2->PSC = 10;
    TIM2->ARR = 1000;
    TIM2->DIER = TIM_DIER_UIE;
    TIM2->EGR = TIM_EGR_UG;

    // Enable the Timer2 Interrupts
    uint32_t priorityGroup, priority;
    priorityGroup = NVIC_GetPriorityGrouping();
    priority = NVIC_EncodePriority(priorityGroup, 3, 6);
    NVIC_SetPriority(TIM2_IRQn, priority);

    NVIC_EnableIRQ(TIM2_IRQn);

    DBGMCU->CR |= DBGMCU_CR_DBG_TIM2_STOP;
    TIM2->CR1 = TIM_CR1_CEN;
}

该项目还包含一个程序集文件startup_stm32f10x.s。该文件的摘录:

__vector_table
        DCD     sfe(CSTACK)
        DCD     Reset_Handler             ; Reset Handler
        DCD     NMI_Handler               ; NMI Handler
        DCD     HardFault_Handler         ; Hard Fault Handler.....

继续,包括TIM2_IRQHandler。这向我表明那里有一个向量表。

1 个答案:

答案 0 :(得分:0)

这可能不是一个确切的解决方案,但更多的建议,直到有人为您提供更好的解决方案。

案例1 :如果您的任务只需要很少的驱动程序初始化,例如中断,并且您有足够的时间,那么您可以明确阅读整个初始化章节,针对您的案例中断章节。请注意以下几点。

  • 本章中的小脚注。
  • 请参阅与异常时钟相关的章节
  • 请参阅有关Power for exception
  • 的章节

在某些情况下,数据表会在时钟和电源章节中写入初始化相关信息,这有时会导致所需的驱动程序无法运行。

案例2 :如果您需要在有限的时间内进行多次初始化和大量开发,那么这是另一种方法。

在我使用不同类型的μc工作期间,我发现最好为制造商留下较低级别的初始化,至少在开始阶段。现在,大多数制造商都可以选择在线创建空白骨架项目或使用某种软件。对于您的情况,它是STM32Cube initialization code generator

您可以选择μc和相关驱动程序,它们将创建一个包含所有初始化的完整骨架项目,有时会填充示例代码以供您启动。它减少了开发人员通过较低级别初始化并直接进行开发的工作量。您还可以查看其代码,以了解驱动程序的初始化方式并进行相关修改。密切关注其初始化代码中的注释,以便了解它或随附的任何框架文档。