定时器"/>
STM32F407VG (五)定时器
一、定时器节本分类和主要特点 1.STM32定时器分类: 1)看门狗定时器 2)SysTick定时器 3)RTC定时器4)通用定时器 a)通用定时器TIM2~TIM5, 当中TIM2和TIM5是32位,TIM3和TIM4是16位 具有四个独立通道 中断/DMA事件 支持增量编码器和霍尔传感器
b)通用定时器TIM9~TIM14,16位定时器 最多具有连个独立通道 中断事件
5)基本定时器TIM6,TIM7,16位定时器 同步电路触发DAC 中断/DMA事件
6)高级定时器TIM1。TIM8,16位定时器 具有四个独立通道 中断/DMA事件 支持增量编码器和霍尔传感器 输入信号能够改变计数器状态或复位 可改变定期器寄存器的反复计数器。
二、实例1. 定时中断 1.时钟初始化 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE); TIM_DeInit(TIM2); /* 时钟预分频数 */ //84000000/84=1000000,预分频后时钟为1M TIM_TimeBaseStructure.TIM_Prescaler= (84 - 1); /* 自己主动重装载寄存器周期的值(计数值) */ /* 累计 TIM_Period个频率后产生一个更新或者中断 */ TIM_TimeBaseStructure.TIM_Period =1000-1 ; /* 採样分频 */ TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; /* 向上计数模式 */ TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //调用初始化函数 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); /* 清除溢出中断标志 */ TIM_ClearFlag(TIM2, TIM_FLAG_Update); /*设置产生TIM_FLAG_Update中断*/ TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); /* 开启时钟 */ TIM_Cmd(TIM2, ENABLE);
2. 设置中断向量。具体的解释见本博客有关“中断”部分的文章 1)中断初始化 NVIC_InitTypeDef NVIC_InitStructure; /* Enable TIM2 interrupt IRQ channel */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
2)中断函数 void TIM2_IRQHandler(void) { static unsigned int cpu_counter = 0; if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update); cpu_counter ++; if(cpu_counter >= 500) //等闪烁的周期是1s { cpu_counter = 0; GPIO_ToggleBits(LED1); } } }
波形非常标准吧:)
更多推荐
STM32F407VG (五)定时器
发布评论