STM32定时器的应用

来源:本站
导读:目前正在解读《STM32定时器的应用》的相关信息,《STM32定时器的应用》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《STM32定时器的应用》的详细说明。
简介:STM32F106 一共有11个定时器 2个高级定时器,4个普通定时器,2个基本定时,2个看门狗,和一个滴答定时器。

一: 定时器简介

1:高级定时器 计数方式(向上,向下)、预分频值 1—65532、四通道,输出输入捕获,PWM互补输出

2:普通定时器 计数方式(向上,向下)、预分频值 1—65532、四通道,输出输入捕获

3:基本定时器计数方式(向上 )、预分频值 1—65532、

二:定时器配置方法步骤:

在配置前我们要添加定时器的库函数 stm32f10x_tim.c

1:配置中断向量表

2:配置定时器时钟

3:配置定时器

4:使能定时器

5:使能中断

三:事例分析(定时中断3)

1:配置中断向量表

void NVIC_Configuration(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //定时器中断3中断向量

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

2:配置定时器时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

3:配置定时器(初始化)

void TIM_Config(void)

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

//TIM_OCInitTypeDef TIM_OCInitStructure;

TIM_DeInit(TIM3); //复位定时器

TIM_TimeBaseStructure.TIM_Prescaler = 7200-1;// 时钟预分频数

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 定时器模式 向上计数

TIM_TimeBaseStructure.TIM_Period = 9999; // 自动重装载寄存器周期的值( 定时时间 ) 累计 0xFFFF

个频率后产生个更新或者中断 ( 也是说定时时间到 )

定时器时间计算:

每次进入中断服务程序间隔时间为((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+7199)/72M)*(1+9999)=1秒

//72000000/7200=10000

//10000/10000=1s

TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1; // 时间分割值

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); // 初始化定时器

TIM_ClearFlag(TIM3,TIM_FLAG_Update); //清除定时器中断标志

TIM_Cmd(TIM3, ENABLE); // 4:使能定时器

TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); // 打开中断 溢出中断 5:使能中断

四:在主函数运行时调用这三个函数对定时器进行配置即可。

五:定时中断函数的执行

TIME3的定时中断函数的执行在中断向量表中,即 stm32f10x_it.c 文件中。

因为使用的函数库版本不同有的stm32f10x_it.c中给出了void TIM3_IRQHandler(void) {}函数,只需要我们添加相应的中断服务程序即可,如果stm32f10x_it.c文件中没有这个函数我们就自己创建一个同名函数即可。

如:

这个例子是判断中断标志位是否溢出来进入中断,如果溢出就执行中断服务子程序,特别要注意的是在中断服务执行前或者执行后一定要清楚中断标志位,以免影响后面中断的进入。

void TIM3_IRQHandler(void)

{

if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)

{

TIM_ClearITPendingBit(TIM3, TIM_FLAG_Update);

GPIO_WriteBit(GPIOE, GPIO_Pin_3, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_3)));

}

}

提醒:《STM32定时器的应用》最后刷新时间 2024-03-14 01:09:42,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《STM32定时器的应用》该内容的真实性请自行鉴别。