找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3128|回复: 6
打印 上一主题 下一主题
收起左侧

STM32单片机一进外部中断就卡死,大佬帮我看下什么原因

[复制链接]
回帖奖励 2 黑币 回复本帖可获得 2 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
主程序 time,time2,time3由TIM1定时器提供时钟,Sys提供延时函数,TIM3提供PWM(两路)



void EXTI4_IRQHandler(void)
{   
    if(EXTI_GetITStatus(EXTI_Line4)!=RESET)//不等于低电平就是1,按下的时候就不为1了
        {
            Delay_ms(10);
            if(Menu==1)
            {
                Menu=2;
            }else if(Menu==2)
            {
                Menu=1;
            }
            EXTI_ClearITPendingBit(EXTI_Line4);  //清理标志位
        }
}

void EXTI9_5_IRQHandler(void)
{
    char keytemp=0x55;
    /*keytemp&0X0F 表示只取末尾四位为有效值*/
    /*0x0F 表示采样四次IO为高电平  表示IO状态稳定在高电平*/
    /*0x00 表示采样四次IO为低电平  表示IO状态稳定在低电平*/
    while(((keytemp&0X0F)!=0x0F)&&((keytemp&0X0F)!=0x00))
    {
        /*间隔1us后采集*/
         Delay_us(1);
        /*按键缓存器左移一位*/
        keytemp<<=1;
        /*当脉冲脚为高时 或称为A相*/
        if(knob1_clk== 1)
        {
            /*按键缓存器末尾补1*/
            keytemp |= 0x01;
        }
    }
        if(Menu==2)
    {
    if(knob1_clk==1)
    {
        if(knob1_dt==1)
        {
            Mode_Sv=Mode_Sv+5;    /*A上升沿时 B为高 顺时针*/
        }
        else
        {
            Mode_Sv=Mode_Sv-5;    /*A上升沿时 B为低 逆时针*/
        }
    }else{
        if(knob1_dt==0)
        {
            Mode_Sv=Mode_Sv+5;    /*A下降沿时 B为低 顺时针*/
        }
        else
        {
            Mode_Sv=Mode_Sv-5;    /*A下降沿时 B为高 逆时针*/
        }        
    }
    }   
    EXTI_ClearITPendingBit(EXTI_Line6);  //清除LINE6上的中断标志位
}






分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:936528 发表于 2021-10-25 10:01 | 显示全部楼层
下面是主程序
        while(1)       
        {               
                if ( time >= 300 ) /* 10 * 1 ms = 10ms ʱ¼äµ½ */
                {
                        d=Get_Max31855();
                        TM1=d;
                        if(TM1>=92.5)
                        {
                                TM2=TM1+(TM1-92.3)*0.026;//²ÉÑù¾«¶È²¹³¥       
                        }else
                        {
                        TM2=TM1;
                        }
                        time = 0;
                }
                if ( time2 >= 1000 ) /* 1000 * 1 ms = 1s ʱ¼äµ½ */
                {
                       
                        pid.Pv=TM2;//µ±Ç°Î¶Ƞ      
                        PID_Calc(); //pid¼ÆËã       
                        Mode();//ʱ¿Ì²ì¾õÉèÖÃζȵı仯
                        time2 = 0;
                }
                if ( time3 >= 200 ) /* 10 * 1 ms = 10ms ʱ¼äµ½ */
                {
                        time3 = 0;  
                        OLED_Temp();
                }
        }         
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表