当前位置:   article > 正文

STM32 库函数学习 TIM篇_htim->instance==tim3

htim->instance==tim3

1、HAL_StatusTypeDef HAL_TIM_Base_Init (TIM_HandleTypeDef * htim)

这个函数属于定时器使用基本的定时功能的初始化函数,它的输入参数为自定义的定时器指针。

  1. TIM_HandleTypeDef TIM3_Handler; //定时器句柄
  2. void TIM3_Init(u16 arr,u16 psc)
  3. {
  4. TIM3_Handler.Instance=TIM3; //通用定时器3
  5. TIM3_Handler.Init.Prescaler=psc; //分频
  6. TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP; //向上计数器
  7. TIM3_Handler.Init.Period=arr; //自动装载值
  8. TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//时钟分频因子
  9. HAL_TIM_Base_Init(&TIM3_Handler);
  10. }

2、HAL_StatusTypeDef HAL_TIM_Base_DeInit (TIM_HandleTypeDef * htim)

复位指定的定时器。使用方法和第一个一样。

3、void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)

定时器初始化的回调函数,用来处理优先级和开启定时器时钟等作用。它会自动被第一个函数调用。

  1. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
  2. {
  3. if(htim->Instance==TIM3)
  4. {
  5. __HAL_RCC_TIM3_CLK_ENABLE(); //使能TIM3时钟
  6. HAL_NVIC_SetPriority(TIM3_IRQn,1,3); //设置中断优先级,抢占优先级1,子优先级3
  7. HAL_NVIC_EnableIRQ(TIM3_IRQn); //开启ITM3中断
  8. }
  9. }

4、void HAL_TIM_Base_MspDeInit (TIM_HandleTypeDef * htim)

复位指定的定时器的回调函数。使用方法和第三个一样。

5、HAL_StatusTypeDef HAL_TIM_Base_Start (TIM_HandleTypeDef * htim)

开启定时器的计时功能,打开定时器。

  1. TIM_HandleTypeDef TIM3_Handler; //定时器句柄
  2. 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毫秒。

  1. htim3.Instance = TIM3;
  2. htim3.Init.Prescaler = 24000-1;
  3. htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  4. htim3.Init.Period = 1000-1; //一百毫秒
  5. htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  6. htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  7. if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
  8. {
  9. Error_Handler();
  10. }
  11. .............
  12. sConfigOC.OCMode = TIM_OCMODE_TOGGLE;
  13. sConfigOC.Pulse = 500-1; //50毫秒计时
  14. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  15. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  16. if (HAL_TIM_OC_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
  17. {
  18. Error_Handler();
  19. }
  20. /* USER CODE BEGIN TIM3_Init 2 */
  21. 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。

  1. HAL_TIM_OC_Start_IT(&htim3,TIM_CHANNEL_4);
  2. ....
  3. void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef * htim)
  4. {
  5. if(htim == &htim3)
  6. {
  7. //操作逻辑
  8. }
  9. }

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.

  1. uint32_t pdata[1];
  2. 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不需要属于四个参数。

  1. mm++;
  2. HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);
  3. if(mm==10)
  4. {
  5. HAL_TIM_OC_Stop_DMA(&htim3,TIM_CHANNEL_4);
  6. }
  7. if(mm==20)
  8. {
  9. mm = 0;
  10. HAL_TIM_OC_Start_DMA(&htim3,TIM_CHANNEL_4,pdata,1);
  11. }

18、HAL_StatusTypeDef HAL_TIM_PWM_Init (TIM_HandleTypeDef * htim)

输出比较功能除了翻转GPIO之外还有常用的功能之一就是PWM输出。本函数是用来控制PWM初始化功能。

  1. htim3.Instance = TIM3;
  2. htim3.Init.Prescaler = 240-1;
  3. htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  4. htim3.Init.Period = 1000-1;
  5. htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  6. htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  7. if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
  8. {
  9. Error_Handler();
  10. }
  11. if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
  12. {
  13. Error_Handler();
  14. }

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模式输出,

  1. uint32_t pdata[1];
  2. 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) 

定时器基本定时中断功能的回调函数,相当重要的函数之一。

  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  2. {
  3. if(htim->Instance == TIM7)
  4. {
  5. __HAL_TIM_CLEAR_FLAG(&TIM7_Handler,TIM_EventSource_Update ); //清除TIM7更新中断标志
  6. HAL_TIM_Base_Stop(&TIM7_Handler);
  7. }
  8. }


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/912851
推荐阅读
相关标签
  

闽ICP备14008679号