//对外部脉冲计数
// GPIOA0接1按键,按下为高电平,复用到tiM8的ETR(外部计数脉冲输入端)
// 定时器8对GPIOA0输入的脉冲计数
//////////////////////////////////////////////////////////////////////////////////
//TIM8_ETR 计数初始化
void TIM8_ETR_Counter_Init(u16 arr,u16 psc )
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB2PeriphclockCmd(RCC_APB2Periph_TIM8,ENABLE);
//TIM8时钟使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
//使能PORTA时钟
// GPIOA0 工作模式为复用
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //GPIOA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
//速度100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //下拉
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA0
GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM8);
//PA0复用位定时器8
//初始化定时器TIM8
TIM_TimeBaseStructure.TIM_Prescaler=psc; //定时器分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
//向上计数模式
TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载值
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM8,&TIM_TimeBaseStructure);
// 外部时钟配置初始化
TIM_ITRxExternalClockConfig(TIM8,TIM_TS_ETRF);
TIM_ETRClockMode2Config(TIM8,TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_Inverted,0x00);
TIM_SetCounter(TIM8, 0);
TIM_ITConfig(TIM8,TIM_IT_Update,DISABLE);
//不允许更新中断 ,直接读计数值
TIM_Cmd(TIM8, ENABLE); //使能TIM8
}
在主程序,可以通过函数读计数值:TIM_GetCounter( TIM8); //读计数值
|