您的位置:首页 > 健康 > 美食 > 6 定时器

6 定时器

2024/12/24 10:49:35 来源:https://blog.csdn.net/qq_40983975/article/details/140914120  浏览:    关键词:6 定时器

6 定时器

  • 1、基本概念
  • 2、使用库函数实现

1、基本概念

定时器的基本工作框架
在这里插入图片描述

  • STM32F103共支持8个定时器
    在这里插入图片描述

  • 假如分频器PSC的值=0,则PSC分频系数=1,表示输入1个时钟信号,CNT计数器加1,1S加1,当CNT计数器的值=3,跟ARR自动重载寄存器的值2+1相等时,就会产生一个定时器中断信号也就是3s就会产生一次定时器中断信号,并且CNT计数器清0重新计数

  • 假如分频器PSC的值=1,则PSC分频系数=2,表示输入2个时钟信号,CNT计数器加1,2S加1,当CNT计数器的值=3,跟ARR自动重载寄存器的值2+1=3相等时,就会产生一个定时器中断信号,也就是6s就会产生一次定时器中断信号,并且CNT计数器清0重新计数

  • 当 1Hz PSC=0 ARR=2 CNT=0 问 : 多长时间后触发中断呢?
    PSC分频系数为1 ARR+1为3 CNT=0 则需要3秒

  • 中断的周期=(PSC+1)*(ARR+1)/f

  • 中断的频率=f/(PSC+1)*(ARR+1)

2、使用库函数实现

在system目录下,新建TIMER4目录,打开keil工程,添加stm32f10x_tim.c,新建timer4.c和timer4.h文件
编辑timer4.h

#ifndef __TIMER4_H_
#define __TIMER4_H_
#include "stm32f10x.h"// ARR = 4999 PSC = 7199
// 周期 = 5000 * 7200 / 72000000 = 0.5
#define ARR 4999
#define PSC 7100void TIMER4_Init(void); // 初始化函数
void TIMER4_Start(void);// 启动定时器
void TIMER4_Stop(void); // 关闭定时器
#endif

编辑timer4.c

#include "timer4.h"
#include "stdio.h"
void TIMER4_Init(void){// 初始化函数
// 1. 打开定时器4时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
// 2. 配置定时器4工作参数TIM_TimeBaseInitTypeDef TIMER4_Config;TIMER4_Config.TIM_Prescaler = PSC; // 预分频值TIMER4_Config.TIM_Period = ARR; // 重装载寄存器的值TIMER4_Config.TIM_ClockDivision = TIM_CKD_DIV1;// 不分频 72MHzTIMER4_Config.TIM_CounterMode =  TIM_CounterMode_Up;// 向上计数TIM_TimeBaseInit(TIM4,&TIMER4_Config);// 3. 配置TIME4的溢出中断TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);
// 4. 配置NVIC支持TIME4的中断NVIC_InitTypeDef NVIC_Config;NVIC_Config.NVIC_IRQChannel = TIM4_IRQn;NVIC_Config.NVIC_IRQChannelCmd =ENABLE;NVIC_Config.NVIC_IRQChannelPreemptionPriority=0;NVIC_Config.NVIC_IRQChannelSubPriority=1;NVIC_Init(&NVIC_Config);
}void TIMER4_Start(void){// 启动定时器TIM_Cmd(TIM4,ENABLE);
}
void TIMER4_Stop(void){// 关闭定时器TIM_Cmd(TIM4,DISABLE);
}

书写中断函数

void TIM4_IRQHandler(void){// 判断是否是TIM4的update中断if(TIM_GetITStatus(TIM4,TIM_IT_Update)){// 清除中断到来位TIM_ClearITPendingBit(TIM4,TIM_IT_Update);LED2 = !LED2;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com