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 ...
随机推荐
- Java框架spring 学习笔记(十五):操作MySQL数据库
新建一个工程,添加对数据库的支持 下载mysql驱动包 mysql-connector-java-5.1.7-bin.jar,快捷键ctrl+alt+shift+s,添加jar包到工程 编写JdbcT ...
- C语言之标准头文件模板
/*======================================================================================* * 版权 : xxx ...
- Django form表单功能的引用(注册,复写form.clean方法 增加 验证密码功能)
1. 在app下 新建 forms.py 定义表单内容,类型models from django import forms class RegisterForm(forms.Form): userna ...
- CodeForces-4C Registration system
// Registration system.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // #include <iostream> # ...
- 记录一次程序输出和DB查询不匹配的问题
今天发生一件很神奇的事情,我用TP读取DB数据,然后打印出来的数据,和直接通过sequal pro查询出来的数据(某一列),怎么对都对不起来,我尝试 清空TP缓存 MYSQL服务重启 mac重启 都无 ...
- ieee文献免费下载办法
sci-hub是个神奇的存在,但突然有短时间不能用了,搜索很久,找到了:https://www.zhihu.com/question/68333471/answer/276287163 这个网址会实时 ...
- Unity3D UI适配
直接贴图
- centos 上docker 运行出现/bin/sh: . not found
本人用的是Linux上的编译的....然后用了win上的编译命令 解决办法 : 用Linux上的编译命令..... CGO_ENABLED=0 GOOS=linux GOARCH=amd64 g ...
- docker--容器和镜像的导入导出及部署
一.镜像导出 save 1.查看镜像 docker images 2.导出镜像 docker save -o test.tar image_name 或 docker save image_name ...
- js简单的注册页面
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...