• stm32 红外


    2 1

    相关文章:http://blog.csdn.net/zhangxuechao_/article/details/75039906

    举例

    u8 ir_tick() //记录高电平时间
    {
        u8 i = 0;
    
        while(ir_in == 1)
        {
            i++;
            if(i >= 250)
            {
                break;
            }
            delay_us(20); //一次循环20um
        }
    
        return i;
    }
    
    void EXTI15_10_IRQHandler()
    {
        u8 i = 0;
        u32 ir = 0;
        u8 ok = 0;
        u8 tick;
        u8 data;
    
        if(EXTI_GetITStatus(EXTI_Line15) == SET)
        {
            led1 = ~led1;
    
            while(1)
            {
                if(ir_in == 1)
                {           
                    tick = ir_tick();
    
                    if(tick >= 250) //错误码
                    {
                        break;
                    }
                    else if((tick >= 200) && (tick < 250)) //起始码
                    {
                        ok = 1;
                        continue;
                    }   
                    else if((tick >= 25) && (tick <= 40)) //0
                    {
                        data = 0;
                    }               
                    else if((tick >= 75) && (tick <= 90)) //1
                    {
                        data = 1;
                    }
                    else
                    {
                        break;
                    }
    
                    if(ok == 1)
                    {
                        ir <<= 1;
                        ir |= data;
                    }
    
                    if(i++ >= 32)
                    {
                        break;
                    }
                }           
            }
    
            if(ok == 1)
            {
                printf("ir %08x
    ", ir);
            }
        }   
    
        EXTI_ClearITPendingBit(EXTI_Line15);
    }
    
    void IR_init()
    {
        GPIO_InitTypeDef gpio = 
        {
            GPIO_Pin_15,
            GPIO_Speed_50MHz,
            GPIO_Mode_IPU
        };  
    
        EXTI_InitTypeDef exti = 
        {
            EXTI_Line15,
            EXTI_Mode_Interrupt,
            EXTI_Trigger_Falling,
            ENABLE
        };
    
        NVIC_InitTypeDef nvic = 
        {
            EXTI15_10_IRQn,
            2,
            2,
            ENABLE
        };
    
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG | RCC_APB2Periph_AFIO, ENABLE);
    
        GPIO_Init(GPIOG, &gpio);
    
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOG, GPIO_PinSource15);
    
        NVIC_Init(&nvic);
    
        EXTI_Init(&exti);
    }
  • 相关阅读:
    java
    java
    android-studio于java相关
    转-Cannot refer to an instance field arg while explicitly invoking a constructor
    java
    java
    hdoj 1251 统计难题(字典树)
    hdoj 3555 Bomb(DFA+dp)
    hdoj 1247 Hat’s Words(字典树)
    poj 1204 Word Puzzles(字典树)
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709549.html
Copyright © 2020-2023  润新知