OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6181|回复: 9

stm32串口中断如何让在while(1)死循环里的跑马灯停止后执行另一个程序

[复制链接]

3

主题

10

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2017-2-14
在线时间
2 小时
发表于 2017-3-4 17:10:42 | 显示全部楼层 |阅读模式
2金钱

主函数:u8 flag;
int main(void)
{
        u8 Tx_Buf[8];
        u8 t;
        u8 len;        
        u16 times=0;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÏμí3ÖD¶ÏóÅÏè¼¶·Ö×é2
        delay_init(168);    //3õê¼»ˉÑóê±oˉêy
        uart_init(115200);         //′®¿ú3õê¼»ˉ
        LED_Init();                                  //3õê¼»ˉLED¶Ë¿ú  
        BEEP_Init();        //3õê¼»ˉ·äÃùÆ÷¶Ë¿ú
        EXTIX_Init();       //3õê¼»ˉía2¿ÖD¶Ïêäèë
  KEY_Init();        
        
        while(1)
        {
               
        if(flag ==1)
        while(1){
                          
         LED2=1;delay_ms(500);
         LED2=0;delay_ms(500);
         LED3=1;delay_ms(500);
         LED3=0;delay_ms(500);
         LED7=1;delay_ms(500);
         LED7=0; delay_ms(500);
         LED13=1; delay_ms(500);
         LED13=0;
        
        }
                        
        else if(flag==2)
        {
                LED3=1;
                LED7=0;
                LED13=0;
                LED2=0;}}}


串口中断函数:
extern u8 flag;

void USART1_IRQHandler(void)                        
{
        u8 Res;
#if SYSTEM_SUPPORT_OS                 
        OSIntEnter();   
#endif
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
        {
                Res =USART_ReceiveData(USART1);//(USART1->DR);        
               
                if((USART_RX_STA&0x8000)==0)
                {if(Res==1) flag =1;
                else if (Res==2) flag =2;
                else flag =0;
                return ;
                }                    

  }
#if SYSTEM_SUPPORT_OS         
        OSIntExit();                                                                                          
#endif
}
#endif        


       您好 ,我问一下 ,我这是想用串口中断  发送字符1  然后跑马灯    之后就不能发送字符2了  一直在跑马灯while死循环里了    这起不到我中断的效果呀

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

33

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
587
金钱
587
注册时间
2015-1-9
在线时间
80 小时
发表于 2017-3-4 17:30:34 | 显示全部楼层
把while循环换成for循环,循环次数随你设定。
或者给WHILE循环一个条件
君子性非异也,善假于物也
不知常,妄作,凶
纵浪大化中,不喜亦不惧,应尽便须尽,无复独多虑
路漫漫其修远兮,吾将上下而求索
菩萨畏因,凡夫畏果
回复

使用道具 举报

3

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2014-2-20
在线时间
284 小时
发表于 2017-3-4 17:42:17 | 显示全部楼层
while(1)
{
  switch(flag)
{
    case 1:
    {
       流水灯程序;
       break;
    }
    case 2:
   {
    关灯;
     break;
   }
  default : break;
}
}
仅供参考
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2017-2-14
在线时间
2 小时
 楼主| 发表于 2017-3-4 18:01:20 | 显示全部楼层
Da Wen 发表于 2017-3-4 17:42
while(1)
{
  switch(flag)

这跟我的程序效果是一样的呀   流水灯还是不会循环的
回复

使用道具 举报

3

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2014-2-20
在线时间
284 小时
发表于 2017-3-4 18:03:47 | 显示全部楼层
1009127284 发表于 2017-3-4 18:01
这跟我的程序效果是一样的呀   流水灯还是不会循环的

你试过了么?你的程序只要flag=1,以后都不会再判断flag,所以才会死循环。
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2017-2-14
在线时间
2 小时
 楼主| 发表于 2017-3-4 18:06:27 | 显示全部楼层
Da Wen 发表于 2017-3-4 18:03
你试过了么?你的程序只要flag=1,以后都不会再判断flag,所以才会死循环。

你这个我也试了  还是一样的    这跟外部中断的效果不一样呀  应该是在跑马灯的时候 发送字符2就会停止 执行另一个程序
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-4-25
在线时间
12 小时
发表于 2017-3-4 23:26:08 | 显示全部楼层
1009127284 发表于 2017-3-4 18:06
你这个我也试了  还是一样的    这跟外部中断的效果不一样呀  应该是在跑马灯的时候 发送字符2就会停止  ...

因为你有两个while(1),一个是外面的大while一个是跑马灯的while,把跑马灯的while删掉吧
回复

使用道具 举报

硬件渣渣 该用户已被删除
发表于 2017-3-5 01:02:24 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

21

主题

299

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1836
金钱
1836
注册时间
2013-7-29
在线时间
278 小时
发表于 2017-3-5 08:58:45 | 显示全部楼层
这个根据需要写,在大循环里加条件就可以。
回复

使用道具 举报

3

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2014-2-20
在线时间
284 小时
发表于 2017-3-6 11:53:42 | 显示全部楼层
1009127284 发表于 2017-3-4 18:06
你这个我也试了  还是一样的    这跟外部中断的效果不一样呀  应该是在跑马灯的时候 发送字符2就会停止  ...

单步走一下看看你的flag有没有变化
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 22:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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