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
    +关注

    关注

    2239

    文章

    10674

    浏览量

    348775
  • 定时
    +关注

    关注

    1

    文章

    120

    浏览量

    25188
  • 定时器
    +关注

    关注

    23

    文章

    3148

    浏览量

    112041
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66776
  • 回调函数
    +关注

    关注

    0

    文章

    87

    浏览量

    11455
收藏 人收藏

    评论

    相关推荐

    单片机定时器用法

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

    定时器的基本用法是什么

    定时器是单片机里非常重要的一个模块,必须熟练掌握,本篇按这样的顺序展开:一、简单介绍定时器二、定时器基本用法三、定时器高级使用技巧(linu
    发表于 07-16 09:01

    STM32F4几种定时器的区别

    STM32F407有14个定时器,其中有12个16位的定时器,2个32位的定时器几种定时器的区
    发表于 07-16 09:38

    STM32定时器资源

    、设置RCC2、时钟树配置3、配置TIM34、设置工程文件等等三、程序设计四、HAL库中定时器相关的函数与其用法一、STM32定时器资源STM32
    发表于 08-11 08:31

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

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

    STM32中的定时器有很多用法

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

    STM32常见的定时器是哪几种

    STM32常见的定时器是哪几种
    发表于 11-18 07:10

    stm32定时器有哪几种

    stm32定时器有哪几种
    发表于 11-23 06:48

    STM32 TIM的几种定时器有何不同

    STM32的SysTick定时器是什么意思?STM32 TIM的几种定时器有何不同?
    发表于 11-23 07:22

    STM32定时器-基本定时器

    目录定时器分类基本定时器功能框图讲解基本定时器功能时钟源计数器时钟计数器自动重装载寄存器定时时间的计算定时器初始化结构体详解实验
    发表于 11-23 18:21 28次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>定时器</b>-基本<b class='flag-5'>定时器</b>

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

    STM32——高级定时器、通用定时器、基本定时器的区别
    发表于 11-26 15:21 109次下载
    <b class='flag-5'>STM32</b>——高级<b class='flag-5'>定时器</b>、通用<b class='flag-5'>定时器</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 27次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>定时器</b>功能和<b class='flag-5'>用法</b>详解

    STM32定时器几种输出模式

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

    AWTK 开源串口屏开发(6) - 定时器用法

    定时器是个常用的功能,AWTK串口屏提供了丰富的定时器函数,用于定时器的启动、停止、暂停、恢复、修改和重置等功能,本文以计时器的例子来介绍定时器的基本
    的头像 发表于 01-13 08:24 163次阅读
    AWTK 开源串口屏开发(6) - <b class='flag-5'>定时器</b>的<b class='flag-5'>用法</b>