第一次使时STM8看了参考手册但看得一头雾水,因此还是问一问来得直接,
问题一;
使用TIM2或3的定时器输入捕获测量一个方波的高电平宽度,我现在搞得比较复杂,我的方法是:先捕获上升沿中断后再改为捕获下降沿,想看看有没有其它方法,具体代码如下:
(IAR,HSE-8M)
void TIM2SetupInitCCAPModel()//将TIM2设置为输入捕获模式
{ TIM2_PrescalerConfig(TIM2_PRESCALER_8,TIM2_PSCRELOADMODE_IMMEDIATE );
TIM2_ICInit(TIM2_CHANNEL_1, TIM2_ICPOLARITY_RISING ,//在上升沿开始计数,中断后在改为下降沿开始捕获
TIM2_ICSELECTION_DIRECTTI, TIM2_ICPSC_DIV1, 0x00); //TIM2_ICPSC_DIV1这里这个分频是输入到PD4信号分频
TIM2_ITConfig(TIM2_IT_CC1, ENABLE);
TIM2_Cmd(ENABLE);
TIM2_ClearFlag(TIM2_FLAG_CC1);
}
#pragma vector = ITC_IRQ_TIM2_CAPCOM + 2 //这里有个小小疑问为什么这里要+2呢?
__interrupt void CCAPOnTIM2(void)
{
if(0 == ICValue1)
{
ICValue1 = TIM2_GetCapture1();
TIM2_ClearFlag(TIM2_FLAG_CC1);
TIM2_ICInit(TIM2_CHANNEL_1, TIM2_ICPOLARITY_FALLING, TIM2_ICSELECTION_DIRECTTI, TIM2_ICPSC_DIV1, 0x00);
}
else
{
ICValue2 = TIM2_GetCapture1();
TIM2_ClearFlag(TIM2_FLAG_CC1);
// sprintf(strBuffer,"V1:%u, V2:%u, %uUs\r\n",ICValue1,ICValue2,ICValue2-ICValue1);
// SendStr2Uart1(strBuffer);
TIM2_ICInit(TIM2_CHANNEL_1, TIM2_ICPOLARITY_RISING, TIM2_ICSELECTION_DIRECTTI, TIM2_ICPSC_DIV1, 0x00);
ICValue1 = 0;
ICValue2 = 0;
}
}
问题二;
怎么设置把TIM为计数器即计算外部方波的个数?
问题三;
TIM2->CCR1H与 TIM2->CCR1L;里所捕获到的值怎么才能让它归零?
谢谢! |