stm32学习笔记 TIM定时器中断1.定时器基本定时功能(含代码)

TIM定时器分四个部分

目录

一.定时器基本定时功能

二.定时器输出比较功能

三.定时器输入捕获功能

四.定时器编码接口


一.定时器基本定时功能

RCC时钟树

SystmInit函数

外部晶振出问题会导致程序时钟慢了十倍

stm32C8t6 TIM1-4

RCC内部时钟

高级定时器 TIM1,TIM8--APB2总线

PWM波

三相五刷电机

通用定时器 TIM2-5   APB1总线

外部时钟ETR/TRGI

TRGI---外部时钟模式1,它还有触发输入和从模式

ITR信号

ETR,外部引脚---外部时钟模式2 配置极性选择,边沿检测,预分频器

黄字是时基单元

基本定时器 TIM6-7 APB1

只能选择内部时钟72MHZ

预分频器对时钟进行预分频,计数器自增计数,当计数值达到自动重装值时,计数值清零更新中断和更新事件

预分频的值于实际分频系数有一个数的偏移

计数器计数频率:CK_CNT=CK_PSC/(PSC+1)

计数器溢出频率:CK_CNT_OV=CK_CNT/(ARR+1)

移出时间:1/计数器溢出频率

void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);//运行控制

//配置时钟源选择

 void TIM_InternalClockConfig(TIM_TypeDef* TIMx);


void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
                                uint16_t TIM_ICPolarity, uint16_t ICFilter);
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
                             uint16_t ExtTRGFilter);
void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, 
                             uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);
void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
                   uint16_t ExtTRGFilter);

中断事件源控制

void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);

写分频值

void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);

当前计数器记到哪了

uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);

#include "stm32f10x.h"                  // Device header
extern uint16_t NUM;
void Timer_Init(void)
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
	
	TIM_InternalClockConfig(TIM2);//通用定时器
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_TimeBaseInitStructure.TIM_Period=10000-1;//自动重装 少 比较低的频率计比较少的数
	TIM_TimeBaseInitStructure.TIM_Prescaler=7200-1;//预分频 多
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;//重复计数器高级定时器才有,不需要配置
	
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
	
	TIM_ClearFlag(TIM2,TIM_FLAG_Update);//避免刚初始化就进入中断
	TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//使能中断
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
	NVIC_Init(&NVIC_InitStructure);
	
	//定时器就可以开始工作,当产生更新时,就会触发中断
	TIM_Cmd(TIM2,ENABLE);
}

void TIM2_IRQHandler(void)
{
		if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET)
		{
		  TIM_ClearITPendingBit(TIM2,TIM_IT_Update);

		}
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值