景点介绍网站开发设计wordpress 商业
外部时钟源选择
配置环境
选择TIM2 
 

配置红色框图中的各种配置
时钟源选择外部时钟 2
 1.  预分频器 Prescaler ,下面填0,不分频  
 
 2.  计数模式 CounterModer ,计数模式选择为向上计数  
 
 3.  自动重装寄存器 CouterPeriod ,自动重装计数器填为 10 ,计数到 10 后清空并出发中断  
 
 4.  滤波器的频率分频 InternalClockDivision  
 
 5. auto-reload preload :不使用影子寄存器 
 
 
打开NVIC
 
 
这部分采用默认的即可
 1. ClockFilter: 用来控制滤波的采样频率和采集点  
 
 2. Clock Polarity: 表示低电平或下降沿有效  
 
 3. ClockPrescaler: 表示输入的信号不进行分频 
 
 
 
初始化TIM2
在main函数中
  HAL_TIM_Base_Start_IT(&htim2); 
重写回调函数
uint16_t hhRetCount=0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim==&htim2){hhRetCount+=1;}
} 
显示定时值与CNT
OLED_ShowString(1, 1, "count:");
OLED_ShowString(2, 1, "CNT:");
while (1)
{
OLED_ShowNum(1, 7, hhRetCount,5);
OLED_ShowNum(2,5, __HAL_TIM_GET_COUNTER(&htim2),5);
} 
显示效果

问题与解决
在程序启动的时候,外部还没有给信号,就进入了一次中断使得count的次数变成了1,解决办法和keil中的一样。在启动中断前清空一次标志位
__HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_UPDATE); 
