一、相较于内部时钟中断改动:
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