第一次使时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;里所捕获到的值怎么才能让它归零?
谢谢!
|