你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32外部中断套PWM呼吸灯为什么呼吸灯不起作用

[复制链接]
Barry Allen 提问时间:2021-3-26 10:36 / 未解决
void EXTI9_5_IRQHandler(void)
{                       
         u8 lcd_id[12];                        //存放LCD ID字符串       
        delay_init();                     //延时函数初始化          
        uart_init(9600);                 //串口初始化为9600
               
        delay_init();                     //延时函数初始化          
        LED_Init();                          //初始化与LED连接的硬件接口
        LCD_Init();
        TIM1_PWM_Init(899,0);//不分频。PWM频率=72000/(899+1)=80Khz
  sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。                                 

  delay_ms(10);    //消抖                                          
        if(KEY0==0)       
        {
               
          while(1)
        {                 
                switch(x)
                {
                        case 0CD_Clear(WHITE);break;
                        case 1CD_Clear(BLACK);break;
                        case 2CD_Clear(BLUE);break;
                        case 3CD_Clear(RED);break;
                        case 4CD_Clear(MAGENTA);break;
                        case 5CD_Clear(GREEN);break;
                        case 6CD_Clear(CYAN);break;

                        case 7CD_Clear(YELLOW);break;
                        case 8CD_Clear(BRRED);break;
                        case 9CD_Clear(GRAY);break;
                        case 10:LCD_Clear(LGRAY);break;
                        case 11:LCD_Clear(BROWN);break;
                }
                POINT_COLOR=RED;          
                LCD_ShowString(30,40,200,24,24,"mode:1");                                                                                                    
            x++;
                if(x==12)x=0;       
     delay_ms(30);                       
                  if(dir)led0pwmval++;
                  else led0pwmval--;         
                  if(led0pwmval>300)dir=0;
                  if(led0pwmval==0)dir=1;                                                    
                  TIM_SetCompare1(TIM1,led0pwmval);         
                        if(KEY1==0)break;               
                if(KEY1==0)
                        break;
        }
        }
         EXTI_ClearITPendingBit(EXTI_Line5);    //清除LINE5上的中断标志位  
}


收藏 评论2 发布时间:2021-3-26 10:36

举报

2个回答
xmshao 回答时间:2021-3-26 10:46:16
这个问题有点奇怪,什么叫呼吸灯不起作用啊? 还有,你中断程序里写这么多东西还配有循环?


天啦,你这样写会不会导致很多事情做不了或低优先级中断也没法响应。 建议琢磨下你的代码逻辑。
xmshao 回答时间:2021-3-26 10:56:16
还有,你代码里的delay()是靠什么实现的?如果是利用到TIMER中断的话,若它的优先级比现在的EXTI外部中断优先级还低,就会发生死等。 总之,你的代码需要好好理理,尽量不要这样组织代码。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版