STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。


TIM1和TIM8是能够产生3对PWM互补输出的高级定时器,常用于三相电机的驱动,时钟由APB2的输出产生;TIM2-TIM5是普通定时器,TIM6和TIM7是基本定时器,其时钟由APB1输出产生。


通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。


通用TIMx定时器特性包括:
●16位向上,向下,向上/向下自动装载计数器
● 16位可编程预分频器,计数器时钟频率的分频系数为1~65535之间的任意数值
●4个独立通道:(定时器通道是什么意思?在PWM一节中有提到...)
  − 输入捕获
  − 输出比较
  − PWM生成(边缘或中间对齐模式)
  − 单脉冲模式输出
● 使用外部信号控制定时器和定时器互连的同步电路
● 如下事件发生时产生中断/DMA:
  − 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
  − 触发事件(计数器启动,停止,初始化或者由内部/外部触发计数)
  − 输入捕获
  − 输出比较


定时器的RCC时钟部分:

APB1和APB2所连的外设如下:

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->

定时器中断的一般步骤:(以TIM2为例)

1.定时器时钟使能 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);


2.中断配置  定义结构体、清空定时器2的中断位、设置初始值、设置预分频、时钟分割、计数方式、使能、打开中断、打开定时器外设资源。


3.中断优先级配置   定义结构体、确定分组、设置IRQ通道、设置抢占优先级、设置从优先级、通道使能、使能。


4.中断服务程序

测试用例:(以TIM2为定时器控制LED发光状态)

 1 #include "pbdata.h"

 2 #include "misc.h"

 3 #include "stm32f10x_exti.h"

 4 #include "stm32f10x_tim.h"

 5 

 6 void RCC_Configration(void)

 7 {

 8      SystemInit();

 9      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

10      RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);      //定时器时钟使能

11 }

12 

13 void GPIO_Configration(void)

14 {

15     GPIO_InitTypeDef GPIO_InitStructure;

16     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;

17     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

18     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

19     GPIO_Init(GPIO_LED,&GPIO_InitStructure);

20 }

21 

22 /*

23   *中断配置*

24             */

25 void TIM_Configuration(void)

26 {

27     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;    

28     TIM_ClearITPendingBit(TIM2, TIM_IT_Update);//清空定时器3的中断位

29 

30     TIM_TimeBaseStructure.TIM_Period = 2000;            //设置初始值,定时1s

31     TIM_TimeBaseStructure.TIM_Prescaler = 35999;   //设置预分频

32     TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割

33     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   //向上计数

34     TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

35 

36     TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);  //打开中断

37     TIM_Cmd(TIM2,ENABLE);                 //定时器外设打开

38 }

39 

40 void NVIC_Configuration(void)         //设置优先级

41 {

42        NVIC_InitTypeDef NVIC_InitStructure; 

43     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);                                                      

44     NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;       //使能指定的IRQ通道

45     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //指定成员NVIC_IRQChannel的抢占优先级

46     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;            //指定成员NVIC_IRQChannel的从优先级

47     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 

48     NVIC_Init(&NVIC_InitStructure);//初始化外设NVIC寄存器

49 }

50    

51 int main(void)

52 {

53         RCC_Configration();

54         GPIO_Configration();

55         TIM_Configuration();

56         NVIC_Configuration();

57         while(1);

58 }


关键字:STM32  定时器  中断 引用地址:STM32定时器中断

上一篇:STM32 BOR/POR/PDR介绍
下一篇:PWM控制led渐变

推荐阅读

   近日,财政部、税务总局发布《关于提高机电 文化等产品出口退税率的通知》,决定自2018年9月15日起,提高机电、文化等397项产品的出口退税率。将多元件集成电路、非电磁干扰滤波器等产品出口退税率提高至16%。如下为部分产品清单: 
在上海最繁华的南京东路世纪广场,有一座充满未来科技感的建筑,它就是由现代汽车搭建的国内首个氢愿景馆——现代氢世界。这是现代汽车继今年6月参加第五届亚洲消费电子展,展示“氢社会”理念、氢燃料电池车技术之后,再次围绕氢能源利用所打造的氢愿景馆,也是国内首个以氢燃料电池技术为核心内容的展馆。在开馆首日,我就去馆中浪了一圈,对于喜欢科技...
2020年9月9日,地平线“释放·芯效能”产品发布会于深圳举办,宣布推出全新一代AIoT边缘AI芯片平台——地平线旭日® 3。 “地平线发展5年来,我们做对了很多事,也做错过很多事,但是我们的使命和愿景让地平线屹立于此。”地平线创始人兼CEO余凯在会上表示,我们的使命是赋能万物,让每个人的生活更安全,更美好。我们希望能够成为边缘人工智能芯片全球领...
华为技术有限公司日前新增多条专利信息,其中一条与区块链相关,名称为“一种信息处理方法及区块链节点”,公开号为CN111670564B,法律状态显示该专利已获授权。图源:天眼查专利摘要显示,本发明公开了一种信息处理方法及区块链节点,该技术有利于降低区块链节点的功率消耗。具体方法包括:获取第一信息;若满足第一预设条件,则生成新区块,该第一预设条...

史海拾趣

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved