STM32——定时器

一、STM32定时器的分类
1.1 按照内核、外核、特定、常规分为4大类:
1)内核定时器:Systick
2)外设定时器:特定应用定时器+常规定时器8 N) M" B( m% N5 e$ S; N% }
3)特定应用定时器:LPTIM,RTC,WTD,HRTIM
4) 常规定时器:基本定时器TIM6&TIM7)、通用定时器(TIM2~TIM5,TIM9~TIM14)、高级定时器(TIM1&TIM8)
1.2 CPU时序  
此处我们提一下学习单片机原理的课程时,提到的几个CPU时序。
振荡周期:为单片机提供定时信号的振荡源的周期。
状态周期:1个状态周期=2个振荡周期
机器周期:1个机器周期=6个状态周期=12个振荡周期
指令周期:完成1条指令所占用的全部时间,以机器周期为单位。
以12MHz外接晶振为例
振荡周期=1/12us,相当于1/12*10^6,所以单位为us;
状态周期=1/6us
机器周期=1us
指令周期=1~4us
STM32共有14组常规定时器,其实也可以称为计数器,定时器/计数器的工作过程是自动完成的,不需要CPU的参与,互相独立,执行不同的任务,可以增加单片机的效率。
二、定时器中断原理
2.1 何为定时器中断:定时器中断是由单片机中的定时器溢出而申请的中断。
提到中断,必须满足几个要素:中断源中断请求中断优先级。 使CPU发生中断的事件称为中断源,中断源向CPU发出中断请求,CPU暂时中断原来执行的事件A转去执行事件B,事件B处理完成后继续返回原先中断的位置(该过程称为中断返回,原先中断的地方称为断点),继续执行原先的事件。
* a5 d5 G/ v* v2 e) {! |% }5 K( I
2.2 中断流程可以用下图表示:
二、定时器中断原理
2.1 何为定时器中断:定时器中断是由单片机中的定时器溢出而申请的中断。
提到中断,必须满足几个要素:中断源中断请求中断优先级。 使CPU发生中断的事件称为中断源,中断源向CPU发出中断请求,CPU暂时中断原来执行的事件A转去执行事件B,事件B处理完成后继续返回原先中断的位置(该过程称为中断返回,原先中断的地方称为断点),继续执行原先的事件。
* a5 d5 G/ v* v2 e) {! |% }5 K( I
2.2 中断流程可以用下图表示:
#define NVIC_PriorityGroup_0         ((uint32_t)0x700)   
/*!< 0 bits for pre-emption priority  4 bits for subpriority */( y4 [* G. x& W0 l
#define NVIC_PriorityGroup_1         ((uint32_t)0x600)   
/*!< 1 bits for pre-emption priority 3 bits for subpriority */: S' h, L0 w/ {1 N1 c' w
#define NVIC_PriorityGroup_2         ((uint32_t)0x500)   
/*!< 2 bits for pre-emption priority 2 bits for subpriority */
#define NVIC_PriorityGroup_3         ((uint32_t)0x400)   
/*!< 3 bits for pre-emption priority1 bits for subpriority */
#define NVIC_PriorityGroup_4         ((uint32_t)0x300)   
/*!< 4 bits for pre-emption priority 0 bits for subpriority */
在函数中要调用
void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group)
实现对某一个中断的中断分组和优先级配置。
与定时器配置紧密相关的就是自动重装载计数器(CNT)和预分频器(PSC),初始化定时器就是对定时器的CNT、PSC进行设置。下面介绍一下与本文密切相关的几个通用定时器的寄存器
三、定时器相关寄存器及中断编程
3.1定时器相关寄存器
3.1.1 控制寄存器TIMx_CR1
位0 CEN:计数器使能,0:禁止计数器,1,使能计数器
注意:只有事先通过软件将CEN位置去,才可以使用外部时钟、门控模式、编码器模式,而触发模式可以通过硬件自动将CEN置1;在单脉冲模式下,当发生更新事件时会自动将CEN位清零。
本实验中,我们只用到了TIMx_CR1的最低位,也就是计数器使能位,该位必须置1,才能让定时器开始计数。
3.1.2 DMA中断使能寄存器 TIMx_DIER
位0  UIE:更新中断使能,0:禁止更新中断,1:使能更新中断
TIMx_DIER是一个16bit的寄存器,对于要实现的中断试验,我们仅关心第0bit,因为定时器中断实验要用到定时器的更新中断,所以将该位置为1,表示允许更新时间所产生的中断。
  L) ?+ C  d1 N6 e+ R/ r9 n2 s
3.1.3预分频寄存器TIMx_PSC
位0:15 PSC:预分频器值。(范围是0~65535)
表示计数器时钟频率CK_INT 等于Fck_psc/(PSC[15:0]+1).PSC包含在每次发生更新事件时要装载到实际预分频器寄存器的值。(84MHz的CK_INT,那计数器的时钟频率为84/(PSC[15:0]+1)MHz,计数器时钟的取值范围为(0.00128~84)MHz,那么计数器时钟周期为0.012us(84MHz)~781us(0.001MHz);
这个地方要注意:预分频值=实际分频值-1,如果要设定实际分频值为8400(定时器的工作频率为10kHz),那我们设定预分频值为8399
  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
舵机驱动是STM32的一种应用方式,通过使用PWM输出信号来控制舵机的转动角度。PWM(脉冲宽度调制)是一种通过改变脉冲信号的高电平时间来控制电机或舵机的转动角度的技术。在STM32中,可以使用定时器模块来生成PWM信号,并通过改变占空比来控制舵机的位置。 具体来说,舵机驱动需要以下几个步骤: 1. 配置定时器:选择一个合适的定时器,并配置其工作模式和时钟源。 2. 配置输出通道:选择一个定时器的输出通道,并配置其工作模式为PWM输出模式。 3. 设置PWM周期:根据舵机的要求,设置定时器的重载值,确定PWM信号的周期。 4. 设置占空比:通过改变定时器的比较值,可以改变PWM信号的占空比,从而控制舵机的转动角度。 5. 启动定时器:使能定时器开始生成PWM信号。 通过以上步骤,可以实现对舵机的驱动控制。具体的代码实现可以参考引用\[3\]中的学习记录文章,其中详细介绍了如何在STM32中使用PWM输出来驱动舵机。 #### 引用[.reference_title] - *1* *2* *3* [总结篇:STM32舵机、电机的驱动&OSBoat电路逻辑的梳理](https://blog.csdn.net/weixin_47723114/article/details/127727386)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值