首页 文章

STM32F103 Timer2没有中断

提问于
浏览
1

背景

我对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

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

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

    • 本章中的小脚注 .

    • 请参阅有关异常时钟的章节

    • 请参阅与Power for exception相关的章节

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

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

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

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

相关问题