打印
[STM32F1]

定时器中断需要通过 NVIC进行配置

[复制链接]
719|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
4c1l|  楼主 | 2024-11-21 00:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
定时器中断需要通过 NVIC嵌套向量中断控制器进行配置,以便定时器的溢出可以触发中断服务程序ISR。

配置 NVIC:
STM32CubeMX 会自动生成中断服务程序模板,并启用 NVIC 中定时器的中断。

c
复制代码
/* Enable the TIM3 global interrupt */
HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM3_IRQn);

使用特权

评论回复
沙发
tpgf| | 2024-12-3 09:36 | 只看该作者
#include "gd32w515.h"

// 定义中断服务函数
void TIMER0_IRQHandler(void) __attribute__((interrupt("IRQ")));

int main(void)
{
    // 初始化系统时钟
    SystemClock_Config();

    // 配置GPIO
    rcu_periph_clock_enable(RCU_PMU);
    rcu_periph_clock_enable(RCU_TIMER0);

    // 配置NVIC
    nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0); // 设置优先级分组
    nvic_irq_enable(TIMER0_IRQn, 0, 0);             // 使能TIMER0中断,抢占优先级为0,子优先级为0

    // 配置定时器
    timer_parameter_struct timer0_initpara;
    timer0_initpara.prescaler = 7999;              // 设置预分频器
    timer0_initpara.period = 9999;                 // 设置自动重装载值
    timer0_initpara.alignedmode = TIMER_COUNTER_EDGE;
    timer_init(TIMER0, &timer0_initpara);           // 初始化定时器

    timer_interrupt_enable(TIMER0, TIMER_INT_UP);   // 使能更新中断

    // 启动定时器
    timer_enable(TIMER0);

    // 主循环
    while (1)
    {
        // 主循环内容
    }
}

// 定时器中断服务函数
void TIMER0_IRQHandler(void) __attribute__((interrupt("IRQ")))
{
    if (timer_interrupt_flag_get(TIMER0, TIMER_INT_FLAG_UP) != RESET)
    {
        // 清除中断标志
        timer_interrupt_flag_clear(TIMER0, TIMER_INT_FLAG_UP);
        
        // 定时器中断处理逻辑
        // ...
    }
}

使用特权

评论回复
板凳
xiaoqizi| | 2024-12-4 19:11 | 只看该作者
NVIC确定多个中断源之间的优先级顺序。

使用特权

评论回复
地板
木木guainv| | 2024-12-4 21:00 | 只看该作者
确保定时器中断的优先级高于其他可能冲突的中断,以保证定时器中断能够及时响应

使用特权

评论回复
5
磨砂| | 2024-12-4 22:49 | 只看该作者
在中断服务程序中,应尽快处理必要的任务,避免长时间占用中断,影响系统的实时性

使用特权

评论回复
6
晓伍| | 2024-12-5 09:47 | 只看该作者
正确配置系统时钟和外设时钟,以确保定时器工作在预期的频率下

使用特权

评论回复
7
八层楼| | 2024-12-5 13:57 | 只看该作者
在中断服务程序中,务必清除中断标志,否则可能导致中断无法再次触发

使用特权

评论回复
8
和下土| | 2024-12-30 23:53 | 只看该作者
在STM32中,定时器中断配置需要通过 NVIC进行设置,以便定时器溢出或其他定时事件能够触发中断服务程序。

使用特权

评论回复
9
慢动作| | 2024-12-31 00:10 | 只看该作者
STM32CubeMX 提供了图形化的配置工具,可以帮助你轻松配置定时器中断。

使用特权

评论回复
10
申小林一号| | 2024-12-31 16:10 | 只看该作者
感谢分享,学习一下

使用特权

评论回复
11
公羊子丹| | 2025-1-24 09:37 | 只看该作者
这个配置没问题,你也可以根据实际需要调整优先级,控制定时器中断的响应顺序。

使用特权

评论回复
12
周半梅| | 2025-1-24 09:39 | 只看该作者
是的,NVIC的配置是必须的。你确认一下定时器的中断是否已启用?

使用特权

评论回复
13
帛灿灿| | 2025-1-24 09:40 | 只看该作者
你在STM32CubeMX里启用了TIM3的中断吗?它会自动生成相关代码。

使用特权

评论回复
14
童雨竹| | 2025-1-24 09:41 | 只看该作者
代码里设置的优先级是0,如果需要改变中断优先级的话,可以修改这里。

使用特权

评论回复
15
万图| | 2025-1-24 09:43 | 只看该作者
确保定时器的溢出中断使能已经正确设置,不然这个配置也不会生效。

使用特权

评论回复
16
Wordsworth| | 2025-1-24 09:44 | 只看该作者
你有设置定时器的自动重载值(ARR)和预分频器(PSC)吗?这些会影响中断的发生频率。

使用特权

评论回复
17
Bblythe| | 2025-1-24 09:45 | 只看该作者
如果你在代码中没有看见相关的ISR代码,可能是要在STM32CubeMX中启用相关的外设和中断。

使用特权

评论回复
18
Pulitzer| | 2025-1-24 09:46 | 只看该作者
如果你还没有实现ISR函数,记得在代码里写好对应的定时器中断服务程序。

使用特权

评论回复
19
Uriah| | 2025-1-24 09:48 | 只看该作者
这种配置其实很基础,但有时候忘记启用定时器的中断使能会导致中断无法触发。

使用特权

评论回复
20
Clyde011| | 2025-1-24 09:49 | 只看该作者
你确认一下外部中断源和定时器中断源的优先级设置,可能会影响到中断的响应。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

612

帖子

2

粉丝