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++ ,