当前位置: 首页 > 工具软件 > Tim > 使用案例 >

STM32 库函数学习 TIM篇

景才英
2023-12-01

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);
    }
}


 

 类似资料: