从0开始的STM32HAL库学习6

外部时钟源选择

配置环境

选择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);

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值