1、HAL_StatusTypeDef HAL_TIM_Base_Init (TIM_HandleTypeDef * htim)
这个函数属于定时器使用基本的定时功能的初始化函数,它的输入参数为自定义的定时器指针。
TIM_HandleTypeDef TIM3_Handler; //定时器句柄
void TIM3_Init(u16 arr,u16 psc)
{
TIM3_Handler.Instance=TIM3; //通用定时器3
TIM3_Handler.Init.Prescaler=psc; //分频
TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP; //向上计数器
TIM3_Handler.Init.Period=arr; //自动装载值
TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//时钟分频因子
HAL_TIM_Base_Init(&TIM3_Handler);
}
2、HAL_StatusTypeDef HAL_TIM_Base_DeInit (TIM_HandleTypeDef * htim)
复位指定的定时器。使用方法和第一个一样。
3、void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
定时器初始化的回调函数,用来处理优先级和开启定时器时钟等作用。它会自动被第一个函数调用。
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM3)
{
__HAL_RCC_TIM3_CLK_ENABLE(); //使能TIM3时钟
HAL_NVIC_SetPriority(TIM3_IRQn,1,3); //设置中断优先级,抢占优先级1,子优先级3
HAL_NVIC_EnableIRQ(TIM3_IRQn); //开启ITM3中断
}
}
4、void HAL_TIM_Base_MspDeInit (TIM_HandleTypeDef * htim)
复位指定的定时器的回调函数。使用方法和第三个一样。
5、HAL_StatusTypeDef HAL_TIM_Base_Start (TIM_HandleTypeDef * htim)
开启定时器的计时功能,打开定时器。
TIM_HandleTypeDef TIM3_Handler; //定时器句柄
HAL_TIM_Base_Start(&TIM3_Handler); //开启定时器
6、HAL_StatusTypeDef HAL_TIM_Base_Stop (TIM_HandleTypeDef * htim)
关闭定时器使用方法和函数5一样,功能相反。
7、HAL_StatusTypeDef HAL_TIM_Base_Start_IT (TIM_HandleTypeDef * htim)
开启定时器的中断功能,这个中断指的是定时器计数更新中断,最常见的中断。
HAL_TIM_Base_Start_IT(&TIM3_Handler); //使能定时器3和定时器3更新中断:TIM_IT_UPDATE
8、HAL_StatusTypeDef HAL_TIM_Base_Stop_IT (TIM_HandleTypeDef * htim)
关闭定时器的中断功能,使用方法和函数七一样。
9、HAL_StatusTypeDef HAL_TIM_Base_Start_DMA (TIM_HandleTypeDef * htim, uint32_t * pData, uint16_t Length)
使用DMA的方式进行计数。
10、HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA (TIM_HandleTypeDef * htim)
停止DMA的方式进行计数
11、HAL_StatusTypeDef HAL_TIM_OC_Init (TIM_HandleTypeDef * htim)
STM32输出比较模式初始化函数。
HAL_TIM_OC_Init(&htim3)
12、HAL_StatusTypeDef HAL_TIM_OC_Start (TIM_HandleTypeDef * htim, uint32_t Channel)
开启输出比较功能,输出比较常见于PWM功能和输出翻转信号。输出GPIO定时翻转信号的时候需要注意频率为最终50%。如果需要配置一个50毫秒的GPIO翻转信号,需要将定时器的一次完整计数周期设置为100毫秒。
htim3.Instance = TIM3;
htim3.Init.Prescaler = 24000-1;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 1000-1; //一百毫秒
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
{
Error_Handler();
}
.............
sConfigOC.OCMode = TIM_OCMODE_TOGGLE;
sConfigOC.Pulse = 500-1; //50毫秒计时
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_OC_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM3_Init 2 */
HAL_TIM_OC_Start(&htim3,TIM_CHANNEL_4);
13、HAL_StatusTypeDef HAL_TIM_OC_Stop (TIM_HandleTypeDef * htim, uint32_t Channel)
停止输出比较功能,输入参数和函数12一样。
14、HAL_StatusTypeDef HAL_TIM_OC_Start_IT (TIM_HandleTypeDef * htim, uint32_t Channel)
打开输出比较模式的中断,使用中断的方式使用比较输出的模式。他的对应中断回调函数 HAL_TIM_OC_DelayElapsedCallback。
HAL_TIM_OC_Start_IT(&htim3,TIM_CHANNEL_4);
....
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef * htim)
{
if(htim == &htim3)
{
//操作逻辑
}
}
15、HAL_StatusTypeDef HAL_TIM_OC_Stop_IT (TIM_HandleTypeDef * htim, uint32_t Channel)
关闭输出比较模式的中断,使用方法和函数14一样。
16、HAL_StatusTypeDef HAL_TIM_OC_Start_DMA (TIM_HandleTypeDef * htim, uint32_t Channel, uint32_t *pData, uint16_t Length)
开启DMA模式的输出比较功能,此处的pData和长度,可以设置为数据数组为1和长度为1.
uint32_t pdata[1];
HAL_TIM_OC_Start_DMA(&htim3,TIM_CHANNEL_4,pdata,1);
17、HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA (TIM_HandleTypeDef * htim, uint32_t Channel)
关闭DMA模式的输出比较功能。关闭DMA不需要属于四个参数。
mm++;
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);
if(mm==10)
{
HAL_TIM_OC_Stop_DMA(&htim3,TIM_CHANNEL_4);
}
if(mm==20)
{
mm = 0;
HAL_TIM_OC_Start_DMA(&htim3,TIM_CHANNEL_4,pdata,1);
}
18、HAL_StatusTypeDef HAL_TIM_PWM_Init (TIM_HandleTypeDef * htim)
输出比较功能除了翻转GPIO之外还有常用的功能之一就是PWM输出。本函数是用来控制PWM初始化功能。
htim3.Instance = TIM3;
htim3.Init.Prescaler = 240-1;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 1000-1;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
{
Error_Handler();
}
19、HAL_StatusTypeDef HAL_TIM_PWM_Start (TIM_HandleTypeDef * htim, uint32_t Channel)
开启PWM输出。另外设置PWM占空比值的方法是 __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_4,100);
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_4);
20、HAL_StatusTypeDef HAL_TIM_PWM_Stop (TIM_HandleTypeDef * htim, uint32_t Channel)
停止PWM模式输出。
HAL_TIM_PWM_Stop(&htim3,TIM_CHANNEL_4);
21、HAL_StatusTypeDef HAL_TIM_PWM_Start_IT (TIM_HandleTypeDef * htim, uint32_t Channel)
开启PWM模式的中断。他的回调函数是void HAL_TIM_PWM_PulseFinishedCallback (TIM_HandleTypeDef * htim) 或者是 void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef * htim)
HAL_TIM_PWM_Start_IT(&htim3,TIM_CHANNEL_4);
22、HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT (TIM_HandleTypeDef * htim, uint32_t Channel)
关闭PWM模式的中断。使用方法和函数21一样。
23、HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA (TIM_HandleTypeDef * htim, uint32_t Channel, uint32_t *pData, uint16_t Length)
打开PWM的DMA模式输出,
uint32_t pdata[1];
HAL_TIM_PWM_Start_DMA(&htim3,TIM_CHANNEL_4,pdata,1);
24、HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA (TIM_HandleTypeDef * htim, uint32_t Channel)
关闭PWM的DMA模式输出。
HAL_TIM_PWM_Stop_DMA(&htim3,TIM_CHANNEL_4);
25、void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
定时器基本定时中断功能的回调函数,相当重要的函数之一。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM7)
{
__HAL_TIM_CLEAR_FLAG(&TIM7_Handler,TIM_EventSource_Update ); //清除TIM7更新中断标志
HAL_TIM_Base_Stop(&TIM7_Handler);
}
}