最近才发现原来我把定时器里的配置参数代表的意义给搞混了,这里记录一下,防止以后自己忘记。
以建立一个定时1mS定时器为例:
1、先打开定时器

2、配置好时钟

3、配置定时器设置


重点来了,以前在这里我一直以为这里配置的就是时间,然后在调频率的时候,一直不对劲,知道查阅了硬石的资料才发现,这里配置的是进入定时器中断的频率,然后要定的时间要跟据这个频率来定时的。

由这个图可见,这里配置的是定时器产生中断的频率,然后再跟据频率与时间的关系推出定时的时间。
所以定时器频率为 f = 72M / Prescaler / Period = 72000 000 / 72 /1000 = 1000Hz;
定时时间T = 1 / f 则: 1s / 1000Hz = 1000 000us / 1000Hz = 1000us =1ms。
这样就可以定时1ms了啦,如果要做PWM频率调频,就直接改 pre 与 per 算出 f 就可以了。
具体公式如下图(上面的计算我是为了方便理解把公式逆运算了一次):

最后使用定时器中断跟关闭定时器中断以及回调函数即可, 使用中断的时候注意要先开启中断
HAL_TIM_Base_Start_IT(&htim1); //使用定时器的时候调用这个函数启动
HAL_TIM_Base_Stop_IT(&htim1); //停止定时器的时候调用这个函数关闭
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM1)
{
//编写回调逻辑,即定时器1定时1MS后的逻辑
}
}
补充:最后记得生成STM32Cubemx文件时打开定时器中断,不然进不了回调函数,一般的话习惯用TIM3做定时器
关键字:STM32 Cubemx 配置定时器
引用地址:
STM32 Cubemx 配置定时器定时1mS
推荐阅读最新更新时间:2026-03-25 08:36
STM32CubeMx配置定时器的编码器模式
上次文章写了编码器是如何工作的,今天就来用STM32F103C8T6的TIM3的通道1跟通道2编写一个编码器识别程序。 编程思路: A相:TIM3_CH1 B相:TIM3_CH2 SWITCH:PB5(外部中断的方式) 实现效果: 编码器顺时针旋转编码器计数值 +1 编码器逆时针旋转编码器计数值 -1 按下SWITCH编码器计数值值清 0 话不多说,上教程! 1.配置时钟 选择外部高速时钟源HSE 2.配置SWITCH管脚为外部中断模式(默认上拉) 选择中断模式触发下降沿有效 默认是上拉输入 添加用户标签为SWITCH 使能NVIC配置 3.配置定时器管脚为编码器模式 选择编码器模式 分频值
[单片机]
STM32CUBEMX配置定时器门控模式
打开keil5的debug,选中view- system viewer- Tim- Tim3,然后开始按F5运行。 当PA6接高电平时,开始计数,cnt开始自增。 当PA6接低电平时,停止计数,cnt停止自增。
[单片机]
使用Stm32Cubemx配置定时器正交编码模式详解
这篇文章也是本人做完一个项目后抱着想记录点东西巩固下知识同时又想给后来的技术同伴一点参考的想法写下来的,和本人之前有关中颖芯片的博文意图是一致的。看完本篇文章可以了解stm32芯片如何配置定时器正交编码模式的同时对cubemx也会有一定的了解。这款工具很好用,很方便,希望所有用st芯片的伙伴们都能掌握它的用法,使用一种工具很快能上手,主要是大家要了解标准库和HAL库之间的一些微小机制区别就很容易了,这篇文章不打算讲这些,要不跑题了,有空的话专门写一篇文章,不过大家也可以在网上找到很多资料,废话不多说了下一段进入主题。 这里假设大家都下了cubemx软件,对软件具有一定的熟悉度。用stm32f030系列来为例吧。
[单片机]
STM32定时器主从模式配置详解及解析
下面这两行代码是配置STM32定时器主从模式的关键设置 代码功能解析 TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2); // 选择从模式输出的触发源 TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset); // 选择从模式 1. TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2) 作用:设置定时器TIM3的触发输入源 参数说明: TIM3:目标定时器 TIM_TS_TI2FP2:选择定时器输入2的滤波后信号(TI2FP2)作为触发源 可选触发源: TIM_TS_ITR0~TIM_TS_ITR3:内部
[单片机]
STM32定时器中断配置
1.使能时钟 定时器时钟 2.配置定时器结构体、使能 3.开启定时器中断,配置中断结构体 配置例子 #include tim.h #include stm32f10x.h void tim_config(void) { TIM_TimeBaseInitTypeDef TIMinitStructure;//定时器结构体 NVIC_InitTypeDef NVICinitStructure;//内核中断结构体 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//中断优先组函数 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM
[单片机]
【STM32平衡小车】STM32定时器配置为编码器模式
一、编码器原理 如果两个信号相位差为90度,则这两个信号称为正交。由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向、根据每个信号脉冲数量的多少及整个编码轮的周长就可以算出当前行走的距离、如果再加上定时器的话还可以计算出速度。 二、为什么要用编码器 从上图可以看出,由于TI1,TI2一前一后有个90度的相位差,所以当出现这个相位差时就表示轮子旋转了一个角度。但有人会问了:既然都是脉冲,为什么不用普通IO中断?实际上如果是轮子一直正常旋转当然没有问题。仔细观察上图,如果出现了毛刺呢?这就是需要我们在软件中编写算法进行改正。于是,我们就会想到如果有个硬件能够处理这种情况那不是挺好吗? 对应的硬件的编码器就来
[单片机]
STM32 定时器1配置
//通用定时器中断初始化 //这里时钟选择为APB1的2倍,而APB1为36M //arr:自动重装值。 //psc:时钟预分频数 //这里使用的是定时器3! void TIM1_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //时钟使能 TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的
[单片机]
STM32 HAL库学习系列第5篇 定时器TIM---编码器接口模式配置
cube基本配置,外设开启编码器,串口2 -------------------------------------------------------------------------------------------------------------------------- 错误:error: #20: identifier TIM_ICPOLARITY_BOTHEDGE is undefined 意思是,高级、通用定时器不能用BothEdge,只有基本定时器才能用BothEdge F4系列 /* 编码器初始化及使能编码器模式 */ ENCODER_TIMx_Init(); HA
[单片机]