OpenEdv-开源电子网

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

仪表用的遥控器非常不灵敏,经常自动退出,请问是什么原因?

[复制链接]

1

主题

6

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-4-29
在线时间
13 小时
发表于 2019-4-29 09:55:05 | 显示全部楼层 |阅读模式
u32 Remote_Odr=0;           //ÃüáîÔY′æ′|
u8  Remote_Cnt=0;    //°′¼ü′Îêy,′Ë′ΰ′ϼüμÄ′Îêy
u8  Remote_Rdy=0;    //oìía½óêÕμ½êy¾Y   
//3õê¼»ˉoìía½óêÕòy½ÅμÄéèÖÃ
//¿aÆôÖD¶Ï,2¢ó3éä
void Remote_Init(void)
{                                                         
        GPIO_InitTypeDef GPIO_InitStructure;        //GPIO
        NVIC_InitTypeDef NVIC_InitStructure;        //ÖD¶Ï
        EXTI_InitTypeDef EXTI_InitStructure;        //ía2¿ÖD¶ÏÏß
                 
        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE );          

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;  //éÏà-êäèë
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);  

        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1);          //Ñ¡Ô&#241A1ËùÔúμÄGPIO1ü½ÅóÃ×÷ía2¿ÖD¶ÏÏß·EXIT1               

        EXTI_InitStructure.EXTI_Line = EXTI_Line1;        //ía2¿Ïß·EXIT1
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                        //éèíaía2¿ÖD¶ÏÄ£ê½:EXTIÏß·ÎaÖD¶ÏÇëÇó
        EXTI_Mode_Event ;//éèÖà EXTIÏß·Îaê¼tÇëÇó
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  //ía2¿ÖD¶Ï′¥·¢ÑØÑ¡Ôñ:éèÖÃêäèëÏ߷ϽμÑØÎaÖD¶ÏÇëÇó
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;                //ê1Äüía2¿ÖD¶ÏDÂ×′ì¬
        EXTI_Init(&EXTI_InitStructure);                //¸ù¾YEXTI_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèEXTI¼Ä′æÆ÷       

        NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn; //ê1Äü°′¼üËùÔúμÄía2¿ÖD¶Ïí¨μà
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //ÏèÕ¼óÅÏè¼¶2¼¶
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //′óóÅÏè¼¶1¼¶
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ê1Äüía2¿ÖD¶Ïí¨μà
        NVIC_Init(&NVIC_InitStructure); //¸ù¾YNVIC_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèNVIC¼Ä′æÆ÷
}   
//¼ì2aÂö3å¿í¶è
//×î3¤Âö¿íÎa5ms
//·μ»ØÖμ:x,′ú±íÂö¿íÎax*20us(x=1~250);
u8 Pulse_Width_Check(void)
{
    u8 t=0;         
    while(RDATA)
    {         
                t++;delay_us(19);                                         
     if(t==250)return t; //3¬ê±òç3ö
    }
    return t;
}                          
//′|àíoìía½óêÕ  
/*-------------------------D-òé--------------------------
¿aê¼à-μí9ms,½ó×ÅêÇò»¸ö4.5msμĸßÂö3å,í¨ÖaÆ÷¼t¿aê¼′«Ëíêy¾YáË
½ó×ÅêÇ·¢Ëí4¸ö8λ¶t½øÖÆÂë,μúò»¶t¸öêÇò£¿Øê¶±eÂë(REMOTE_ID),μúò»¸öÎa
ÕyÂë(0),μú¶t¸öÎa·′Âë(255),½ó×Åὸöêy¾YêǼüÖμ,μúò»¸öÎaÕyÂë
μú¶t¸öÎa·′Âë.·¢Ëííêoó40ms,ò£¿ØÔù·¢Ëíò»¸ö9msμí,2ms¸ßμÄÂö3å,
±íê¾°′¼üμÄ′Îêy,3öÏÖò»′ÎÔòÖ¤Ã÷Ö»°′ÏÂáËò»′Î,èç1û3öÏÖ¶à′Î,Ôò¿é
òÔèÏÎaêÇ3ÖDø°′ϸüü.
---------------------------------------------------------*/                 
//ía2¿ÖD¶Ï·tÎñ3ìDò          
void EXTI1_IRQHandler(void)
{      
        u8 res=0;
    u8 OK=0;
    u8 RODATA=0;                    
        while(1)
    {                   
        if(RDATA)//óD¸ßÂö3å3öÏÖ
        {
                                          
            res=Pulse_Width_Check();//»ñμÃ′Ë′θßÂö3å¿í¶è  
                               
                                                   
            if(res==250)break;//·ÇóDóÃDÅoÅ
            if(res>=200&&res<250)OK=1; //&#187;&#241;μ&#195;&#199;°μ&#188;&#206;&#187;(4.5ms)
            else if(res>=85&&res<200)  //°′&#188;ü′&#206;êy&#188;óò&#187;(2ms)
            {         
                                                    
                      Remote_Rdy=1;//&#189;óêüμ&#189;êy&#190;Y
                Remote_Cnt++;//°′&#188;ü′&#206;êy&#212;&#246;&#188;ó
                                                         // dispnone(3412);
                                                   break;
            }
            else if(res>=50&&res<85){RODATA=1;}//1.5ms
            else if(res>=10&&res<50){RODATA=0;}//500us
            if(OK)
            {   
                                                          
                Remote_Odr<<=1;
                Remote_Odr+=RODATA;
                Remote_Cnt=0; //°′&#188;ü′&#206;êy&#199;&#229;á&#227;
            }   
        }
    }                      
        EXTI_ClearITPendingBit(EXTI_Line1);  //&#199;&#229;3yEXTI1&#207;&#223;&#194;·1ò&#198;e&#206;&#187;         
}  
//′|àíoìía&#188;ü&#197;ì
//·μ&#187;&#216;&#207;àó|μ&#196;&#188;ü&#214;μ
u8 Remote_Process(void)
{               
    u8 t1,t2;   
    t1=Remote_Odr>>24; //μ&#195;μ&#189;μ&#216;&#214;·&#194;&#235;
    t2=(Remote_Odr>>16)&0xff;//μ&#195;μ&#189;μ&#216;&#214;··′&#194;&#235;
          Remote_Rdy=0;//&#199;&#229;3y±ê&#188;&#199;                      
    if(t1==(u8)~t2&&t1==REMOTE_ID)//&#188;ì&#209;éò£&#191;&#216;ê&#182;±e&#194;&#235;(ID)&#188;°μ&#216;&#214;·
    {  
                         
        t1=Remote_Odr>>8;
        t2=Remote_Odr;        
        if(t1==(u8)~t2)return t1; //′|àí&#188;ü&#214;μ  
    }     
    return 0;
}
u8 keymatch(void)
{   u8 irdata;
          irdata=Remote_Process();
    switch(irdata)
        {
          case 48: return(1);
          case 24: return(2);
          case 122: return(3);
          case 16: return(4);
          case 56: return(5);
          case 90: return(6);
          case 66: return(7);
          case 74: return(8);
          case 82: return(9);
          case 104: return(17);
          case 194: return(11);
          case 34: return(12);
          case 226: return(13);
          case 224: return(14);
          case 168: return(15);
          case 144:  return(16);
          case 162: return(0);
          case 152: return(18);
          case 176: return(19);
          case 2: return(20);
          default:return(99);
        }
}

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

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-4-29
在线时间
13 小时
 楼主| 发表于 2019-4-29 09:56:38 | 显示全部楼层
