STM32F103 TIM3定时器初始化程序

2014-11-23 20:16:32 · 作者: · 浏览: 8
//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中断一次