OpenEdv-开源电子网

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

STM32F103ZET6板子的红外遥控实验

[复制链接]

0

主题

8

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2018-10-11
在线时间
14 小时
发表于 2020-4-19 23:28:59 | 显示全部楼层 |阅读模式
本帖最后由 李赖赖无敌手 于 2020-4-19 23:30 编辑

在这里求助一下,希望原子哥能解答一下。借用原子的红外遥控实验例程改的,改动很小。这是主程序: int main(void)
{         
        u8 key;
        u8 t=0;        
         u8 *str=0;

        delay_init();                     //延时函数初始化         
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        uart_init(115200);                 //串口初始化为115200
         LED_Init();                             //LED端口初始化        
        KEY_Init();                 
        Remote_Init();                        //红外接收初始化                        
         
while(1)
{        
        key=Remote_Scan();        
                if(key)
                {           
                        switch(key)
                        {
                                case 34:str="LEFT";Motor_break();break;                  
                        }
                }  
        }
}

//*************************//
void Motor_break(void)
{
        int i=0;
                for(i=999;i>=0;i--)
        {
                printf("\r\n i= %d\n",i);
        }
}



发现个问题啊,我按下一次LEFT键之后,Motor_break()这个函数会执行两次。好崩溃啊,搞了一晚上没做出来。同样的程序,我把这个移植到按键的那个例程,
int main (void)
{               
   int key;
         LED_Init();
         delay_init();
         KEY_Init();
         BEEP_Init();
         uart_init(115200);
         while(1)
         {
                        key=Key_Scan();
                  if(key)
                        {
                                switch(key)
                                {
                                        case KEY0_PRES:
                                                Motor_break();break;
                                        case KEY1_PRES:
                                                GPIO_ResetBits(GPIOE,GPIO_Pin_5);break;
                                        case WKUP_PRES:
                                                GPIO_SetBits(GPIOB,GPIO_Pin_8);break;
                                }
                        }
         }
}

这个例子里面Motor_break()就只执行一次。有没有大神可以解答一下,不胜感激,因为要用这个做毕设,有点麻烦了。因为需要红外遥控。哎

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

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2021-11-1
在线时间
23 小时
发表于 2021-12-21 10:07:09 | 显示全部楼层
我也遇到类似的问题,会执行两遍。请问解决了吗?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 00:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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