STM32f103 —— timer

发布者:Tiger8最新更新时间:2020-12-07 来源: elecfans关键字:STM32f103  timer  定时器 手机看文章 扫描二维码
随时随地手机看文章

#ifndef _TIMER_H_

#define _TIMER_H_

 

#include "stm32f10x.h"

#include "type.h"

 

// LED定时器,按键定时器,重发定时器

#define LED_TIMER           TIM1

#define LED_TIMER_DIV       7200

#define LED_TIMER_PERIOD    2500

 

#define PWM_TIMER           TIM2

 

#define RESEND_TIMER        TIM3

#define RESEND_TIMER_DIV    7200  

#define RESEND_TIMER_PERIOD 2500

 

#define KEY_TIMER           TIM4

#define KEY_TIMER_DIV       7200

#define KEY_TIMER_PERIOD    200

 

void TimerNvicConfig(void);

void TimerConfig(TIM_TypeDef *timer, uint16_t div, uint16_t period);

void TimerEnable(TIM_TypeDef *timer);

void TimerDisable(TIM_TypeDef *timer);

 

#endif /* _TIMER_H_ */

 

 

#include "stm32f10x_tim.h"

#include "stm32f10x_rcc.h"

#include "timer.h"

 

/*

*  三个定时器: 1 灯色   2 按键  3 重发

*/

void TimerNvicConfig(void)

{

  NVIC_InitTypeDef NVIC_StructInit;

 

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

 

  NVIC_StructInit.NVIC_IRQChannel = TIM1_UP_IRQn;

  NVIC_StructInit.NVIC_IRQChannelCmd = ENABLE;

  NVIC_StructInit.NVIC_IRQChannelPreemptionPriority = 0;

  NVIC_StructInit.NVIC_IRQChannelSubPriority = 1;

  NVIC_Init(&NVIC_StructInit);

 

  NVIC_StructInit.NVIC_IRQChannel = TIM2_IRQn;

  NVIC_StructInit.NVIC_IRQChannelCmd = ENABLE;

  NVIC_StructInit.NVIC_IRQChannelPreemptionPriority = 1;

  NVIC_StructInit.NVIC_IRQChannelSubPriority = 1;

  NVIC_Init(&NVIC_StructInit);

 

  NVIC_StructInit.NVIC_IRQChannel = TIM3_IRQn;

  NVIC_StructInit.NVIC_IRQChannelCmd = ENABLE;

  NVIC_StructInit.NVIC_IRQChannelPreemptionPriority = 2;

  NVIC_StructInit.NVIC_IRQChannelSubPriority = 1;

  NVIC_Init(&NVIC_StructInit);

 

  NVIC_StructInit.NVIC_IRQChannel = TIM4_IRQn;

  NVIC_StructInit.NVIC_IRQChannelCmd = ENABLE;

  NVIC_StructInit.NVIC_IRQChannelPreemptionPriority = 3;

  NVIC_StructInit.NVIC_IRQChannelSubPriority = 1;

  NVIC_Init(&NVIC_StructInit);

}

 

void TimerConfig(TIM_TypeDef *timer, uint16_t div, uint16_t period)

{

  TIM_TimeBaseInitTypeDef TIM_StructInit;

 

  if(LED_TIMER == timer)

  {

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

  }

  else if(RESEND_TIMER == timer)

  {

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  }

  else if(KEY_TIMER == timer)

  {

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);

  }

 

  TIM_StructInit.TIM_Period = period;

  TIM_StructInit.TIM_Prescaler = div;

  TIM_StructInit.TIM_ClockDivision = TIM_CKD_DIV1; /* 数字滤波器采样频率 */

  TIM_StructInit.TIM_CounterMode = TIM_CounterMode_Up; /* 向上计数 */

  TIM_StructInit.TIM_RepetitionCounter = 0;

 

  TIM_TimeBaseInit(timer, &TIM_StructInit);

  TIM_ITConfig(timer, TIM_IT_Update, ENABLE); /* 允许中断 */

  TIM_ClearFlag(timer, TIM_FLAG_Update); /* 更新定时器会产生更新时间,清除标志位 */

}

 

void TimerEnable(TIM_TypeDef *timer)

{

  TIM_Cmd(timer, ENABLE);

}

 

void TimerDisable(TIM_TypeDef *timer)

{

  TIM_Cmd(timer, DISABLE);

}


关键字:STM32f103  timer  定时器 引用地址:STM32f103 —— timer

上一篇:STM32 —— LIN
下一篇:STM32f103 —— can通信

推荐阅读最新更新时间:2024-11-13 16:07

