外部时钟源选择
配置环境
选择TIM2 ![](https://i-blog.csdnimg.cn/direct/d6dcfd7ceb1e459eb928bd4fdc58a06a.png)
配置红色框图中的各种配置
时钟源选择外部时钟 2
1.
预分频器
Prescaler
,下面填0,不分频
2.
计数模式
CounterModer
,计数模式选择为向上计数
3.
自动重装寄存器
CouterPeriod
,自动重装计数器填为
10
,计数到
10
后清空并出发中断
4.
滤波器的频率分频
InternalClockDivision
5. auto-reload preload
:不使用影子寄存器
打开NVIC
![](https://i-blog.csdnimg.cn/direct/0cfa3b5d11e941c08efce54b278559f9.png)
![](https://i-blog.csdnimg.cn/direct/7cfbb2eb8822487b96decf759478863a.png)
这部分采用默认的即可
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);