一、定时器节本分类和主要特点

1.STM32定时器分类:

1)看门狗定时器
2)SysTick定时器
3)RTC定时器

4)通用定时器
a)通用定时器TIM2~TIM5, 当中TIM2和TIM5是32位,TIM3和TIM4是16位
     具有四个独立通道
     中断/DMA事件
     支持增量编码器和霍尔传感器

b)通用定时器TIM9~TIM14,16位定时器
     最多具有连个独立通道
     中断事件

5)基本定时器TIM6,TIM7,16位定时器
     同步电路触发DAC
     中断/DMA事件

6)高级定时器TIM1。TIM8,16位定时器
    具有四个独立通道
    中断/DMA事件
    支持增量编码器和霍尔传感器
    
     输入信号能够改变计数器状态或复位
     可改变定期器寄存器的反复计数器。


二、实例1. 定时中断
    
1.时钟初始化
 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
 TIM_DeInit(TIM2);
   /* 时钟预分频数 */       //84000000/84=1000000,预分频后时钟为1M 
    
 TIM_TimeBaseStructure.TIM_Prescaler= (84 - 1);
 /* 自己主动重装载寄存器周期的值(计数值) */ /*
累计 TIM_Period个频率后产生一个更新或者中断 */
 TIM_TimeBaseStructure.TIM_Period =1000-1 ;  
/* 採样分频 */
 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
/* 向上计数模式 */ 
 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; 
 //调用初始化函数 
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
 /* 清除溢出中断标志 */ 
 TIM_ClearFlag(TIM2, TIM_FLAG_Update);  
/*设置产生TIM_FLAG_Update中断*/        
 TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
/* 开启时钟 */
 TIM_Cmd(TIM2, ENABLE); 

2. 设置中断向量。具体的解释见本博客有关“中断”部分的文章
 1)中断初始化
 NVIC_InitTypeDef NVIC_InitStructure;
 /* Enable TIM2 interrupt IRQ channel */ 
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
 NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure);

 2)中断函数
 void TIM2_IRQHandler(void)
{
 static unsigned int cpu_counter = 0; 
 if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET)  
 {
  TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update);
  cpu_counter ++;
  if(cpu_counter >= 500) //等闪烁的周期是1s
  {
   cpu_counter = 0;
   GPIO_ToggleBits(LED1);
  } 
 }
 
}

波形非常标准吧:)

STM32F407VG (五)定时器的更多相关文章

  1. 《MFC游戏开发》笔记五 定时器和简单动画

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9332377 作者:七十一雾央 新浪微博:http:// ...

  2. zigbee学习之路(五):定时器1(查询方式)

    一.前言 今天,我们来学习几乎所有单片机都有的功能,定时器的使用,定时器对单片机来说是相当重要的,有了它,单片机就可以进行一些复杂的工作. 二.原理与分析 谈到定时器的控制,我们最先想到的是要给它赋初 ...

  3. (笔记)Linux内核学习(八)之定时器和时间管理

    一 内核中的时间观念 内核在硬件的帮助下计算和管理时间.硬件为内核提供一个系统定时器用以计算流逝的时间.系 统定时器以某种频率自行触发,产生时钟中断,进入内核时钟中断处理程序中进行处理. 墙上时间和系 ...

  4. 《MFC游戏开发》笔记四 键盘响应和鼠标响应:让人物动起来

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9327377 作者:七十一雾央 新浪微博:http:// ...

  5. Python3-线程

    线程 什么是线程 线程的创建开销小 线程与进程的区别 为何要用多线程 多线程的应用举例 开启线程的两种方式 在一个进程下开启多个线程与在一个进程下开启多个子进程的区别 多线程并发的socket服务器 ...

  6. STC51六中中断配置点亮一个LED

    一.外部中断0.1(分别點亮一個LED) /****************************************************************************** ...

  7. 同步锁,死锁现象与递归锁,信息量Semaphore.....(Day36)

    一.同步锁 三个需要注意的点: #1.线程抢的是GIL锁,GIL锁相当于执行权限,拿到执行权限后才能拿到互斥锁Lock,其他线程也可以抢到GIL,但如果发现Lock仍然没有被释放则阻塞,即便是拿到执行 ...

  8. JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题

    JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...

  9. 并发编程(十五)——定时器 ScheduledThreadPoolExecutor 实现原理与源码深度解析

    在上一篇线程池的文章<并发编程(十一)—— Java 线程池 实现原理与源码深度解析(一)>中从ThreadPoolExecutor源码分析了其运行机制.限于篇幅,留下了Scheduled ...

随机推荐

  1. js判断客户端是手机端还是PC端

    封装函数: function isPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android", ...

  2. day02_12/12/2016_bean的实例化之普通工厂方式

  3. 316 Remove Duplicate Letters 去除重复字母

    给定一个仅包含小写字母的字符串,去除重复的字母使得所有字母出现且仅出现一次.你必须保证返回结果是所有可能结果中的以字典排序的最短结果.例如:给定 "bcabc"返回 "a ...

  4. C# Nugut CsvHelper 使用

    装载自: 跳转链接>>>

  5. Android开发笔记(8)——调用子Activity

     转载请注明:http://www.cnblogs.com/igoslly/p/6853730.html  调用子Activity 需要子Activity返回值 MainActivity使用start ...

  6. html5——全屏显示

    基本概念 1.HTML5规范允许用户自定义网页上任一元素全屏显示 2.requestFullscreen() 开启全屏显示.cancleFullscreen() 关闭全屏显示 3.不同浏览器兼容性不一 ...

  7. Go 时间相关

    >获取当前时间: t := time.Now() >获取当天开始.结束时间: tm1 := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, ...

  8. js获得子节点, 获得tab转json值

    //提取表格的值,JSON格式 function GetTableData(table) { var tableData = new Array(); //创建数组 alert("行数:&q ...

  9. CAD当前选择实体发生变化调用事件(com接口)

    主要用到函数说明: _DMxDrawXEvents::SelectModified 当前选择实体发生变化,会调用该事件,详细说明如下: 参数 说明 IDispatch* pAryId 当前被选择的实体 ...

  10. android studio 创建第一个app之hello world

    android studio 创建第一个app之hello world 想要用studio创建一个简单的app,结果遇到各种问题,application就是允许不起来,后来在专业人的帮助下,删除了一些 ...