gpt4 book ai didi

c - STM32F103 Timer2不中断

转载 作者:太空宇宙 更新时间:2023-11-04 04:18:55 24 4
gpt4 key购买 nike

背景

我对 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。这向我表明那里有一个 vector 表。

最佳答案

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

Case 1:如果你的任务只需要像中断这样的几个驱动程序初始化,并且你有足够的时间,那么你可以明显地阅读整个初始化章节,对于你的案例中断章节。请注意以下几点。

  • 章节中的小脚注。
  • 异常参见时钟相关章节
  • 异常(exception)情况见电源相关章节

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

情况 2:如果您需要在有限的时间内完成多项初始化和大量开发工作,那么这里有另一种方法。

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

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

关于c - STM32F103 Timer2不中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48707220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com