【stm32f407hal库】定时器定时功能

一、相关API

1、HAL_TIM_Base_Init(TIM_HandleTypeDef *htim);

        参数:TIM_HandleTypeDef结构体指针

        功能:初始化TIM时基单元

2、HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim);

        参数:TIM_HandleTypeDef结构体指针

        功能:TIM时基单元赋初值
3、HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim);

        参数:TIM_HandleTypeDef结构体指针

        功能:回调函数
4、HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim);

        参数:TIM_HandleTypeDef结构体指针

        功能:回调函数
5、HAL_TIM_Base_Start(TIM_HandleTypeDef *htim);

        参数:TIM_HandleTypeDef结构体指针

        功能:启动定时器
6、HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim);

        参数:TIM_HandleTypeDef结构体指针

        功能:停止定时器
7、HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);

        参数:TIM_HandleTypeDef结构体指针

        功能:启动定时器中断
8、HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim);

        参数:TIM_HandleTypeDef结构体指针

        功能:停止定时器中断
9、HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, const uint32_t *pData, uint16_t Length);

        参数:TIM_HandleTypeDef结构体指针,缓冲区地址,数据长度

        功能:启动定时器DMA
10、HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim);

        参数:TIM_HandleTypeDef结构体指针

        功能:停止定时器DMA

二、示例

定时时间计算:1/T=CK_PSC/[(PSC+1)*(ARR+1)]

CK_PSC:时钟频率

PSC:分频系数

ARR:自动重装载值

#include "TIM.h"
#include "LED.h"

TIM_HandleTypeDef TIM1_InitStructure;

void Timer1_Init(void)
{	
	
	TIM1_InitStructure.Instance = TIM1;
	TIM1_InitStructure.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
	TIM1_InitStructure.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;//分频因子
	TIM1_InitStructure.Init.CounterMode = TIM_COUNTERMODE_UP;//计数模式:向上计数
	TIM1_InitStructure.Init.Period = 5000 - 1;//自动重装载值ARR
	TIM1_InitStructure.Init.Prescaler = 16800 - 1;//分频系数PSC
	TIM1_InitStructure.Init.RepetitionCounter = 0;//重复计数器
	
	HAL_TIM_Base_Init(&TIM1_InitStructure);//初始化结构体
	
	HAL_TIM_Base_Start_IT(&TIM1_InitStructure);
}

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
	if(htim->Instance == TIM1)
	{
		__HAL_RCC_TIM1_CLK_ENABLE();//开启TIM1的时钟
		HAL_NVIC_SetPriority(TIM1_UP_TIM10_IRQn,1,1);//设置中断优先级
		HAL_NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);//开启中断
	}
}
 
void TIM1_UP_TIM10_IRQHandler(void)
{
	 HAL_TIM_IRQHandler(&TIM1_InitStructure);
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance == TIM1)
	{
		LED1_Toggle;
	}
}