定时器外部时钟

一、相较于内部时钟中断改动:

1.Timer.c

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);			//开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);						//将PA0引脚初始化为上拉输入/*外部时钟配置*/
//外部时钟,模式2,第二个参数是分频,第三个是极性(反向,不反向)第四个是滤波器(f采样n个点,若n个点都一样,有效输出)TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0x0F);//选择外部时钟模式2,时钟从TIM_ETR引脚输入//注意TIM2的ETR引脚固定为PA0,无法随意更改//最后一个滤波器参数加到最大0x0F,可滤除时钟信号抖动/*** 函    数:返回定时器CNT的值* 参    数:无* 返 回 值:定时器CNT的值,范围:0~65535*/
uint16_t Timer_GetCounter(void)
{return TIM_GetCounter(TIM2);	//返回定时器TIM2的CNT
}


  

2.main.c

OLED_ShowString(2, 1, "CNT:");			//2行1列显示字符串CNT:while (1){OLED_ShowNum(2, 5, Timer_GetCounter(), 5);		//不断刷新显示CNT的值}

 二、现象:

每次遮挡CNT+1,超过9,Num+1