当前位置:编程学习 > C/C++ >>

STM32F103 TIM3定时器初始化程序

//TIM3 分频
#define	TIM3_DIV1	  (1-1)
#define	TIM3_DIV18	  (18-1)
#define	TIM3_DIV72	  (72-1)


//*************************************
// 函数名:TIM3_NVIC_Configuration
// 描述  :TIM3中断优先级配置
// 输入  :无
// 输出  :无
 	
//*************************************
void TIM3_NVIC_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure; 
    												
    NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;	  //选择中断通道
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //抢占式优先级别值
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;	//响应式中断优先级别值
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;	   //中断使能值
    NVIC_Init(&NVIC_InitStructure);						//根据上述值初始化中断级别
}
//*************************************
// 函数名称:TIM3_BASEInit
// 函数功能:初始化TIM3 为定时模式
// 入口参数:计数个数 分频数
// 出口参数:无
// 返回值  :无
//***************************************
void TIM3_BASEInit(uint16_t Tcon,uint16_t psc)
{

  	RCC->APB1ENR |= 1<<1; //定时器3时钟使能
	TIM3->CR1 |= 1<<7 ;  //设置自动重装载允许
	TIM3->CR1 &= ~(1<<4) ;  //设置向上计数 
	TIM3->ARR = Tcon ; //定时器计数次数
	TIM3->PSC = psc ;  //设置分频数
	TIM3->SR  &= ~0x0001;  //清除溢出标志
//	TIM3->DIER |= 1<<6 ;   //允许触发中断
//	TIM3->EGR |= 0X0001 ;	  //允许产生更新事件
	TIM3->DIER |= 0X0001 ;   //允许更新中断
	TIM3->CR1 |= 0X0001 ;   //允许计数

}
//===系统库操作初始化TIM3=====
void TIM3_BASEInitSys(int16_t Tcon,uint16_t psc)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
    TIM_DeInit(TIM3);            //复位定时器
    TIM_TimeBaseStructure.TIM_Period = Tcon;  //定时器重装载值
    TIM_TimeBaseStructure.TIM_Prescaler = psc ;         //时钟预分频
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;  // 时钟分频
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
    TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);   //初始化定时器的值

    TIM_ClearFlag(TIM3,TIM_FLAG_Update);    //清除定时器中断标志 
    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);  //使能中断
    TIM_Cmd(TIM3,ENABLE);            //开启时钟

}




//---实例应用----
	//用寄存器操作
	TIM3_BASEInit(125,TIM3_DIV72) ; //72M/72 = 1M	125u中断一次

	//用系统库操作
//	TIM3_BASEInitSys(125,TIM3_DIV72) ; 	//72M/72 = 1M	125u中断一次

 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,