下面是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. 寻找遗失的tags

    现象:查询数据库,存在tags:{} 的字段,但是api查询时,不存在tags字段 日志定位Sample的init方法中对resource_metadata的扁平处理: 3.对应方法分析 在ceilo ...

  2. linux/centOS 下安装 ngnix

    Nginx 是一款轻量级的 Web 服务器/反向代理服务器,比较流行,建议在 Linux 下安装运行. Nginx 需要的依赖 它们包括:gcc,openssl,zlib,pcre(可通过rpm -q ...

  3. 关于为什么会涉足easyui

    之前公司需要做一款类似于报价系统的功能,涉及到表单以及报表的统计, 这时分配给我,PHP也要开始弄easyui了 就这样走上了前端的路? 还挺感谢这些时间,有精力来学习额外的东西 不学习就会落后,ヾ( ...

  4. pycrypto 安装 Crypto 报错 error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools

    error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools&quo ...

  5. jmeter javamail 邮件格式再优化(由详情——>改为统计)

    前言:之前扩展的ant—jmeter支持邮件附件形式上传以及邮件内容的html文件格式. 如图: 由于邮件的内容格式是详情信息,也就是说直观的显示的是case,但由于case的增加,邮件内容越来越大! ...

  6. position在IE下的问题

    盒子设置position:absolute;后,子盒子的浮动可以不做清除浮动处理,同样,使用fixed,子盒子也不需要做清除浮动的处理 在IE7下(据说IE6也不行),盒子设置overflow:hid ...

  7. 24. pt-slave-find

    pt-slave-find --host 192.168.100.101 --port 3306 --user admin --password admin [root@server01 test]# ...

  8. vscode+MinGW+cmake设置轻量ide

    本地随手写一些题目的时候,发现visual studio非常庞大emmm vscodevscode是一个轻量编辑器 (1)vscode插件与设置自动同步 在两个电脑上,用vscode可以同步插件 ,利 ...

  9. Linux学习笔记:重定向>和>>

    本文参考 https://www.cnblogs.com/piperck/p/6219330.html 重定向命令 > 和 >> 将命令的输出结果存储在指定文件中. 例如下面的例子就 ...

  10. 关于webpack使用的一些问题

    1.镜像安装 npm安装webpack慢的爆炸,如果不能FQ,试下下面的国内良心镜像,浑身都舒爽了. npm config set registry https://registry.npm.taob ...