STM32F407VG (五)定时器
2015-06-30 20:38
211 查看
一、定时器节本分类和主要特点
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);
}
}
}
![](http://img.blog.csdn.net/20150630203816289?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGl0empt/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](file:///C:/Users/zjm/AppData/Local/YNote/data/qqB3FD7810FABFE63759A9568BABE4C78B/c8dad376c8954f4bbb50065649d17578/tek00001.bmp)
波形很标准吧:)
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);
}
}
}
![](file:///C:/Users/zjm/AppData/Local/YNote/data/qqB3FD7810FABFE63759A9568BABE4C78B/c8dad376c8954f4bbb50065649d17578/tek00001.bmp)
波形很标准吧:)
相关文章推荐
- rgbdslam_v2安装并使用
- jquery中的获取、设置与删除
- 毕业三年有感
- [Material Design]产品设计师的看点
- 数据库的备份与还原
- javascript unshift()和shift()
- 表达式求值引擎
- 我们应该怎样理解:Java中的 “.*;” ???
- Linux服务器管理: 日志管理(一)
- css写三角的方法
- CS50 任务2 笔记
- MyEclipse + Maven开发Web工程的详细配置过程
- C的复习题(01):反转整数
- android菜鸟学习笔记11----Intent的两点补充
- [leetcode]Jump Game
- 09-散列3. Hashing - Hard Version (30)
- cygwin本地.bashrc配置
- Linxu IO测试软件
- 开始玩hadoop4--装hadoop(ubuntu14.04,hadoop-2.6.0,最后还是屈服了java7)
- Java语言学习笔记:0