AVR定时器T1中断示例程序
AVR定时器T1中断示例程序使用AVR的定时器T1做1S定时,并使用PD口的 LED 指示灯做简单指示。 #include iom16v.h #include macros.h #define DISP_DDR DDRD #define DISP_PORT PORTD /*----------------------------------------------------------------- 程序名称:定时器1初始化程序 程序功能: 注意事项:基于7.3728M 晶振 提示说明:晶振不要买到假的,要不然,调不出来还以为电脑有鬼! 输 入: 返
[单片机]
51单片机内部定时器/计数器应用
M1M0工作方式功能描述00工作方式013位计数器01工作方式116位计数器10工作方式2自动再装入8位计数器11工作方式3定时器0:分成两个8位计数器; 定时器1:停止计数 定时器/计数器方式控制寄存器TMOD不能进行位寻址,只能用字节传送指令设置定时器工作方式,低半字节定义为定时器0,高半字节定义为定时器1。复位时,TMOD所有位均为0。 例:设定定时器1为定时工作方式,要求软件启动定时器1按方式2工作。定时器0为计数方式,要求由软件启动定时器0,按方式1工作。 我们怎么来实现这个要求呢? 大家先看上面TMOD寄存器各位的分布图 第一个问题:控制定时器1工作在定时方式或计数方式是哪个位?通过前面的学习,我们已知道,C/T位(D
[单片机]
STM32F103】RCC-使用HSE/HSI配置时钟
以上为STM32的时钟树,通过系统的启动文件,系统自动调用函数进行时钟初始化,所以我们在实际应用时不需要去写时钟这块,但是如果我们有特殊需求或者想要修改内部时钟的属性,则需要了解时钟树。以下以一个实验例子来测试,修改系统时钟: 1、通过HSE(高速外部时钟)来配置系统时钟: //HSE配置系统时钟 void HSE_SetSysClk( uint32_t RCC_PLLMul_x ) { ErrorStatus HSEStatus; // 把RCC 寄存器复位成复位值 RCC_DeInit(); // 使能 HSE RCC_HSEConfig(RCC_HSE_ON)
[单片机]
【<font color='red'>STM32F103</font>】RCC-使用HSE/HSI配置时钟
ZigBee基础实验(九)--定时器
1、前言   上一节讲了Zigbee的睡眠定时器利用外部按键使系统从休眠态唤醒到工作态,其核心在于:   61 void SysPowerMode(uchar mode)   62 {   63 if(mode 0 && mode 4)    64 {   65 SLEEPCMD |= mode; //设置系统睡眠模式    66 PCON = 0x01; //进入睡眠模式 ,通过中断唤醒    67 }    68 else    69 PCON = 0x00; //主动/空闲模 通过中断唤醒系统    70 }   其中参数mode表示电源管理系统中
[单片机]
ZigBee基础实验(九)--<font color='red'>定时器</font>二
avr定时器做的正弦波
实物照片如下 RC电路的电阻为1K与10K时的波形分别如下 仿真图片如下: 程序如下: #include iom16v.h #include macros.h #define uchar unsigned char uchar auc_SinParam = { 128,134,140,147,153,159,165,171,177,182,188,193,198,204,208,213, 218,222,226,230,233,237,240,242,245,247,249,251,252,253,254,254, 254,254,253,252,251,250,248,246,24
[单片机]
avr<font color='red'>定时器</font>做的正弦波
【STM32】通用定时器的基本原理(实例:定时器中断)
STM32F1xx官方资料: 《STM32中文参考手册V10》-第14章通用定时器 STM32的定时器: STM32F103ZET6一共有8个定时器,其中分别为: 高级定时器(TIM1、TIM8);通用定时器(TIM2、TIM3、TIM4、TIM5);基本定时器(TIM6、TIM7)。 STM32的通用定时器 通用定时器功能特点描述 STM32的通用定时器是由一个可编程预分频器(PSC)驱动的16位自动重装载计数器(CNT)构成,可用于测量输入脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等。 STM3 的通用TIMx(TIM2、TIM3、TIM4 和 TIM5)定时器功能特点包括: 位于低速
[单片机]
【STM32】通用<font color='red'>定时器</font>的基本原理(实例:<font color='red'>定时器</font>中断)
【51单片机 】定时器的初始值计算 详解
首先值得一提的是:51单片机定时器与主程序是并行工作的,就是主程序在运行的时候,定时器也在计数,计数溢出后定时器中断主程序的运行,转而执行中断服务程序。此外还有串行口、中断系统…,都独立的工作,不用 CPU 干预。 正文部分: 好了,我们先来看初始值计算公式: 公式:(216– X)× 12 ÷ 晶振频率 = 定时时间(默认单位us) ————————————————————————————————— X是未知量 ————————————————————————————————— 216是根据方式选择的,可以自行选择,方式1为16位 方式0 :213 (少用) 方式1 :216 (最常用) 方式2 :28 (常用) 假
[单片机]
【51单片机 】<font color='red'>定时器</font>的初始值计算 详解
关于stm32的定时器主从模式概念
STM32的每个定时器都可以由另一个定时器触发启动定时器一般是通过软件设置而启动,STM32的每个定时器也可以通过外部信号触发而启动,还可以通过另外一个定时器的某一个条件被触发而启动.这里所谓某一个条件可以是定时到时、定时器超时、比较成功等许多条件.这种通过一个定时器触发另一个定时器的工作方式称为定时器的同步,发出触发信号的定时器工作于主模式,接受触发信号而启动的定时器工作于从模式 以下程序是从官方的修改而来 修改为寄存器版(主定时器:TIM2;从定时器:TIM3,省略了TIM4): /*从模式:TIM2主模式,TIM3从模式*/ void TIM_Parallel_Synchro(void) { /* System Clo
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved