通用寄存器part2:配置中断时间

本文介绍STM32中定时器的配置方法及中断服务函数的编写过程。通过结构体初始化定时器,并设置自动重装载寄存器周期与预分频系数,最终实现LED每0.5秒闪烁一次的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2018/4/19

stm32

1.说在前面

今天在代码层面上初步接触了通用寄存器,学习了一下怎样配置一个定时器和设置中断时间

2.对于定时器的配置

1.配置定时器(依旧采用结构体的形式初始化)

1-1:配置定时器的初始化

1-2:配置NVIC的中断优先级

1-3:使能定时器3

注:库函数存在于Stm32f10x_tim.h和Stm32f10x_tim.c中

void TIM3_Int_Init(u16 arr,u16 psc)//arr 自动重装值,psc 时间预分频系数
{
	//1.配置定时器操作
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStructure;//设置定时器的初始化
	NVIC_InitTypeDef NVIC_InitStructure;//设置中断优先级的初始化
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //实现时钟3使能
	TIM_TimeBaseInitStructure.TIM_Period=arr;//自动重载寄存器周期
	TIM_TimeBaseInitStructure.TIM_Prescaler=psc;//时钟频率的预分频系数
	TIM_TimeBaseInitStructure.TIM_ClockDivision= TIM_CKD_DIV1;//设置时钟分割,DIV1对等分割
	//这2位定义在定时器时钟(CK_INT)频率、死区时间和由死区发生器与数字滤波器(ETR,TIx)所用 
	TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数模式
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);//进行定时器3的初始化
	TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //允许更新中断
	//配置定时器3成功
	//配置NVIC
	
	NVIC_InitStructure.NVIC_IRQChannel= TIM3_IRQn;//设置定时器3的中断操作
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//共占优先级为0
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//从优先级为3
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&NVIC_InitStructure);//初始化NVIC
	//配置定时器成功
	
	//使能定时器3
	TIM_Cmd(TIM3,ENABLE);
	
}

注:对于NVIC的IRQChannel而言,不一定每一个管脚都有自己独特的中断线,一般而言TIM0-4有自己独特的通道,TIM9_5共用,TIM15_10共用

arr:自动重载的寄存器周期

psc:时间频率的预分频系数

TIME=(arr+1)*1/(CLK/psc)

例:TIMx_Int_Init(4999,7199)

则分频系数为7200,,分频为10KHZ,所以一次中断的时间为1/10khz=10^-4s

所以中断一次的时间为5000*10^-4=0.5s

配置中断服务函数,则小灯每隔0.5s闪烁一次

void TIM3_IRQHandler()
{
	if(TIM_GetITStatus(TIM3, TIM_IT_Update)!=RESET)//判断中断的产生
	{
		TIM_ClearITPendingBit(TIM3,TIM_IT_Update );//清除
		LED1=!LED1;//实现LED1的控制
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值