STM32学习之旅定时器的使用

    xiaoxiao2025-06-05  27

    stm32中有着三种定时器:两个高级定时器(TIM1,TIM8),四个通用定时器(TIM2 TIM3 TIM4 TIM5)和基本定时器(TIM6和TIM7)。我用的是通用定时器2来定时,每一秒就让LED闪烁一下,定时器的强大之处表示让新手的我吃了很大的苦头,对于别的功能一时也不理解,所以想知道定时器的具体工作原理的小伙伴门看一下视频或资料,这里贴上一个前辈的文章:https://blog.csdn.net/liming0931/article/details/82938522 定时器的定时中断功能还是比较简单的,无非就是配置三个寄存器:控制寄存器(TIM_CR1),预分频器( TIM_PSC)和 自动重装载寄存器(TIM_ARR),其中定时器的时间公式为: Tout = ((arr+1)*(psc+1))/Tclk,arr就是指设定的值,计时器一旦超过或者低过就产生中断信号,psc指的是预分频的值,Tclk是指时钟的频率,一般默认72MHZ,贴上代码:

    #include "Time.h" void Time_Init() { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); TIM_TimeBaseInitTypeDef time; time.TIM_Period=7199; //arr=7199 time.TIM_CounterMode=TIM_CounterMode_Up; //向上计数 time.TIM_Prescaler=9999; //PSC=9999 TIM_TimeBaseInit(TIM2,&time); TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); NVIC_InitTypeDef nvic; nvic.NVIC_IRQChannel=TIM2_IRQn; nvic.NVIC_IRQChannelPreemptionPriority=2; nvic.NVIC_IRQChannelSubPriority=2; nvic.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&nvic); } void TIM2_IRQHandler() { Led_YellowTurn(); TIM_ClearITPendingBit(TIM2,TIM_IT_Update); }

    时间= ((arr+1)(psc+1))/Tclk =((7199+1)(9999+1))/7200HZ(1M=10的6次方) =1s

    最新回复(0)