STM32f107定时器应用.docx
《STM32f107定时器应用.docx》由会员分享,可在线阅读,更多相关《STM32f107定时器应用.docx(13页珍藏版)》请在冰豆网上搜索。
![STM32f107定时器应用.docx](https://file1.bdocx.com/fileroot1/2023-1/5/c14964a1-34da-4840-aff5-6a81cc9a49b9/c14964a1-34da-4840-aff5-6a81cc9a49b91.gif)
STM32f107定时器应用
//
//
/****************************************************************************************
**文件名称:
STM32f107T1定时器应用
**功能描述:
**参数:
None
**返回值:
None
**作 者:
汪仁海
**日 期:
2012年2月17日
**---------------------------------------------------------------------------------------
**修改人:
**日 期:
**---------------------------------------------------------------------------------------
*****************************************************************************************/
#include"main.h"
inttime1_NUM;
/*************************************************
函数:
voidTimer1_Configuration(void)
功能:
TIM1配置
参数:
无
返回:
无
定时计算:
(1/(72/(36-1+1)))*2000us=1000us=1ms
**************************************************/
voidTimer1_Configuration(void)
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);//打开TIM1定时器的时钟
TIM_DeInit(TIM1);//TIMx寄存器重设为缺省值
TIM_TimeBaseStructure.TIM_Period=200;//自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler=36-1;//TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//采样分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数模式
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
//清中断,以免一启用中断后立即产生中断
TIM_ClearFlag(TIM1,TIM_FLAG_Update);
TIM_ARRPreloadConfig(TIM1,ENABLE);//允许自动重装载寄存器(ARR)
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);//允许TIM1溢出中断
TIM_Cmd(TIM1,ENABLE);//TIM1开启时钟
time1_NUM=0;
}
/*************************************************
函数:
voidTIM1_IRQHandler(void)
功能:
TIM1中断处理函数
参数:
无
返回:
无
说明:
1ms中断1次
**************************************************/
voidTIM1_UP_IRQHandler(void)
{
if(TIM_GetITStatus(TIM1,TIM_IT_Update)!
=RESET)
{
TIM_ClearITPendingBit(TIM1,TIM_IT_Update);//清除中断标志
if(time1_NUM<=900)//
{
time1_NUM++;
}
else
{
time1_NUM=0;
//Uart1_PutChar(0xfa);
//Uart5_PutChar(0x11);
//Uart3_PutChar(0xdd);
}
//
}
}
//
//
/****************************************************************************************
**文件名称:
STM32f107T2定时器应用
**功能描述:
**参数:
None
**返回值:
None
**作 者:
汪仁海
**日 期:
2012年2月17日
**---------------------------------------------------------------------------------------
**修改人:
**日 期:
**---------------------------------------------------------------------------------------
*****************************************************************************************/
#include"main.h"
inttime2_NUM;
/*************************************************
函数:
voidTimer2_Configuration(void)
功能:
TIM2配置
参数:
无
返回:
无
定时计算:
(1/(72/(36-1+1)))*2000us=1000us=1ms
**************************************************/
voidTimer2_Configuration(void)
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//打开TIM2定时器的时钟
TIM_DeInit(TIM2);//TIMx寄存器重设为缺省值
TIM_TimeBaseStructure.TIM_Period=2000;//自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler=36-1;//TIMx时钟频率除数的预分频值
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_ARRPreloadConfig(TIM2,ENABLE);//允许自动重装载寄存器(ARR)
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//允许TIM2溢出中断
TIM_Cmd(TIM2,ENABLE);//TIM2开启时钟
time2_NUM=0;
}
/*************************************************
函数:
voidTIM2_IRQHandler(void)
功能:
TIM2中断处理函数
参数:
无
返回:
无
说明:
1ms中断1次
**************************************************/
voidTIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update)!
=RESET)
{
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除中断标志
if(time2_NUM<=80)//
{
time2_NUM++;
}
else
{
time2_NUM=0;
//Uart5_PutChar(0x22);
//Uart1_PutChar('2');
}
//
}
}
//
//
/****************************************************************************************
**文件名称:
STM32f107T3定时器应用
**功能描述:
**参数:
None
**返回值:
None
**作 者:
汪仁海
**日 期:
2012年2月17日
**---------------------------------------------------------------------------------------
**修改人:
**日 期:
**---------------------------------------------------------------------------------------
*****************************************************************************************/
#include"main.h"
inttime3_NUM;
/*************************************************
函数:
voidTimer3_Configuration(void)
功能:
TIM3配置
参数:
无
返回:
无
定时计算:
(1/(72/(36-1+1)))*2000us=1000us=1ms
**************************************************/
voidTimer3_Configuration(void)
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//打开TIM3定时器的时钟
TIM_DeInit(TIM3);//TIMx寄存器重设为缺省值
TIM_TimeBaseStructure.TIM_Period=2000;//自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler=36-1;//TIMx时钟频率除数的预分频值
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_ARRPreloadConfig(TIM3,ENABLE);//允许自动重装载寄存器(ARR)
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//允许TIM3溢出中断
TIM_Cmd(TIM3,ENABLE);//TIM3开启时钟
time3_NUM=0;
}
/*************************************************
函数:
voidTIM2_IRQHandler(void)
功能:
TIM3中断处理函数
参数:
无
返回:
无
说明:
1ms中断1次
**************************************************/
voidTIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)!
=RESET)
{
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//清除中断标志
if(time3_NUM<=950)//
{
time3_NUM++;
}
else
{
time3_NUM=0;
//Uart5_PutChar(0x33);
//Uart1_PutChar('3');
}
}
}
//
//
/****************************************************************************************
**文件名称:
STM32f107T4定时器应用
**功能描述:
**参数:
None
**返回值:
None
**作 者:
汪仁海
**日 期:
2012年2月17日
**---------------------------------------------------------------------------------------
**修改人:
**日 期:
**---------------------------------------------------------------------------------------
*****************************************************************************************/
#include"main.h"
inttime4_NUM;
/*************************************************
函数:
voidTimer4_Configuration(void)
功能:
TIM4配置
参数:
无
返回:
无
定时计算:
(1/(72/(36-1+1)))*2000us=1000us=1ms
**************************************************/
voidTimer4_Configuration(void)
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//打开TIM4定时器的时钟
TIM_DeInit(TIM4);//TIMx寄存器重设为缺省值
TIM_TimeBaseStructure.TIM_Period=2000;//自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler=36-1;//TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//采样分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数模式
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);
//清中断,以免一启用中断后立即产生中断
TIM_ClearFlag(TIM4,TIM_FLAG_Update);
TIM_ARRPreloadConfig(TIM4,ENABLE);//允许自动重装载寄存器(ARR)
TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);//允许TIM4溢出中断
TIM_Cmd(TIM4,ENABLE);//TIM4开启时钟
time4_NUM=0;
}
/*************************************************
函数:
voidTIM2_IRQHandler(void)
功能:
TIM4中断处理函数
参数:
无
返回:
无
说明:
1ms中断1次
**************************************************/
voidTIM4_IRQHandler(void)
{
if(TIM_GetITStatus(TIM4,TIM_IT_Update)!
=RESET)
{
TIM_ClearITPendingBit(TIM4,TIM_IT_Update);//清除中断标志
if(time4_NUM<=970)//
{
time4_NUM++;
}
else
{
time4_NUM=0;
//Uart5_PutChar(0x44);
//Uart1_PutChar('4');
}
}
}
//
//
/****************************************************************************************
**文件名称:
STM32f107T5定时器应用
**功能描述:
**参数:
None
**返回值:
None
**作 者:
汪仁海
**日 期:
2012年2月17日
**---------------------------------------------------------------------------------------
**修改人:
**日 期:
**---------------------------------------------------------------------------------------
*****************************************************************************************/
#include"main.h"
inttime5_NUM;
/*************************************************
函数:
voidTimer5_Configuration(void)
功能:
TIM5配置
参数:
无
返回:
无
定时计算:
(1/(72/(36-1+1)))*2000us=1000us=1ms
**************************************************/
voidTimer5_Configuration(void)
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);//打开TIM5定时器的时钟
TIM_DeInit(TIM5);//TIMx寄存器重设为缺省值
TIM_TimeBaseStructure.TIM_Period=2000;//自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler=36-1;//TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//采样分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数模式
TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);
//清中断,以免一启用中断后立即产生中断
TIM_ClearFlag(TIM5,TIM_FLAG_Update);
TIM_ARRPreloadConfig(TIM5,ENABLE);//允许自动重装载寄存器(ARR)
TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE);//允许TIM5溢出中断
TIM_Cmd(TIM5,ENABLE);//TIM5开启时钟
time5_NUM=0;
}
/*************************************************
函数:
voidTIM2_IRQHandler(void)
功能:
TIM5中断处理函数
参数:
无
返回:
无
说明:
1ms中断1次
**************************************************/
voidTIM5_IRQHandler(void)
{
if(TIM_GetITStatus(TIM5,TIM_IT_Update)!
=RESET)
{
TIM_ClearITPendingBit(TIM5,TIM_IT_Update);//清除中断标志
if(time5_NUM<=990)//1000US
{
time5_NUM++;
}
else
{
time5_NUM=0;
//Uart1_PutChar('5');
//Uart5_PutChar(0x55);
}
}
}