stm32 定时器初步
今天学习STM32 的通用定时器:TIMx (TIM2、TIM3、TIM4 和 TIM5)。
定时器比较复杂,功能繁多,这里我们就说最基本的计数功能。
1.定时器的时钟从哪里来?
定时器的时钟来源有 4 个:
1)内部时钟(CK_INT)
2)外部时钟模式 1:外部输入脚(TIx)
3)外部时钟模式 2:外部触发输入(ETR)
4)内部触发输入(ITRx):使用 A 定时器作为 B 定时器的预分频器(A 为 B 提供时钟)
这些时钟,具体选择哪个可以通过 TIMx_SMCR 寄存器的相关位来设置。我们的实验选择内部时钟。
注意:这里的 CK_INT时钟是从 APB1 倍频(*1或者*2)的来的:
如果 APB1 的时钟分频数设置为 1,那么就等于PCLK1;
如果 APB1 的时钟分频数设置不等于1,那么就等于PCLK1*2。
本实验中,APB1的预分频=2,所以TIMxCLK = PCLK1 * 2 = 36MHz * 2 = 72MHz.
看图就明白了。
2.两个关键的参数
1) PSC[15:0]:预分频器的值 (Prescaler value)
计数器的时钟频率CK_CNT等于F_CK_PSC /(PSC[15:0]+1)。
假设我们的PSC[15:0]取值是7199,那么F_timx = 72MHz / 7200 = 10KHz,T = 1/10000 s
2) ARR[15:0]: 自动重装载的值 (Auto reload value)
假设我们令其等于4999,如果设置了更新中断,那么中断的周期是 (4999+1)* 1/10000 s = 0.5s
3.代码怎么写?
//TIM3的初始化
//时钟是72M
//arr : 自动重装载值
//psc: 预分频值void TIM3_Int_Init(u16 arr,u16 psc)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //外设时钟使能//TIM3初始化TIM_TimeBaseStructure.TIM_Period = arr; //自动重装载值TIM_TimeBaseStructure.TIM_Prescaler =psc; //预分频值TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //使能更新中断//中断优先级配置NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM_Cmd(TIM3, ENABLE); //开启时钟
}
中断程序如下
//定时器3的中断服务程序
void TIM3_IRQHandler(void)
{if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //发生了更新中断{TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除中断标志LED1=!LED1; //LED翻转}
}
主函数如下
int main(void)
{ delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断分组LED_Init(); //LED初始化TIM3_Int_Init(4999,7199);//定时器3初始化// T = 1/[72MHz/(7199+1)] * (4999+1) s = 0.5swhile(1){LED0=!LED0;delay_ms(200); }
}
实验结果:LED0每隔200ms 翻转一次,LED1 每隔500ms翻转一次。
仿真结果:
stm32 定时器初步相关推荐
- stm32关定时器_【菜鸟必看】stm32定时器的妙用
摘要:本文为你带来关于stm32定时器的使用的便利和优势之处. 使用定时器去计算获取一条的时间 一.初步了解定时器 stm32定时器时钟图如下: 定时器2-7:普通定时器 定时器1.8:高级定时器 二 ...
- 关闭 定时开启_【话说定时器系列】之四:STM32定时器更新事件及案例分享
STM32定时器是 ST MCU 内部最基础且常用的外设,实际应用尤为普遍.去年,电堂推出了<STM32 TIMER基础及常规应用介绍>,为大家梳理了 STM32 TIMER 的庞大内容, ...
- stm32 定时器_如何计算STM32定时器、独立看门狗和窗口看门狗
点击上方蓝色字体,关注我们 本博文简要阐述STM32L011微控制器定时器的参数配置(其他型号大同小异,本文侧重讲解配置,至于各类定时器的特点后续再述),STM32定时器种类繁多有通用定时器.基本定时 ...
- stm32定时器中断类型分析
一直在用的stm32定时器的中断都是TIM_IT_Update更新中断,也没问为什么,直到碰到有人使用TIM_IT_CC1中断,才想到这定时器的中断类型究竟有什么区别,都怪当时学习stm32的时候不够 ...
- STM32 - 定时器基础应用说明 - 04 - N-pulse waveform generation using one-pulse mode - 用OPM模式产生N次脉冲
前言:N-PULSE模式,就是PLUS模式+Mask(利用UDIS的屏蔽) Repetition的特性: 那么首先-N-PULSE可以定制波形的各个方面,然后,将这个定制进行重复,那不就是可以无限的定 ...
- STM32 - 定时器的设定 - 基础- 07 - 6-step PWM generation - 6步长PWM的产生 - COM Event的解释
前言:本节主要讲互补输出的步长设定问题,同时引入了一个重要的参数COM,这个再诸多STM32的手册里面都过于分散,在本文有一个比较完备的小结: When complementary outputs a ...
- STM32 - 定时器的设定 - 基础- 06 - OCxREF signal - Clearing the OCxREF signal on an external event
OCxREF signal 作为捕捉比较的定制化参考波形在对输出波形的配置上占有巨大的影响.如何将这个信号和外部输入的事件联系起来,能给系统的设计带来更多的可选择性. The OCxREF signa ...
- STM32 - 定时器的设定 - 基础 01.1 - Repetition counter
前言:Repetition counter是一个STM32增强的计数器功能,有很多用途,本文尝试进行简单阐述: 我们理解为,就是定时器溢出再增加一个倍率rate 的控制.注意是倍率,也就是如果是定时1 ...
- stm32捕获占空比_「话说定时器系列」之六:STM32定时器输入捕获话题
STM32定时器是 ST MCU 内部最基础且常用的外设,实际应用尤为普遍.去年,电堂推出了<STM32 TIMER基础及常规应用介绍>,为大家梳理了 STM32 TIMER 的庞大内容, ...
最新文章
- Ubuntu连结远程github
- python字符垂直输出型烟雾机_python+opencv实现水平投影和垂直投影
- no nlsxbe in java.library.path
- ​Cookie 从入门到进阶:一文彻底弄懂其原理以及应用
- 深度学习可解释性!深度taylor分解
- swagger的使用方式
- 【vue开发问题-解决方法】(九)使用element upload自定义接口上传文件,input多文件上传
- I帧,P帧,B帧简介
- [Effective C++系列]-为多态基类声明Virtual析构函数
- Atitit 发帖机实现(1)-----UsrQBm2008 页面上下文规范
- java 实现前后端分离_详解前后端分离之Java后端
- python 典型相关分析_典型关联分析(CCA)原理
- 苹果电脑mysql_MacBook 安装 MySQL 5.7.29(新手都看得懂的安装教程)
- 用74161设计十二进制计数器
- Infor SyteLine ERP 报告设置
- Kth Largest Element
- 安卓控件 - 列表视图
- vc驿站视频教程笔记2 ansi 和 unicode
- android收集备忘录恢复工具,手机小小备忘录数据恢复大问题轻松恢复文件看这里...
- 计算机考试老师怎么评卷,你写的字VS电脑阅卷呈现的字,两者相差悬殊,网友:机器尽力了...