STM32学习——TIM基本定时器

基础知识

1.定时器分类
在这里插入图片描述
2.定时器时钟来自PCLK1(APB1),时钟源频率TIMxCLK=72M
3.真正计数用的时钟还需要进行分频,可进行1~65536之间的任何一个数进行分频。最终的计数频率为CK_CNT=TIMxCLK/(PSC+1) (对应库函数中TIM_TimeBaseInitTypeDef结构体中的TIM_Prescaler成员)
4.自动重装寄存器ARR是一个16位的寄存器,这里面装着计数器能计数的最大数值。当计数到这个值的时候,如果使能了中断的话,定时器就产生溢出中断。 (对应库函数中TIM_TimeBaseInitTypeDef结构体中的TIM_Period成员)
5.中断函数中切记要清除中断标志位,否则会出错!(对应库函数中的TIM_ClearITPendingBit函数)

编程步骤

1.配置NVIC中断控制器
2.初始化时基初始化结构体
3.使能定时器中断
4.打开定时器
5.编写中断服务函数

代码实现

(1)配置NVIC中断控制器

#define  BASIC_TIM_IRQ               TIM6_IRQn

static void Basetime_NVIC_Config()
{
	NVIC_InitTypeDef NVIC_InitStructure; 
    // 设置中断组为0
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);		
		// 设置中断来源
    NVIC_InitStructure.NVIC_IRQChannel = BASIC_TIM_IRQ;	
		// 设置主优先级为 0
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;	 
	  // 设置抢占优先级为3
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;	
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

(2)配置基本定时器工作的相关参数以及打开中断,使能定时器

static void Basetime_Mode_Config()
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitTStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);
	
	//自动重装寄存器中的值
	TIM_TimeBaseInitTStructure.TIM_Period=1000-1;
	
	//时钟预分频数为71,则驱动计数器的时钟CK_CNT=CK_INT/(71+1)=1M
	TIM_TimeBaseInitTStructure.TIM_Prescaler=71;
	
	//初始化定时器
	TIM_TimeBaseInit(TIM6,&TIM_TimeBaseInitTStructure);
	
	//清除定时器中断标志位
	TIM_ClearFlag(TIM6,TIM_FLAG_Update);
	
	//开启计数器中断
	TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);
	
	//使能计数器
	TIM_Cmd(TIM6, ENABLE);
	
	//暂时关闭定时器的时钟,等待使用
	//RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,DISABLE);
}

(3)编写中断服务函数(切记清除中断标志!)

#define  BASIC_TIM_IRQHandler        TIM6_IRQHandler

void BASIC_TIM_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM6,TIM_IT_Update)==SET)
	{
		TIM_ClearITPendingBit(TIM6,TIM_IT_Update);
		Timer_count_1ms++;
	}
}

基本定时器的用法较为简单,与8051的用法类似,无非这里用库函数封装起来了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值