0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32定时器的几种用法

CHANBAEK 来源:博客园-lzh666 作者:博客园-lzh666 2023-02-15 14:06 次阅读

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

}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2265

    文章

    10859

    浏览量

    354527
  • 定时
    +关注

    关注

    1

    文章

    122

    浏览量

    25383
  • 定时器
    +关注

    关注

    23

    文章

    3235

    浏览量

    114378
  • 代码
    +关注

    关注

    30

    文章

    4733

    浏览量

    68277
  • 回调函数
    +关注

    关注

    0

    文章

    87

    浏览量

    11537
收藏 人收藏

    评论

    相关推荐

    STM32有哪几种定时器 STM32高级定时器有哪些功能

    SysTick定时器的功能比较单一,主要是供给系统使用的,系统默认设置为1ms触发一次中断。而用户想要使用自己的定时器STM32提供的用户定时器不但数量多且功能更加强大。
    的头像 发表于 07-27 16:25 4864次阅读
    <b class='flag-5'>STM32</b>有哪<b class='flag-5'>几种</b><b class='flag-5'>定时器</b> <b class='flag-5'>STM32</b>高级<b class='flag-5'>定时器</b>有哪些功能

    单片机定时器用法

    本章以CW32通用定时器为例介绍单片机定时器用法
    的头像 发表于 01-04 10:37 1332次阅读
    单片机<b class='flag-5'>定时器</b>的<b class='flag-5'>用法</b>

    定时器有如下几种功能用法

    实现简述:定时器有如下几种功能用法:1>定时。使用内部时钟源2>PWM调制输出。使用内部时钟源3>脉冲宽度(频率)测量。使用内部时钟源,外部边沿触发4>脉冲数计数。使用外部
    发表于 08-18 06:29

    STM32中的定时器有很多用法

    STM32 定时器(一)——定时器时间的计算STM32定时器是灰常NB的,也是灰常让人头晕的(当然是对于白菜来说的)。
    发表于 08-18 06:22

    stm32定时器中断程序

    STM32定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基本的定时,还可以做PWM输出或者输入捕获功能。 以下是进行
    发表于 10-12 16:59 1.3w次阅读

    STM32定时器基本计数原理解析

    STM32的TIM定时器分为三类:基本定时器、通用定时器和高级定时器。从分类来看就知道STM32
    发表于 12-27 16:20 1.8w次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>定时器</b>基本计数原理解析

    [STM32]通用定时器的使用

    STM32的通用定时器定时、输出PWM功能的使用本次还是使用发光二极管来验证定时器的使用目录STM32的通用
    发表于 11-22 19:06 24次下载
    [<b class='flag-5'>STM32</b>]通用<b class='flag-5'>定时器</b>的使用

    STM32定时器-基本定时器

    目录定时器分类基本定时器功能框图讲解基本定时器功能时钟源计数时钟计数自动重装载寄存
    发表于 11-23 18:21 31次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>定时器</b>-基本<b class='flag-5'>定时器</b>

    定时器用法以及pwm的调速

    今天我们来讲一下定时器用法以及PWM的调速我们最初接触的51单片机有两组定时器(计数),因为既可以定时,又可以计数,因此叫做
    发表于 11-24 21:06 5次下载
    <b class='flag-5'>定时器</b>的<b class='flag-5'>用法</b>以及pwm的调速

    STM32——高级定时器、通用定时器、基本定时器的区别

    STM32——高级定时器、通用定时器、基本定时器的区别
    发表于 11-26 15:21 110次下载
    <b class='flag-5'>STM32</b>——高级<b class='flag-5'>定时器</b>、通用<b class='flag-5'>定时器</b>、基本<b class='flag-5'>定时器</b>的区别

    STM32---定时器知多少

    STM32定时器知多少这里写目录标题STM32---定时器知多少定时器的分类定时器的工作原理
    发表于 11-30 14:36 19次下载
    <b class='flag-5'>STM32</b>---<b class='flag-5'>定时器</b>知多少

    STM32定时器学习---基本定时器

    STM32F1系列的产品,除了互联网产品外,工作8个,3种定时器,其中一种就是基本定时器。那么STM32单片机的基本定时器如何操作以及编程呢
    发表于 12-02 14:06 27次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>定时器</b>学习---基本<b class='flag-5'>定时器</b>

    STM32定时器功能和用法详解

    1. STM32的Timer简介 STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本
    发表于 02-11 15:04 29次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>定时器</b>功能和<b class='flag-5'>用法</b>详解

    STM32定时器几种输出模式

    最近有接触到通过可控硅的方式来控制交流风机或者电烙铁功率,STM32定时器输出比较模式,刚好可以满足这种需求,借此机会总结一下定时器几种输出模式。
    的头像 发表于 01-12 16:49 5441次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>定时器</b>的<b class='flag-5'>几种</b>输出模式

    STM32定时器的分类及中断原理

    本文主要介绍常规定时器中的TIM3,实现定时器中断的功能。STM32定时器的分类在其中一篇文章中已经介绍过,本文主要内容主要介绍定时器的基础
    的头像 发表于 01-12 17:29 7014次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>定时器</b>的分类及中断原理