Timer of STM32
下面是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的更多相关文章
- STM32——timer
原文地址: http://blog.sina.com.cn/s/blog_49cb42490100s6ud.html 1. STM32的Timer简介 STM32中一共有11个定时器,其中 ...
- STM32(5)——通用定时器基本定时器
1.STM32的Timer简介 STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器. 其中系统嘀嗒定时器是前文中所描述的S ...
- STM32——通用定时器基本定时功能
STM32——————通用定时器基本定时功能 1. ...
- STM32 System and Timer Clock Configurations
STM32 System and Timer Clock Configurations I've started writing some software to drive a series of ...
- STM32 Timer Clock sources -- External Clock Both Edge
Timers get their clock source from External pins or Internal timer sources. External External = pins ...
- 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 ...
- STM32 使用DMA+DAC+TIMER 输出正弦波
之前已经简单论述过,根据我个人菜鸟的了解与认识,对之前的知识进行整理回顾: DMA:我的理解就是一个通道,或者是一座桥梁.在静态内存到静态内存,或者外设到静态内存间的一个通讯的通道.建立这个通道的好处 ...
- [置顶] STM32移植contiki进阶之三(中):timer 中文版
鉴于自己英语水平不高,在这里,将上一篇关于contiki 的timer的文章翻译为中文,让自己在学习的时候,更方便点.文中有许多不是很通顺的地方,将就吧. Timers Contiki系统提供了一套时 ...
- STM32: TIMER门控模式控制PWM输出长度
搞了两天单脉冲没搞定,无意中发现,这个利用主从模式的门控方式来控制一路PWM的输出长度很有效. //TIM2 PWM输出,由TIM4来控制其输出与停止 //frequency_tim2:TIM2 PW ...
随机推荐
- LinkedList使用方法
特有功能 void addFirst(E e);//在索引为0的位置添加指定元素 void addLast(E e);//在索引为size()-1的位置添加指定元素 E getFirst() 获取索引 ...
- Win10系统总是提示"在商店中查找应用"的关闭方法
Win10系统总是提示"在商店中查找应用"该怎么关闭?win10中打开文件的时候总是提示在商店中查找应用,但是自己的电脑中有程序可以打开这个文件,不需要去商店中下载,该怎么取消这个 ...
- 区块链入门(4)Truffle创建项目,编译,及项目部署
上一章的结尾说这一次要讲编写一个智能合约部署到测试网络集群中,并进行交易,但我自己越看越觉得内容挺多的.先讲下truffle的项目创建,编译和部署的问题,然后再做上面说的事情吧. truffle是一套 ...
- BurpSuite抓HTTPS包
Burp Suite要抓HTTPS的包的话,是需要有Burp Suite的CA证书的 为什么要证书这里就不说了,下面是具体步骤 1.首先要把Burp Suite的CA证书下载到本地 Burp Suit ...
- HBase Master HA高可用
HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行. 所以这里要配置HBase高可用的话,只需要 ...
- Leetcode中sort排序遇到的一些问题
class Solution { public: static bool cmp(vector<int>a,vector<int>b) { ]-a[]<b[]-b[]; ...
- SpringMVC的执行流程
解析SpringMVC执行流程 SpringMVC的执行图大概如下所示 1.首先它是由客户端发起请求,到DispatcherServlet,被拦截后到HandlerMapping这里充当一个路由器,通 ...
- vue小结
一:MVVM模型的理解 Model:数据模型,数据和业务逻辑都在这里定义:View代表视图,负责数据的展示:ViewModel:负责监听model中数据的改变并且控制视图的更新,处理用户交互操作:Mo ...
- pg_dump 数据处理
从数据库导出数据 -U 用户 -p 端口 -h 主机地址 -f 导出文件地址 -O 备份数据库结构和数据,不设置拥有者 -s 只导出数据库结构 最后是库名 (全部导出)pg_dump -U post ...
- 【转】RabbitMQ基础——和——持久化机制
这里原来有一句话,触犯啦天条,被阉割!!!! 首先不去讨论我的日志组件怎么样.因为有些日志需要走网络,有的又不需要走网路,也是有性能与业务场景的多般变化在其中,就把他抛开,我们只谈消息RabbitMQ ...