这是中断
void TIM3_Int_Init(u16 arr,u16 psc)
{

  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
       
        TIM_TimeBaseStructure.TIM_Period = arr;        
        TIM_TimeBaseStructure.TIM_Prescaler =psc;
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

        TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );
        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);  


        TIM_Cmd(TIM3, ENABLE);                                   
}
回复 支持 反对

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2019-4-29 10:51:19 | 显示全部楼层
示波器看看遥控器按下的波形有没有失真,硬件没问题了,再去程序中找问题。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-4-29
在线时间
13 小时
 楼主| 发表于 2019-4-29 11:22:42 | 显示全部楼层
HXYDJ 发表于 2019-4-29 10:51
示波器看看遥控器按下的波形有没有失真,硬件没问题了,再去程序中找问题。

波形没有失真,可能是数据头没接到?
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-4-29
在线时间
13 小时
 楼主| 发表于 2019-4-29 14:23:48 | 显示全部楼层
//void TIM3_IRQHandler(void)   //TIM3&#214;D&#182;&#207;
//{
//        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  
//                {
//                TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );   
////                LED1=!LED1;
//                }
//}

这是被注释的部分,不知道有没有影响
回复 支持 反对

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2019-4-29 16:20:57 | 显示全部楼层
fumanchu 发表于 2019-4-29 11:22
波形没有失真,可能是数据头没接到?

程序可以参考原子的遥控器相关代码
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-4-29
在线时间
13 小时
 楼主| 发表于 2019-4-30 08:14:32 | 显示全部楼层
HXYDJ 发表于 2019-4-29 16:20
程序可以参考原子的遥控器相关代码

就是参考原子改的,经常在输入密码时跳出来,而且有时候需要按键两三下才有反应
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 12:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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