[技术问答] NUC240的定时器使用延时函数

[复制链接]
3674|28
 楼主| powerantone 发表于 2025-3-6 22:59 | 显示全部楼层 |阅读模式
各位大大安安,我在函式中使用TIMER_Delay()延时函数,就无进不去TMR0_IRQHandler()中断函式了
注解掉TIMER_Delay()延时函数又行,想问其原因,谢谢!
void TIMER0_Init(void)
{
    SYS_ResetModule(TMR0_RST);
    TIMER_Open(TIMER0,TIMER_PERIODIC_MODE,1);
    TIMER_EnableInt(TIMER0);
    NVIC_EnableIRQ(TMR0_IRQn);
    TIMER_Start(TIMER0);
}

void TMR0_IRQHandler(void)
{
    if(TIMER_GetIntFlag(TIMER0) == 1) {
        /* Clear Timer0 time-out interrupt flag */
        TIMER_ClearIntFlag(TIMER0);

        g_au32TMRINTCount[0]++;
    }
}

int main(void)
{
    /* Unlock protected registers */
    SYS_UnlockReg();

    SYS_Init();

    /* Lock protected registers */
    SYS_LockReg();

    TIMER0_Init();

    while(1)
    {
        TIMER_Delay(TIMER0,1000000);
        PB5 = ~PB5;
    }
}
复制代码
奔跑的牛 发表于 2025-3-7 10:41 | 显示全部楼层
同时使用了timer0,使用TIMER_Delay函数时把之前TIMER_Open函数里对TIMER0的配置清除了
雨下纪事 发表于 2025-7-23 14:42 | 显示全部楼层
配置 NUC240 定时器延时:设时钟分频,定初值算定时周期,开中断或查询计数,按目标延时设循环次数,注意溢出处理。
小岛西岸来信 发表于 2025-8-28 10:46 | 显示全部楼层
NUC240 定时器实现延时函数可通过配置定时器计时功能。先选择定时器模块(如 TMR0),设置工作模式为定时模式,配置时钟源与分频系数确定计数频率。
编写初始化函数:使能定时器时钟,设置预分频值、自动重载值,计算计数周期。
延时函数中,设置计数初值,启动定时器,循环等待定时器溢出标志,溢出后清除标志并停止定时器,实现精准延时。
需根据所需延时时间计算重载值,结合系统时钟频率调整参数,确保延时准确。
我趴在云边 发表于 2025-9-23 18:43 | 显示全部楼层
NUC240 定时器实现延时:配置定时器工作模式,设置预分频和计数周期,使能中断。延时函数中启动定时器,进入等待状态,定时器溢出触发中断时置标志位,函数检测到标志位后停止定时器并返回,实现精确延时
一点点晚风 发表于 2025-10-4 11:21 | 显示全部楼层
NUC240 定时器实现延时:先配置定时器工作模式(如定时模式),设置预分频值和重载值(根据系统时钟计算,如主频 72MHz,预分频 71 则计数频率 1MHz)。使能定时器,启动计数,循环查询计数溢出标志,溢出时清零标志并累加计数,达到设定延时值后关闭定时器。例:延时 1ms 可设重载值 1000,溢出一次即 1ms。
nomomy 发表于 2025-10-7 20:42 | 显示全部楼层
同一定时器的双重角色              
jimmhu 发表于 2025-10-8 18:06 | 显示全部楼层
将延时和周期中断这两个任务分配给两个不同的定时器。
1988020566 发表于 2025-10-8 20:26 | 显示全部楼层
改用 不依赖硬件定时器的延时方式
北海道没有冬天 发表于 2025-10-9 21:16 | 显示全部楼层
NUC240 定时器延时函数可这样实现:配置定时器工作模式为定时,设置预分频值和重载值,使定时周期符合需求。使能定时器中断,在中断服务程序中计数,达到设定次数后标志位置 1。主函数循环检测标志位,置位则退出延时,实现精确延时,需注意优先级配置避免冲突。
vivilyly 发表于 2025-10-10 16:25 | 显示全部楼层
使用另一个定时器              
幻想收藏家 发表于 2025-10-11 13:09 | 显示全部楼层
我建议检查一下TIMER_Delay()函数的实现,看看是否有可能阻塞了中断
uytyu 发表于 2025-10-14 18:40 | 显示全部楼层
TIMER_Delay()与定时器中断的资源冲突
旧年胶片 发表于 2025-10-15 21:32 | 显示全部楼层
NUC240 定时器实现延时函数可配置为定时模式:先设置 TIMERx_CTL 的预分频值和自动重载值,使能计数器。启动定时器后,循环查询 TIMERx_INTSTS 的超时标志,直至标志置位。进入中断服务程序后清除标志,完成延时。需根据系统时钟计算参数,确保延时精度。
gygp 发表于 2025-10-18 10:31 | 显示全部楼层
TIMER_Delay() 函数内部会持续监测 TIMER0 的溢出次数以达到延时目标。
modesty3jonah 发表于 2025-10-18 11:02 | 显示全部楼层
不同的任务,使用不同的硬件资源。
plsbackup 发表于 2025-10-18 17:41 | 显示全部楼层
LED 闪烁的周期由硬件定时器保证,非常精确。
ccook11 发表于 2025-10-18 18:28 | 显示全部楼层
TIMER_Delay()函数本身就是通过 “忙等待 ” 的方式来实现延时的
sdlls 发表于 2025-10-18 19:07 | 显示全部楼层
中断和延时互不干扰。              
robertesth 发表于 2025-10-18 21:16 | 显示全部楼层
NVIC根本没有机会来得及响应这个中断
您需要登录后才可以回帖 登录 | 注册

本版积分规则

682

主题

4093

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部