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 ...
随机推荐
- Sprite(雪碧图)的应用
雪碧图是根据CSS sprite音译过来的,是将很多很多的小图标放在一张图片上. 使用雪碧图的目的:有时为了美观,我们会使用一张图片来代替一些小图标,但是一个网页可能有很多的小图标,浏览器在显示页面的 ...
- 第三篇 Flask 中的 request
第三篇 Flask 中的 request 每个框架中都有处理请求的机制(request),但是每个框架的处理方式和机制是不同的 为了了解Flask的request中都有什么东西,首先我们要写一个前 ...
- HBase Master HA高可用
HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行. 所以这里要配置HBase高可用的话,只需要 ...
- Linux下普通IO文件操作函数---C语言
普通文件IO总结 FILE结构体 typedef struct { int level; /*填充/清空一级缓存*/ unsigned flag; /*文件状态指针*/ ...
- 前后端分离框架前端react,后端springboot跨域问题分析
前后端分离框架前端react,后端springboot跨域问题分析 为啥跨域了 前端react的设置 springboot后端设置 为啥跨域了 由于前后端不在一个端口上,也是属于跨域问题的一种,所以必 ...
- CentOS7+CDH5.14.0安装CDH错误排查:HBase服务出现 该运行状况测试不良,因为 Service Monitor 未找到活动 Master
错误:HBase服务出现 该运行状况测试不良,因为 Service Monitor 未找到活动 Master 如果重启服务之后无法排除该问题,请执行如下操作(CM换成自己的版本号): rm -f /o ...
- 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...
- centos7下编译安装php7.3
一.下载php7.3的源码 https://www.php.net/downloads.php 下载php-7.3.4.tar.gz 二.安装gcc,gcc-c++,kernel-devel yum ...
- svg绘制一个简单地饼图
一个简单地svg绘制饼图的demo,代码如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8& ...
- Linux vim常见使用详解
教你用Vim编辑器 1.Vim编辑器基本使用方法 光标移动 查找/替换 插入模式 复制/粘贴 复制/粘贴 2.vim打开时的警告信息 当使用vim打开一个文件时,会同时在该目录下创建个.filenam ...