码迷,mamicode.com
首页 > 其他好文 > 详细

五、stm32的定时器的几种用法

时间:2019-08-14 23:54:16      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:pre   com   height   reload   产生   init   ann   超时   http   

一、常用的定时功能

 (1)基本、通用、高级定时器都有最基本的定时功能,定时功能用到的函数如下:

HAL_TIM_Base_Init      初始化定时,包括分频、 预装值等。

HAL_TIM_ConfigClockSource  选择定时器的时钟源

HAL_TIM_Base_Start_IT  开始定时器

HAL_TIM_PeriodElapsedCallback  超时后的回调函数

 

(2)Cubemx的配置,不管什么定时器,都是这个配置,注意开启中断,计算好最终的定时器时钟

技术图片

 

(3)代码片段

 1 void MX_TIM12_Init(void)
 2 {
 3   TIM_ClockConfigTypeDef sClockSourceConfig = {0};
 4 
 5   htim12.Instance = TIM12;
 6   htim12.Init.Prescaler = 199;
 7   htim12.Init.CounterMode = TIM_COUNTERMODE_UP;
 8   htim12.Init.Period = 999;
 9   htim12.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
10   htim12.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
11   if (HAL_TIM_Base_Init(&htim12) != HAL_OK)
12   {
13     Error_Handler();
14   }
15   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
16   if (HAL_TIM_ConfigClockSource(&htim12, &sClockSourceConfig) != HAL_OK)
17   {
18       Error_Handler();
19   }
20
21 }
22 
23 int main(void)
24 {
33   HAL_Init();
34 
35   /* USER CODE BEGIN Init */
36 
37   /* USER CODE END Init */
38 
39   /* Configure the system clock */
40   SystemClock_Config();
47   MX_GPIO_Init();
48   MX_TIM12_Init();
49   /* USER CODE BEGIN 2 */
50     HAL_TIM_Base_Start_IT(&htim12);
51   /* USER CODE END 2 */
52 
53   /* Infinite loop */
54   /* USER CODE BEGIN WHILE */
55   while (1)
56   {
57     /* USER CODE END WHILE */
58         HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_13);
59         HAL_Delay(1000);
60     /* USER CODE BEGIN 3 */
61   }
62   /* USER CODE END 3 */
63 }
64 
65 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
66 {
67         if(htim->Instance == TIM12)
68         {
69                 static uint16_t cnt = 0;    
70                 if(++cnt >= 1000)
71                 {
72                         cnt = 0;
73                         HAL_GPIO_TogglePin(GPIOH,GPIO_PIN_9);
74                 }
75         }
76         
77 }

 

 

二、使用通用定时器或者高级定时器来生产PWM波形

(1)使用通用定时器生成1路PWM

a.使用到的定时器API

HAL_TIM_PWM_Init

HAL_TIM_PWM_ConfigChannel

HAL_TIM_PWM_Start

__HAL_TIM_SET_COMPARE

 

b.Cubemx的配置

技术图片

选择内部始终,Channel 1 为PWM生成。

根据配置信息,可知:

定义定时器预分频,定时器实际时钟频率为:200MHz/(GENERAL_TIMx_PRESCALER+1)

 实际时钟频率为:20MHz

 定义定时器周期,当定时器开始计数到GENERAL_TIMx_PERIOD值是更新定时器并生成对应事件和中断

 定时器产生中断频率为:20MHz/(999+1)=20KHz,即50us定时周期

GENERAL_TIM_CH1_PULSE/GENERAL_TIM_PERIOD*100%

所以,以上配置生成的PWM的频率为20KHz,占空比为50%。


c. 代码实现

 

int main(void)
{
  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();
  MX_TIM2_Init();

    HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);

  while (1)
  {
  }
}

void MX_TIM2_Init(void)
{
  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  TIM_MasterConfigTypeDef sMasterConfig = {0};
  TIM_OC_InitTypeDef sConfigOC = {0};

  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 9;
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = 999;
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  {
    Error_Handler();
  }
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 500;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  {
    Error_Handler();
  }
  HAL_TIM_MspPostInit(&htim2);

}

 

五、stm32的定时器的几种用法

标签:pre   com   height   reload   产生   init   ann   超时   http   

原文地址:https://www.cnblogs.com/lzh666/p/11355290.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!