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

一、常用的定时功能

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

}

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

时间: 2024-10-17 13:56:20

五、stm32的定时器的几种用法的相关文章

STM32 通用定时器的几种配置方式

STM32 通用定时器的几种配置方式 //------------------------------------------------------------------------------ // 1.普通定时使用 #include"stm32f10x.h" #include"time.h" static Time_NVIC_Config( void ) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_SetVecto

(转) java定时器的几种用法

1 package com.lid; 2 3 import java.util.Calendar; 4 import java.util.Date; 5 import java.util.Timer; 6 import java.util.TimerTask; 7 8 // 第一种方法:设定指定任务task在指定时间time执行 schedule(TimerTask task, Date time) 9 public static void timer1() { 10 Timer timer =

java定时器的几种用法

package com.lid; import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class Test { public static void main(String[] args) { //timer1(); timer2(); //timer3(); //timer4(); } // 第一种方法:设定指定任务task在指定

java定时器的几种用法[转]

1 import java.util.Calendar;   2 import java.util.Date;   3 import java.util.Timer;   4 import java.util.TimerTask;   5    6 public class Test {   7     public static void main(String[] args) {   8         //timer1();   9         timer2();  10       

c# wpf定时器的一种用法

1.xaml页面 <Window x:Class="EssentialWPF.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350"

C#this的五种用法

this的五种用法: 1.使用被掩盖的成员变量: class AA { int a; public void set1(int a) { this.a = a;//right } public void set2(int a) { a = a;//会有警告:“对同一变量进行赋值:是否希望对其他变量赋值?”: } } 2.把这个对象传给其他函数 using System; using System.Collections.Generic; using System.Linq; using Syst

Wix 安装部署教程(十五) --CustomAction的七种用法

在WIX中,CustomAction用来在安装过程中执行自定义行为.比如注册.修改文件.触发其他可执行文件等.这一节主要是介绍一下CustomAction的7种用法. 在此之前要了解InstallExecuteSequence,它是一个Action的执行序列. Installer会按照默认顺序来执行这些Action.通过字面意思也大概知道这些Action的目的.这些方法不是每次一都执行,分安装和卸载.如果CustomAction没有指定,很可能会安装卸载的时候都会执行一次. • AppSearc

stm32 PWM &amp; 定时器总结

学习后发现stm32的定时器功能确实很强大,小总结一下方便以后使用的时候做参考.Stm32定时器一共分为三种:tim1和tim8是高级定时器,6和7是基本定时器,2-5是通用定时器.从名字就可以看得出来主要功能上的差异.今天我主要是用定时器做pwm输出,所以总结也主要是针对pwm方面的. 先大致说下通用和高级定时器的区别.通用的可以输出四路pwm信号互不影响.高级定时器可以输出三对互补pwm信号外加ch4通道,也就是一共七路. 所以这样算下来stm32一共可以生成4*5+7*2=30路pwm信号

jsp中include的两种用法

JSP中的include的两种用法 1.两种用法 <%@ include file=” ”%> <jsp:include page=” ” flush=”true”/> 2.用法区别 (1)执行时间上区别 <%@ include file=”relativeURI”%>                   是在翻译阶段执行 <jsp:include page=”relativeURI” flush=”true” />  在请求处理阶段执行. (2)引入内容的