jude_w 发表于 2026-1-12 10:20:09

STC8G2K64S4中断

使用time2作为pwm时钟源,开启pwm中断,定时器中断3会被关闭,是什么原因

DebugLab 发表于 2026-1-12 13:56:47

新手必读:
https://www.stcaimcu.com/thread-16535-1-1.html
按照这个排查一下常见问题看看
具体分析请上传程序

jude_w 发表于 2026-1-12 15:40:11

DebugLab 发表于 2026-1-12 13:56
新手必读:
https://www.stcaimcu.com/thread-16535-1-1.html
按照这个排查一下常见问题看看


// bio1pwm频率设置
void bioModeSetFreq(float freq)
{
        float freqTemp = freq;
        PWM15_InitTypeDef                PWM15_InitStructure;
        freq = 1000 / freq;
        freq = freq / 0.1;

        PWM15_InitStructure.PWM_Enable    = ENABLE;                                //PWM使能,ENABLE, DISABLE
        PWM15_InitStructure.PWM_Period    = (u16)(freq);                                //PWM周期,0~0x7fff
        PWM15_InitStructure.PWM_Clock_Sel = PWMn_CLK_TM2;                //时钟源选择,PWMn_CLK_SYS, PWMn_CLK_TM2
        PWM15_InitStructure.PWM_Clock_PS= 0;                                        //系统时钟分频参数(PS+1分频),0~15
        PWM15_InitStructure.PWM_Counter   = ENABLE;                                //计数器使能,ENABLE, DISABLE
        PWM15_Init(PWM5, &PWM15_InitStructure);
       
       
        PWMChannelCtrl(PWM53,ENABLE,0,ENABLE,ENABLE,DISABLE);        //PWM_ID, 输出使能, 初始电平, PWM中断, 第二个触发点中断, 第一触发点中断       
        PWM15Duty(PWM53, (u16)(freq* (4.1 - ((65 - freqTemp) * 0.046)) / 100), 0x0000);
       
       
//        PWM53CR = (1 << 7) | (0 << 6) | (1 << 2)| (1 << 1)| 0;
}


这个是pwm设置函数,只要失能pwm中断就会导致定时器3关闭,当关闭pwm中断时,定时器3会恢复正常

jude_w 发表于 2026-1-12 15:43:03

DebugLab 发表于 2026-1-12 13:56
新手必读:
https://www.stcaimcu.com/thread-16535-1-1.html
按照这个排查一下常见问题看看


// bio1pwm禁用
void bioModeDisable(void)
{
        PWM15_InitTypeDef                PWM15_InitStructure;
//        EAXSFR();                //访问XFR
        PWMChannelCtrl(PWM53,DISABLE,0,DISABLE,DISABLE,DISABLE);        //PWM_ID, 输出使能, 初始电平, PWM中断, 第二个触发点中断, 第一触发点中断
        PWM15_InitStructure.PWM_Enable    = DISABLE;                                //PWM使能,ENABLE, DISABLE
        PWM15_InitStructure.PWM_Period    = 0x0000;                                        //PWM周期,0~0x7fff
        PWM15_InitStructure.PWM_Clock_Sel = PWMn_CLK_SYS;                        //时钟源选择,PWMn_CLK_SYS, PWMn_CLK_TM2
        PWM15_InitStructure.PWM_Clock_PS= 0;                                                //系统时钟分频参数(PS+1分频),0~15
        PWM15_InitStructure.PWM_Counter   = DISABLE;                                //计数器使能,ENABLE, DISABLE
//        PWM15_InitStructure.PWM_CInt = ENABLE;
        PWM15_Init(PWM5, &PWM15_InitStructure);
        BIO_MODE_OUT(0);
//        EAXRAM();                        // 恢复访问XRAM
}


这是关闭的

jude_w 发表于 2026-1-12 15:44:55

DebugLab 发表于 2026-1-12 13:56
新手必读:
https://www.stcaimcu.com/thread-16535-1-1.html
按照这个排查一下常见问题看看


void Timer3_Config(void)
{
        TIM_InitTypeDef Timer_InitStruct = {0};
        Timer_InitStruct.TIM_Mode = TIM_16BitAutoReload;
        Timer_InitStruct.TIM_ClkSource = TIM_CLOCK_1T;                       
        Timer_InitStruct.TIM_ClkOut = DISABLE;
        Timer_InitStruct.TIM_Value = 0xA99A;                        // 100us
        Timer_InitStruct.TIM_Run = ENABLE;
        Timer_Inilize(Timer3, &Timer_InitStruct);
        NVIC_Timer3_Init(ENABLE, Priority_3);
}

这是定时器3初始化

jude_w 发表于 2026-1-12 15:47:44

DebugLab 发表于 2026-1-12 13:56
新手必读:
https://www.stcaimcu.com/thread-16535-1-1.html
按照这个排查一下常见问题看看


不打开pwm中断时定时器3中断是正常的

DebugLab 发表于 2026-1-12 16:08:46

两个中断频率多少,中断程序运行时间多少
检查是否存在中断程序耗时占比大于100%导致阻塞
还有如中断号大于31的中断,是否正确使用中断号扩展插件或使用13中断跳转

jude_w 发表于 2026-1-12 16:35:49

DebugLab 发表于 2026-1-12 16:08
两个中断频率多少,中断程序运行时间多少
检查是否存在中断程序耗时占比大于100%导致阻塞
还有如中断号大于 ...

如何使用13中断跳转呢

jude_w 发表于 2026-1-12 16:44:33

DebugLab 发表于 2026-1-12 16:08
两个中断频率多少,中断程序运行时间多少
检查是否存在中断程序耗时占比大于100%导致阻塞
还有如中断号大于 ...

定时器3的中断频率为1ms,pwm的中断频率为30hz到65hz

jude_w 发表于 2026-1-12 16:46:29

这里已经成功修改
页: [1] 2
查看完整版本: STC8G2K64S4中断