下面是STM32得定时器程序,分两个文件Timer.c和Timer.h

/**************************************************************************
* 文件名:Timer.h *
* 编写人:离逝的风 *
* 更新时间:2018.10.6 *
* 说明:此文件属于开源,所有权对任何人开放 *
* 如有问题请联系邮箱:1477153217@qq.com *
* *
* 通用定时器(TIM2,3,4,5)配置步骤如下: *
* 1.使能定时器时钟,在APB1上 *
* 2.设置定时器中断向量优先级和分组 *
* 3.配置定时器寄存器(CR1,PSC,DIER,ARR)[注意:ARR需要先置零] *
* 4.写中断函数,中断函数一般无返回值和无参数,同时SR寄存器最后一位清零 *
***************************************************************************/ #ifndef __TIMER_H_
#define __TIMER_H_ #include "stm32f10x.h" /**###############################下面为文件配置部分###########################################**/
//开启功能设置为1,否则为0
#define TIM2_EN 1
#define TIM3_EN 0
#define TIM4_EN 0
#define TIM5_EN 0 /*#################################相关宏定义,需用户修改######################################*/
#define TIM2_TIME_PSC 7200 //定义预分频值为7200,即时钟为72000000/7200=10000即10kHz
#define TIM2_TIME_ARR 1000 //定义计数值为1000,即定时时间为1000/10000=0.1s #define TIM3_TIME_PSC 7200 //定义预分频值为7200,即时钟为72000000/7200=10000即10kHz
#define TIM3_TIME_ARR 1000 //定义计数值为1000,即定时时间为1000/10000=0.1s #define TIM4_TIME_PSC 7200 //定义预分频值为7200,即时钟为72000000/7200=10000即10kHz
#define TIM4_TIME_ARR 1000 //定义计数值为1000,即定时时间为1000/10000=0.1s #define TIM5_TIME_PSC 7200 //定义预分频值为7200,即时钟为72000000/7200=10000即10kHz
#define TIM5_TIME_ARR 1000 //定义计数值为1000,即定时时间为1000/10000=0.1s /*################################函数接口。供用户调用########################################*/
/*---------------------TIM2---------------------------*/
#if(TIM2_EN==1)
void TIM2_Init(void);
void TIM2_IRQHandler(void);
#endif
/*---------------------TIM3---------------------------*/
#if(TIM3_EN==1)
void TIM3_Init(void);
void TIM3_IRQHandler(void);
#endif
/*---------------------TIM4---------------------------*/
#if(TIM4_EN==1)
void TIM4_Init(void);
void TIM4_IRQHandler(void);
#endif
/*---------------------TIM5---------------------------*/
#if(TIM5_EN)
void TIM5_Init(void);
void TIM5_IRQHandler(void);
#endif #endif //FILE END
/**************************************************************************
* 文件名:Timer.c *
* 编写人:离逝的风 *
* 更新时间:2018.10.6 *
* 说明:此文件属于开源,所有权对任何人开放 *
* 如有问题请联系邮箱:1477153217@qq.com *
* *
* 通用定时器(TIM2,3,4,5)配置步骤如下: *
* 1.使能定时器时钟,在APB1上 *
* 2.设置定时器中断向量优先级和分组 *
* 3.配置定时器寄存器(CR1,PSC,DIER,ARR)[注意:ARR需要先置零] *
* 4.写中断函数,中断函数一般无返回值和无参数,同时SR寄存器最后一位清零 *
***************************************************************************/ #include "Timer.h" /*#######################################------TIM2------#################################################*/
#if(TIM2_EN==1)
void TIM2_Init(void)
{ RCC->APB1ENR|=(<<); //开启TIM2时钟 NVIC_SetPriorityGrouping(); //设置中断优先级分组为2
NVIC_SetPriority(TIM2_IRQn, NVIC_EncodePriority(,,)); //设置中断为:抢占优先级为2,子优先级为1
NVIC_EnableIRQ(TIM2_IRQn); //使能TIM2中断 TIM2->PSC|=TIM2_TIME_PSC-; //预分频寄存器写入7200
TIM2->DIER|=(<<); //开启更新中断状态
TIM2->ARR&=0X00; //清除自动重装寄存器的值
TIM2->ARR|=TIM2_TIME_ARR-; //自动重装寄存器1000-1
TIM2->CR1|=(<<); //将ARR寄存器值装入缓冲器中
TIM2->CR1|=<<; //使能计时器,开始计数 } void TIM2_IRQHandler(void)
{
/*insert your interrupt program*/ TIM2->SR&=~(<<); //清除中断标志位
} #endif
/*#######################################------TIM3------#################################################*/
#if(TIM3_EN==1)
void TIM3_Init(void)
{ RCC->APB1ENR|=(<<); //开启TIM3时钟 NVIC_SetPriorityGrouping(); //设置中断优先级分组为2
NVIC_SetPriority(TIM3_IRQn, NVIC_EncodePriority(,,)); //设置中断为:抢占优先级为2,子优先级为2
NVIC_EnableIRQ(TIM3_IRQn); //使能TIM2中断 TIM3->PSC|=TIM3_TIME_PSC-; //预分频寄存器写入7200
TIM3->DIER|=<<; //开启更新中断状态
TIM3->ARR&=0X00; //清除自动重装寄存器的值
TIM3->ARR|=TIM3_TIME_ARR-; //自动重装寄存器1000-1
TIM3->CR1|=(<<); //将ARR寄存器值装入缓冲器中
TIM3->CR1|=<<; //使能计时器,开始计数 } void TIM3_IRQHandler(void)
{
/*insert your interrupt program*/ TIM3->SR&=(~(0X01)); //清除中断标志位
} #endif
/*#######################################------TIM4------#################################################*/
#if(PWM4_EN==1)
void TIM4_Init(void)
{ RCC->APB1ENR|=(<<); //开启TIM4时钟 NVIC_SetPriorityGrouping(); //设置中断优先级分组为2
NVIC_SetPriority(TIM4_IRQn, NVIC_EncodePriority(,,)); //设置中断为:抢占优先级为2,子优先级为3
NVIC_EnableIRQ(TIM4_IRQn); //使能TIM2中断 TIM4->PSC|=TIM4_TIME_PSC-; //预分频寄存器写入7200
TIM4->DIER|=<<; //开启更新中断状态
TIM4->ARR&=0X00; //清除自动重装寄存器的值
TIM4->ARR|=TIM4_TIME_ARR-; //自动重装寄存器1000-1
TIM4->CR1|=(<<); //将ARR寄存器值装入缓冲器中
TIM4->CR1|=<<; //使能计时器,开始计数 } void TIM4_IRQHandler(void)
{
/*insert your interrupt program*/ TIM4->SR&=(~(0X01)); //清除中断标志位
} #endif
/*#######################################------TIM5------#################################################*/
#if(TIM5_EN==1)
void TIM5_Init(void)
{ RCC->APB1ENR|=(<<); //开启TIM5时钟 NVIC_SetPriorityGrouping(); //设置中断优先级分组为2
NVIC_SetPriority(TIM5_IRQn, NVIC_EncodePriority(,,)); //设置中断为:抢占优先级为2,子优先级为4
NVIC_EnableIRQ(TIM5_IRQn); //使能TIM2中断 TIM5->PSC|=TIM5_TIME_PSC-; //预分频寄存器写入7200
TIM5->DIER|=<<; //开启更新中断状态
TIM5->ARR&=0X00; //清除自动重装寄存器的值
TIM5->ARR|=TIM5_TIME_ARR-; //自动重装寄存器1000-1
TIM5->CR1|=(<<); //将ARR寄存器值装入缓冲器中
TIM5->CR1|=<<; //使能计时器,开始计数 } void TIM5_IRQHandler(void)
{
/*insert your interrupt program*/ TIM5->SR&=(~(0X01)); //清除中断标志位
} #endif //FILE END

Timer of STM32的更多相关文章

  1. STM32——timer

    原文地址: http://blog.sina.com.cn/s/blog_49cb42490100s6ud.html   1.     STM32的Timer简介 STM32中一共有11个定时器,其中 ...

  2. STM32(5)——通用定时器基本定时器

    1.STM32的Timer简介 STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器. 其中系统嘀嗒定时器是前文中所描述的S ...

  3. STM32——通用定时器基本定时功能

    STM32——————通用定时器基本定时功能                                                                           1.  ...

  4. STM32 System and Timer Clock Configurations

    STM32 System and Timer Clock Configurations I've started writing some software to drive a series of  ...

  5. STM32 Timer Clock sources -- External Clock Both Edge

    Timers get their clock source from External pins or Internal timer sources. External External = pins ...

  6. STM32 Timer : Base Timer, Input Capture, PWM, Output Compare

    http://www.cs.indiana.edu/~geobrown/book.pdf An example of a basic timer is illustrated in Figure 10 ...

  7. STM32 使用DMA+DAC+TIMER 输出正弦波

    之前已经简单论述过,根据我个人菜鸟的了解与认识,对之前的知识进行整理回顾: DMA:我的理解就是一个通道,或者是一座桥梁.在静态内存到静态内存,或者外设到静态内存间的一个通讯的通道.建立这个通道的好处 ...

  8. [置顶] STM32移植contiki进阶之三(中):timer 中文版

    鉴于自己英语水平不高,在这里,将上一篇关于contiki 的timer的文章翻译为中文,让自己在学习的时候,更方便点.文中有许多不是很通顺的地方,将就吧. Timers Contiki系统提供了一套时 ...

  9. STM32: TIMER门控模式控制PWM输出长度

    搞了两天单脉冲没搞定,无意中发现,这个利用主从模式的门控方式来控制一路PWM的输出长度很有效. //TIM2 PWM输出,由TIM4来控制其输出与停止 //frequency_tim2:TIM2 PW ...

随机推荐

  1. 移动端与web端的测试点的差别

    单纯从功能测试的层面上来讲的话,APP 测试.web 测试 在流程和功能测试上是没有区别的.根据两者载体不一样,则区别如下:系统结构方面web项目,b/s架构,基于浏览器的:web测试只要更新了服务器 ...

  2. CentOS7编译安装mysql-5.6.43

    Step 1:安装编译需要的软件和工具 [root@node-1 ~]# yum install gcc gcc-c++ cmake ncurses-devel bison Step 2:创建mysq ...

  3. 关于Image创建的内存管理

    image创建方法 [UIImage imageNamed:imageName] 上述方法创建的image,会常驻在内存中,不会随着imageView的dealloc而释放内存. NSString * ...

  4. Eclipse+Servlet+jsp+MySql

    一.JSP和Servlet的简单介绍: Java开发Web应用程序时用到的技术主要有两种,即Servlet和JSP,Servlet是在服务器端执行的Java程序,一个被称为Servlet容器的程序(其 ...

  5. php 守护进程(Daemon)

    守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务. 很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭. 守护进程一直在后台运行,脱离终端运行的程序 独立运行的守护进 ...

  6. h5页面转图片长按保存

    5页面经常会遇到此类需求.将最后的结果页转换为图片长按保存.下面介绍一下实现此需求的过程 1,依赖安装 cnpm install html2canvas --save 2,依赖引入,使用 绑定 初始化 ...

  7. python第十九天 关于方法,函数

    1.先从简单的函数说起 from inspect import isfunction 导入判断是否是function def foo():pass 定义了一个函数 print(foo) <fun ...

  8. 20165213 Exp1 PC平台逆向破解

    PC平台逆向破解 实验内容 1.了解掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP:NOP指令即"空指令".执行到NOP指令时,CPU什么也不做,仅仅当做 ...

  9. UI设计之动画—从虚拟到现实

    以下内容由摹客团队翻译整理,仅供学习交流,摹客iDoc是支持智能标注和切图的产品协作设计神器. 用户界面设计中的动画一直是这几年热议的话题,尤其活跃在概念动画领域.它为设计师提供创造性实验并推动UI动 ...

  10. H5获取原生传过来的值

    项目开发中,可能会涉及到原生页面跳转到H5页面,然后H5页面要返回原生页面,通常使用的方法就会失效:this.$router.go(-1);怎么解决呢,这样就需要原生跳转H5页面的时候,在URL里传递 ...