外部时钟源选择
配置环境
选择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);