csgtli 发表于 2023-6-6 23:36:16

请教,STC8H8K64U TIMER3做计数器,不能计数

我用的是官方的函数库写的程序:
定时器3初始化如下,计数器脉冲从P04(准双向输入口)输入:

        TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_Ext;
        TIM_InitStructure.TIM_ClkOut    = DISABLE;               
        TIM_InitStructure.TIM_Value   = 10UL;               
        TIM_InitStructure.TIM_Run       = ENABLE;                               
        Timer_Inilize(Timer3,&TIM_InitStructure);       
        NVIC_Timer3_Init(ENABLE,Priority_2);               

发现不能计数,但用TIMER0从P35输入脉冲能计数,请问是什么问题?手册关于定时器部分也看了N遍,没发现问题。各位大神知道是什么回事不?

乘风飞扬 发表于 2023-6-7 10:30:30

5个定时器都能做计数器的,从预设计数值累加溢出后才会产生中断。
附件例程请参考。

csgtli 发表于 2023-6-7 18:26:36

乘风飞扬 发表于 2023-6-7 10:30
5个定时器都能做计数器的,从预设计数值累加溢出后才会产生中断。
附件例程请参考。 ...

谢谢您的回答,问题找到了,预设值应该是(65536UL-SET_VALUE)才是对的。非常感谢

彭彭 发表于 2026-3-14 16:12:38

乘风飞扬 发表于 2023-6-7 10:30
5个定时器都能做计数器的,从预设计数值累加溢出后才会产生中断。
附件例程请参考。 ...

代码里Timer4_Run();这个函数在哪引用的找不到啊
if(TIM == Timer4)                //Timer4,固定为16位自动重装, 中断无优先级
        {
                Timer4_Stop();        //停止计数
                if(TIMx->TIM_Interrupt == ENABLE)                Timer4_InterruptEnable();        //允许中断
                else                Timer4_InterruptDisable();        //禁止中断
                if(TIMx->TIM_ClkSource >TIM_CLOCK_Ext)        return 2;
                if(TIMx->TIM_ClkSource == TIM_CLOCK_12T)        Timer4_12T();        //12T
                if(TIMx->TIM_ClkSource == TIM_CLOCK_1T)                Timer4_1T();        //1T
                if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext)        Timer4_AsCounter();        //对外计数或分频
                else                Timer4_AsTimer();                //定时
                if(TIMx->TIM_ClkOut == ENABLE)        Timer4_CLKO_Enable();                //输出时钟
                else                Timer4_CLKO_Disable();        //不输出时钟

                T4_Load(TIMx->TIM_Value);
                if(TIMx->TIM_Run == ENABLE)        Timer4_Run();        //开始运行
                return        0;                //成功
        }

乘风飞扬 发表于 2026-3-16 09:10:58

彭彭 发表于 2026-3-14 16:12
代码里Timer4_Run();这个函数在哪引用的找不到啊
if(TIM == Timer4)                //Timer4,固定为16位自动重装, 中断 ...

在头文件里面定义,下载的项目编译通过后,在想要查看的函数上右键选择前往定义位置就能找到定义的地方:



或者通过全局查找“CTRL+SHIFT+F”也能找到该函数/变量的所有位置:


页: [1]
查看完整版本: 请教,STC8H8K64U TIMER3做计数器,不能计数