STM32嵌入式开发之CubeMx定时器基本定时功能详解

STM32嵌入式开发之CubeMx定时器基本定时功能详解

图1 定时器内部架构图

图2 Cubemx 可视化定时器配置

工作流程:

内部或外部驱动时钟CK_PSC驱动预分频器PSC计数分频,产生CK_CNT驱动计数器CNT计数。自动重装载寄存器在发生更新事件时将值传到计数器CNT中作为初始计数值,REP寄存器则控制CNT溢出次数,当重复次数计数器从REP寄存器的数值递减至0是计数器CNT停止计数。

1. 根据上述CubeMx工具自动产生如下代码,定时周期s = (Period + 1) * (Prscaler +1) /(Tclk定时器时钟频率Hz) = (99+1)*(63+1)/64MHz=100*10^(-6)秒=100us

/* USER CODE BEGIN TIM1_Init 1 */

/* USER CODE END TIM1_Init 1 */ htim1.Instance = TIM1; // 选择所使用的的定时器 htim1.Init.Prescaler = 63; // 对定时器输入的时钟源进行分频的分频系数,对应于图1中的1,例如输入时钟源时钟频率为64MHz,此处分频系数为63,则定时器时钟=64MHz/64 = 1MHz htim1.Init.CounterMode = TIM_COUNTERMODE_UP; // 定时器计数方式选择为从下往上 htim1.Init.Period = 99; // 计时周期=定时器时钟*(period+1) 自动重装载值(默认值) htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim1.Init.RepetitionCounter = 0; // 代表计数值满溢出几次才进入中断,对应于图1中的3,RepetitionCounter = 0则代表一个定时周期便产生中断;RepetitionCounter =1 代表需要两个定时周期才产生中断 htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; // 关闭自动重载功能 if (HAL_TIM_OC_Init(&htim1) != HAL_OK) { Error_Handler(); }

2.常用术语

2.1 计数模式--对应于htim1.Init.CounterMode

向上计数模式:

在向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR计数器的内容),然后重新从0开始计数并且产生一个计数器溢出事件。

向下计数模式:

在向下模式中,计数器从自动装入的值(TIMx_ARR计数器的值)开始向下计数到0,然后从自动装入的值重新开始并且产生一个计数器向下溢出事件。

中央对齐模式:

在中央对齐模式,计数器从0开始计数到自动加载的值(TIMx_ARR寄存器)-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器下溢事件;然后再从0开始重新计数。

2.2 重复计数器功能

如果使用了重复计数器功能,在向上计数达到设置的重复计数次数(TIMx_RCR)时,产生更新事件(UEV);否则每次计数器溢出时才产生更新事件。对应于htim1.Init.RepetitionCounter

相关推荐

迈凯伦车型报价及图片
365tiyu

迈凯伦车型报价及图片

⌛ 09-08 👁️ 4850
揭秘Ubuntu系统重启频率:多久一次更合理?
365有没有反水的

揭秘Ubuntu系统重启频率:多久一次更合理?

⌛ 08-06 👁️ 5387
八字喜金是什么意思 – 八字喜金用神分类