金牌会员
 
- 积分
- 1431
- 金钱
- 1431
- 注册时间
- 2020-5-12
- 在线时间
- 393 小时
|
发表于 2020-5-12 13:46:14
|
显示全部楼层
本帖最后由 叶子君 于 2020-5-12 13:52 编辑
#include "stm32f0xx.h"
static int Time_cnt = 0;
/*****************************************************************************************
功 能 : NVIC配置
参 数 : 无
返 回 值 : 无
*****************************************************************************************/
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM14_IRQn; //定时器14中断
NVIC_InitStructure.NVIC_IRQChannelPriority = 2; //优先级2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
//****************************************************************************************
//功能:TIM14初始化
//入参:arr:自动重装寄存器周期的值
// psc:预分频值
// 溢出时间计算 Tout=((arr+1)*(psc+1))/Tclk (us)
//返回:无
//****************************************************************************************
void TIM14_Int_Init(u16 arr, u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM14, ENABLE); //开启TIM14时钟
TIM_TimeBaseStructure.TIM_Period=arr; //设置自动重装寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler=psc; //设置时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //设置时钟分割
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //TIM向上计数
TIM_TimeBaseInit(TIM14,&TIM_TimeBaseStructure); //初始化TIM14
TIM_ITConfig(TIM14,TIM_IT_Update,ENABLE); //允许更新中断
}
//****************************************************************************************
//功能:设置TIM14的开关
//入参:sta: 0关闭;
// 1开启;
//返回:无
//****************************************************************************************
void TIM14_Set(u8 sta)
{
if(sta)
{
TIM_SetCounter(TIM14,0);//计数器清空
TIM_Cmd(TIM14, ENABLE); //使能TIM14
}
else
TIM_Cmd(TIM14, DISABLE);//关闭定时器14
}
/*****************************************************************************************
功 能 : 定时器14中断函数
参 数 : 无
返 回 值 : 无
*****************************************************************************************/
void TIM14_IRQHandler(void)
{
if(TIM_GetITStatus(TIM14,TIM_IT_Update)!=RESET)
{
Time_cnt++;
TIM_ClearITPendingBit(TIM14,TIM_IT_Update);
}
}
//****************************************************************************************
//功能:开始计时
//入参:无
//返回:无
//****************************************************************************************
void start_time(void)
{
Time_cnt = 0;
TIM14_Set(1);
}
//****************************************************************************************
//功能:结束计时
//入参:无
//返回:耗时
//****************************************************************************************
int end_time(void)
{
TIM14_Set(0);
return Time_cnt ;
}
|
|