高级会员

- 积分
- 567
- 金钱
- 567
- 注册时间
- 2017-7-27
- 在线时间
- 99 小时
|
5金钱
我的这个程序是按照原子哥的例程改的,但为啥数据不对呢?请教原子哥和各位大神。
初始化:
void TIM5_Cap_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE); //ê1ÄüTIM5ê±Öó
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //ê1ÄüGPIOAê±Öó
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; //PA0 Çå3y֮ǰéèÖÃ
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; //PA0 êäèë
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_ResetBits(GPIOA,GPIO_Pin_0); //PA0 ÏÂà-
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; //ÏÂà-
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_ResetBits(GPIOA,GPIO_Pin_1); ////PA1
//3õê¼»ˉ¶¨ê±Æ÷5 TIM5
TIM_TimeBaseStructure.TIM_Period=arr; //é趨¼ÆêyÆ÷×Ô¶ˉ֨װÖμ
TIM_TimeBaseStructure.TIM_Prescaler=psc; //Ô¤·ÖÆμÆ÷
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //TIMÏòéϼÆêyÄ£ê½
TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure); //¸ù¾YTIM_TimeBaseInitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMxμÄê±¼ä»ùêyμ¥λ
//3õê¼»ˉTIM5êäèë2¶»ñ2Îêy
TIM5_ICInitStructure.TIM_Channel=TIM_Channel_1; //CC1S=01 Ñ¡Ôñêäèë¶Ë IC1ó3éäμ½TI1éÏ
TIM5_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising; //éÏéyÑØ2¶»ñ/////
TIM5_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI; //ó3éäμ½TI1éÏ
TIM5_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1; //ÅäÖÃêäèë·ÖÆμ,2»·ÖÆμ
TIM5_ICInitStructure.TIM_ICFilter=0x00;//IC1F=0000 ÅäÖÃêäèëÂË2¨Æ÷ 2»ÂË2¨
TIM_ICInit(TIM5,&TIM5_ICInitStructure);
TIM5_ICInitStructure.TIM_Channel=TIM_Channel_2;
TIM5->CCMR1|=1<<8; //CC2通道被配置为输入,IC2映射在TI2上;
TIM5->CCMR1|=0<<12 ;//IC2F=0000,无滤波
TIM5->CCMR1|=0<<10; //不分频
TIM5->CCER|=1<<4; //捕获2使能
TIM5_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Falling;//CH2 ϽμÑØ2¶»ñ
TIM_ICInit(TIM5,&TIM5_ICInitStructure);
//ÖD¶Ï·Ö×é3õê¼»ˉ
NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn; //TIM5ÖD¶Ï
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2; //ÏèÕ¼óÅÏè¼¶2¼¶
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //′óóÅÏè¼¶0¼¶
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //IRQí¨μà±»ê1Äü
NVIC_Init(&NVIC_InitStructure); //¸ù¾YNVIC_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèNVIC¼Ä′æÆ÷
//TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1|TIM_IT_CC2,ENABLE);//ÔêDí¸üDÂÖD¶Ï ,ÔêDíCC1IE,CC2IE2¶»ñÖD¶Ï
TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC2,ENABLE);
TIM_Cmd(TIM5,ENABLE); //ê1Äü¶¨ê±Æ÷5
}
中断:(这里屏蔽了CH1的)
//¶¨ê±Æ÷5ÖD¶Ï·tÎñ3ìDò
void TIM5_IRQHandler(void)
{
//CH1
/*if((TIM5CH1_CAPTURE_STA&0X80)==0)//»1Î′3é1|2¶»ñ
{
if(TIM_GetITStatus(TIM5, TIM_IT_Update)!=RESET)
{
if(TIM5CH1_CAPTURE_STA&0X40)//òѾ-2¶»ñμ½¸ßμçÆ½áË
{
if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F)//¸ßμçÆ½ì«3¤áË
{
TIM5CH1_CAPTURE_STA|=0X80;//±ê¼Ç3é1|2¶»ñáËò»′θßμçÆ½
TIM5CH1_CAPTURE_VAL=0XFFFF;
}else TIM5CH1_CAPTURE_STA++;
}
}
if(TIM_GetITStatus(TIM5,TIM_IT_CC1)!=RESET)//2¶»ñ1·¢éú2¶»ñê¼t
{
if(TIM5CH1_CAPTURE_STA&0x40)// //2¶»ñμ½ò»¸öϽμÑØ
{
TIM5CH1_CAPTURE_STA|=0X80; //±ê¼Ç3é1|2¶»ñμ½ò»′θßμçÆ½Âö¿í
TIM5CH1_CAPTURE_VAL=TIM5->CCR1; //2¶»ñÖμ
TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising); //CC1P=0 éèÖÃÎaéÏéyÑØ2¶»ñ
}
else //»1Î′¿aê¼,μúò»′Î2¶»ñéÏéyÑØ
{
TIM5CH1_CAPTURE_STA=0; //Çå¿Õ
TIM5CH1_CAPTURE_VAL=0;
TIM5->CNT=0;
TIM5CH1_CAPTURE_STA|=0X40; //±ê¼Ç2¶»ñμ½áËéÏéyÑØ
TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling); //CC1P=1 éèÖÃÎaϽμÑØ2¶»ñ
}
}
}*/
//----------CH2:
if((TIM5CH2_CAPTURE_STA&0X80)==0)//»1Î′3é1|2¶»ñ
{
if(TIM_GetITStatus(TIM5,TIM_IT_Update)!=RESET)
{
if(TIM5CH2_CAPTURE_STA&0X40)//òѾ-2¶»ñμ½ μíμçÆ½áË
{
if((TIM5CH2_CAPTURE_STA&0X3F)==0X3F)//μíμçÆ½ì«3¤áË
{
TIM5CH2_CAPTURE_STA|=0X80;//±ê¼Ç3é1|2¶»ñáËò»′ÎdiμçÆ½
TIM5CH2_CAPTURE_VAL=0XFFFF;
}else TIM5CH2_CAPTURE_STA++;
}
}
if(TIM_GetITStatus(TIM5,TIM_IT_CC2)!=RESET)//2¶»ñ2·¢éú2¶»ñê¼t
{
if((TIM5CH1_CAPTURE_STA&0x40)==0)// //2¶»ñμ½ò»¸ö éÏéyÑØ
{
LED1=1;
TIM5CH2_CAPTURE_STA|=0X80; //±ê¼Ç3é1|2¶»ñμ½ò»′ÎdiμçÆ½Âö¿í
// TIM5CH2_CAPTURE_VAL=TIM5->CCR2-TIM5CH1_CAPTURE_VAL; //2¶»ñdiμçÆ½Öμ
TIM5CH2_CAPTURE_VAL=TIM5->CCR2;
TIM_OC2PolarityConfig(TIM5,TIM_ICPolarity_Falling); //éèÖÃÎaϽμÑØ2¶»ñ
}
else //»1Î′¿aê¼,μúò»′Î2¶»ñ ϽμÑØ
{
LED1=0;
TIM5CH2_CAPTURE_STA=0; //Çå¿Õ
TIM5CH2_CAPTURE_VAL=0;
TIM5->CNT=0;
TIM5CH2_CAPTURE_STA|=0X40; //±ê¼Ç2¶»ñμ½áËϽμÑØ
TIM_OC2PolarityConfig(TIM5,TIM_ICPolarity_Rising); //éèÖÃÎaéÏéyÑØ2¶»ñ
}
}
}
//TIM_ClearITPendingBit(TIM5,TIM_IT_CC1|TIM_IT_Update|TIM_IT_CC2); //Çå3yÖD¶Ï±ê־λ
TIM_ClearITPendingBit(TIM5,TIM_IT_Update|TIM_IT_CC2); //Çå3yÖD¶Ï±ê־λ
}
////////////
主函数里:
while(1)
{
delay_ms(300);
/*if(TIM5CH1_CAPTURE_STA&0X80)//3é1|2¶»ñμ½áËò»′ÎéÏéyÑØ
{
high=TIM5CH1_CAPTURE_STA&0X3F;//μíáùλÎaòç3ö′Îêy
high*=65536;//òç3öê±¼ä×üoí//ò»′Îòç3öê±¼äÎa65536us,óDTIM5CH1_CAPTURE_STA&0X3F′Îòç3ö
high+=TIM5CH1_CAPTURE_VAL;//μÃμ½×üμĸßμçÆ½ê±¼ä
printf("HIGH:%.3Lf us\r\n",high);//′òó¡×üμĸßμçÆ½ê±¼ä
TIM5CH1_CAPTURE_STA=0;//¿aÆôÏÂò»′Î2¶»ñ
}*/
if(TIM5CH2_CAPTURE_STA&0X80)//3é1|2¶»ñμ½áËò»′ÎéÏéyÑØ
{
printf("%d",TIM5CH2_CAPTURE_VAL);
low=TIM5CH2_CAPTURE_STA&0X3F;//μíáùλÎaòç3ö′Îêy
low*=65536;//òç3öê±¼ä×üoí//ò»′Îòç3öê±¼äÎa65536us,óDTIM5CH1_CAPTURE_STA&0X3F′Îòç3ö
low+=TIM5CH2_CAPTURE_VAL;//μÃμ½×üμĸßμçÆ½ê±¼ä
printf("--LOW:%.3Lf us\r\n",low);//′òó¡×üμĸßμçÆ½ê±¼ä
TIM5CH2_CAPTURE_STA=0;//¿aÆôÏÂò»′Î2¶»ñ
}
}
|
|