|
RT:我想用stm8L的 外部时钟源模式2 进行计频,我调用了tim2的库函数,TIM2_CH1通道(PB0)计数,结果一直为零。
程序:
void TIM2_CH1_ETR_Init(void)
{
TIM2_DeInit(); //复位TIME2
CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,ENABLE); //开启TIME2的时钟中断
FLASH_Unlock(FLASH_MemType_Data);
FLASH_ProgramOptionByte(0x5253,0x20);
FLASH_Lock(FLASH_MemType_Data);
GPIO_Init(GPIOB,GPIO_Pin_0,GPIO_Mode_In_PU_No_IT);
TIM2_TimeBaseInit(TIM2_Prescaler_1,TIM2_CounterMode_Up,65535);//不分频 ,计数 65535
TIM2_ETRClockMode2Config(TIM2_ExtTRGPSC_OFF,TIM2_ExtTRGPolarity_NonInverted,0);//没有外部触发预分频器,高电平或上升沿有效,使能外部时钟模式2
TIM2_SelectInputTrigger(TIM2_TRGSelection_ETRF); //选择外部触发
TIM2_ARRPreloadConfig(ENABLE);
TIM2_ClearFlag(TIM2_FLAG_Update);
TIM2_ITConfig(TIM2_IT_Update,ENABLE); //打开中断
TIM2_SetCounter(0);
TIM2_Cmd(ENABLE);
}
@far @interrupt void TIM2_IRQHandler(void){
if (TIM2_GetITStatus(TIM2_IT_Update) != RESET) {
TIM2_ClearITPendingBit(TIM2_IT_Update); Cnt_a++;
}}
然后在定时器1里面计算:
@far @interrupt void TIMER1_IRQHandler(void){
if(TIM1_GetITStatus(TIM1_IT_Update)== SET) //溢出中断 {
TIM1_ClearITPendingBit(TIM1_IT_Update); TIM1_Cmd(DISABLE);
TIM2_Cmd(DISABLE); Frequency=Cnt_a*65535 + TIM2_GetCounter();
TIM2_SetCounter(0); Cnt_a = 0;
TIM1_Cmd(ENABLE); TIM2_Cmd(ENABLE);
printf("the period is : %d\n",Frequency); }
} |
|