stm32 红外

来源:互联网 发布:音乐合成软件 编辑:程序博客网 时间:2024/05/16 01:35

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\n", 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);}