初级会员

- 积分
- 57
- 金钱
- 57
- 注册时间
- 2014-7-16
- 在线时间
- 0 小时
|
5金钱
u16 key_value[100] = {0}; //??·?°??ü?????±??
u8 key_number = 0; //??????????????????????
u8 key_flag = 0; //????????????±ê???? 1?????? 0????????
//u8 get_value_flag = 1; //??·???????????±ê????·???key_value[0], key_value[0] = 1,±í??????????????·??ò±í????????????????
u8 key_receive_finish = 0; //?ì???????ê??±ê??
void Infrared_Study_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM_ICInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //????PORTB?±??
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE); //TIM5 ?±??????
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //PA1 ????
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //????????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_1); //??????GPIOA1
TIM_TimeBaseStructure.TIM_Period = 10000; //?è?¨?????÷×?????×°?? ×??ó10ms????
TIM_TimeBaseStructure.TIM_Prescaler =71; //?¤·????÷,10K??????????,1us??1.
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //?è???±??·???:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM?ò??????????
TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); //?ù?????¨????????????TIMx
TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; // ?????????? IC2??????TI5??
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling; //±???????
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //????????·???,??·???
TIM_ICInitStructure.TIM_ICFilter = 0x03;//IC4F=0011 ???????????¨?÷ 8???¨?±?÷?±?????????¨
TIM_ICInit(TIM5, &TIM_ICInitStructure);//???????¨?±?÷?????????¨??
TIM_ITConfig( TIM5,TIM_IT_CC2|TIM_IT_Update,ENABLE);//???í?ü?????? ,???íCC2IE????????
NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn; //TIM5????
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //??????????0??
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //????????3??
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ?¨??±?????
NVIC_Init(&NVIC_InitStructure); //?ù??NVIC_InitStruct?????¨???????????????èNVIC?????÷
TIM_Cmd(TIM5,ENABLE ); //?????¨?±?÷5
}
u8 TIM5CH2_CAPTURE_STA=0; //????????×???
u16 TIM5CH2_CAPTURE_VAL; //??????????
//?¨?±?÷5????·??????ò
void TIM5_IRQHandler(void)
{
u16 Dval;
if(TIM_GetITStatus(TIM5,TIM_IT_Update)!=RESET)
{
key_receive_finish = 1;
}
if(TIM_GetITStatus(TIM5,TIM_IT_CC2)!=RESET)
{
if(RDATA)//??????????
{
if(key_flag==1)
{
Dval=TIM_GetCapture2(TIM5);//????CCR2????????CC12F±ê????
//if((Dval>300&&Dval<800) || (Dval>1400&&Dval<1800) || (Dval>4200&&Dval<4700) || (Dval>8500&&Dval<10000))
key_value[key_number++] = Dval;
}
TIM_OC2PolarityConfig(TIM5,TIM_ICPolarity_Falling);
TIM_SetCounter(TIM5,0); //?????¨?±?÷??
}else//??????????
{
if(key_flag==1)
{
Dval=TIM_GetCapture2(TIM5);//????CCR2????????CC12F±ê????
//if((Dval>300&&Dval<800) || (Dval>1400&&Dval<1800) || (Dval>4200&&Dval<4700) || (Dval>8500&&Dval<10000))
key_value[key_number++] = Dval;
}
TIM_OC2PolarityConfig(TIM5,TIM_ICPolarity_Rising);
TIM_SetCounter(TIM5,0); //?????¨?±?÷??
key_flag = 1;
}
}
TIM_ClearFlag(TIM5,TIM_IT_Update|TIM_IT_CC2);
}
这时把捕获的数据通过串口打印出来的:
24 CB 10 75 03 8C 00 C5 03 E5 00 69 04 00 00 7D 03 B6 00 B1 03 DA 00 8D 03 6B 01 20 0C 29 05 83 03 99 05 51 03 97 05 3B 03 9C 05 37 03 A4 05 52 03 2E 05 AA 02 9F 06 4D 02 5C 06 8F 02 37 02 12 02 4D 02 33 02 23 06 B0 02 3C 06 AE 02 26 06 AA 02 22 02 4F 02 25 02 29 02 4C 02 2F 02 28 06 AA 02 42 06 A9 02 27 02 29 02 46 02 32 02 28 02 4A 02 26 06 AD 02 23 06 AF 02 3A 06 B0 02 25
蓝色字体为引导码,后面的黑色部分数据不对,最后的红外数据是对的,还有就是有时候接收到的数据的个数不对
|
|