学习江科大STM32教程,记录学习理解,方便复习。
一、配置流程
图1 流程图
1.配置时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
开启通用定时器2,其挂载在APB1上
2.选择时钟源
TIM_InternalClockConfig(TIM2); //内部时钟驱动
【注】①本文使用TIM的定时中断功能,所以用内部时钟源
②默认为内部时钟,可以不写这行代码
3.配置时基单元
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //定义结构体,下面五行配置其成员
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //1分频(滤波频率)
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数器向上计数
TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1; //ARR自动重装器的值(<65535)
TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1; //PSC预分频器的值(<65535)
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; //重复计数器的值,高级定时器才有,给0
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
每经过1s的定时,产生一次更新中断
【计算方法】:(已知上文设置:预分频器PSC=7200-1,自动重装值ARR=10000-1)
CK_CNT_OV = CK_PSC / (PSC + 1) / (ARR + 1)
【过程】:①72MHz的初始时钟频率进来,先分频,72 000 000➗7200 = 10000Hz
(即此时每秒钟震动10000次,也就是每秒计数10000次)
②每秒计数10000次,那计数10000次,不就是1s了吗?
从公式上体现出来的就是,再➗10000 = 1 (s)