0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32定時(shí)器的幾種用法

CHANBAEK ? 來源:博客園-lzh666 ? 作者:博客園-lzh666 ? 2023-02-15 14:06 ? 次閱讀

stm32定時(shí)器的幾種用法

一、常用的定時(shí)功能

(1)基本、通用、高級(jí)定時(shí)器都有最基本的定時(shí)功能,定時(shí)功能用到的函數(shù)如下:

HAL_TIM_Base_Init 初始化定時(shí),包括分頻、 預(yù)裝值等。

HAL_TIM_ConfigClockSource 選擇定時(shí)器的時(shí)鐘

HAL_TIM_Base_Start_IT 開始定時(shí)器

HAL_TIM_PeriodElapsedCallback 超時(shí)后的回調(diào)函數(shù)

(2)Cubemx的配置,不管什么定時(shí)器,都是這個(gè)配置,注意開啟中斷,計(jì)算好最終的定時(shí)器時(shí)鐘

(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 }

二、使用通用定時(shí)器或者高級(jí)定時(shí)器來生產(chǎn)PWM波形

(1)使用通用定時(shí)器生成1路PWM

a.使用到的定時(shí)器API

HAL_TIM_PWM_Init

HAL_TIM_PWM_ConfigChannel

HAL_TIM_PWM_Start

__HAL_TIM_SET_COMPARE

b.Cubemx的配置

選擇內(nèi)部始終,Channel 1 為PWM生成。

根據(jù)配置信息,可知:

定義定時(shí)器預(yù)分頻,定時(shí)器實(shí)際時(shí)鐘頻率為:200MHz/(GENERAL_TIMx_PRESCALER+1)

實(shí)際時(shí)鐘頻率為:20MHz

定義定時(shí)器周期,當(dāng)定時(shí)器開始計(jì)數(shù)到GENERAL_TIMx_PERIOD值是更新定時(shí)器并生成對應(yīng)事件和中斷

定時(shí)器產(chǎn)生中斷頻率為:20MHz/(999+1)=20KHz,即50us定時(shí)周期

GENERAL_TIM_CH1_PULSE/GENERAL_TIM_PERIOD*100%

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

c. 代碼實(shí)現(xiàn)

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

}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2257

    文章

    10828

    瀏覽量

    352468
  • 定時(shí)
    +關(guān)注

    關(guān)注

    1

    文章

    122

    瀏覽量

    25317
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3218

    瀏覽量

    113676
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67765
  • 回調(diào)函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    87

    瀏覽量

    11508
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32有哪幾種定時(shí)器 STM32高級(jí)定時(shí)器有哪些功能

    SysTick定時(shí)器的功能比較單一,主要是供給系統(tǒng)使用的,系統(tǒng)默認(rèn)設(shè)置為1ms觸發(fā)一次中斷。而用戶想要使用自己的定時(shí)器,STM32提供的用戶定時(shí)器不但數(shù)量多且功能更加強(qiáng)大。
    的頭像 發(fā)表于 07-27 16:25 ?4616次閱讀
    <b class='flag-5'>STM32</b>有哪<b class='flag-5'>幾種</b><b class='flag-5'>定時(shí)器</b> <b class='flag-5'>STM32</b>高級(jí)<b class='flag-5'>定時(shí)器</b>有哪些功能

    單片機(jī)定時(shí)器用法

    本章以CW32通用定時(shí)器為例介紹單片機(jī)定時(shí)器用法
    的頭像 發(fā)表于 01-04 10:37 ?1162次閱讀
    單片機(jī)<b class='flag-5'>定時(shí)器</b>的<b class='flag-5'>用法</b>

    定時(shí)器有如下幾種功能用法

    實(shí)現(xiàn)簡述:定時(shí)器有如下幾種功能用法:1>定時(shí)。使用內(nèi)部時(shí)鐘源2>PWM調(diào)制輸出。使用內(nèi)部時(shí)鐘源3>脈沖寬度(頻率)測量。使用內(nèi)部時(shí)鐘源,外部邊沿觸發(fā)4>脈沖數(shù)計(jì)數(shù)。使用外部
    發(fā)表于 08-18 06:29

    STM32中的定時(shí)器有很多用法

    STM32 定時(shí)器(一)——定時(shí)器時(shí)間的計(jì)算STM32定時(shí)器是灰常NB的,也是灰常讓人頭暈的(當(dāng)然是對于白菜來說的)。
    發(fā)表于 08-18 06:22

    stm32定時(shí)器中斷程序

    STM32定時(shí)器是個(gè)強(qiáng)大的模塊,定時(shí)器使用的頻率也是很高的,定時(shí)器可以做一些基本的定時(shí),還可以做PWM輸出或者輸入捕獲功能。 以下是進(jìn)行
    發(fā)表于 10-12 16:59 ?1.3w次閱讀

    STM32定時(shí)器基本計(jì)數(shù)原理解析

    STM32的TIM定時(shí)器分為三類:基本定時(shí)器、通用定時(shí)器和高級(jí)定時(shí)器。從分類來看就知道STM32
    發(fā)表于 12-27 16:20 ?1.8w次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b>基本計(jì)數(shù)原理解析

    [STM32]通用定時(shí)器的使用

    STM32的通用定時(shí)器定時(shí)、輸出PWM功能的使用本次還是使用發(fā)光二極管來驗(yàn)證定時(shí)器的使用目錄STM32的通用
    發(fā)表于 11-22 19:06 ?24次下載
    [<b class='flag-5'>STM32</b>]通用<b class='flag-5'>定時(shí)器</b>的使用

    STM32定時(shí)器-基本定時(shí)器

    目錄定時(shí)器分類基本定時(shí)器功能框圖講解基本定時(shí)器功能時(shí)鐘源計(jì)數(shù)時(shí)鐘計(jì)數(shù)自動(dòng)重裝載寄存
    發(fā)表于 11-23 18:21 ?31次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b>-基本<b class='flag-5'>定時(shí)器</b>

    定時(shí)器用法以及pwm的調(diào)速

    今天我們來講一下定時(shí)器用法以及PWM的調(diào)速我們最初接觸的51單片機(jī)有兩組定時(shí)器(計(jì)數(shù)),因?yàn)榧瓤梢?b class='flag-5'>定時(shí),又可以計(jì)數(shù),因此叫做
    發(fā)表于 11-24 21:06 ?5次下載
    <b class='flag-5'>定時(shí)器</b>的<b class='flag-5'>用法</b>以及pwm的調(diào)速

    STM32——高級(jí)定時(shí)器、通用定時(shí)器、基本定時(shí)器的區(qū)別

    STM32——高級(jí)定時(shí)器、通用定時(shí)器、基本定時(shí)器的區(qū)別
    發(fā)表于 11-26 15:21 ?110次下載
    <b class='flag-5'>STM32</b>——高級(jí)<b class='flag-5'>定時(shí)器</b>、通用<b class='flag-5'>定時(shí)器</b>、基本<b class='flag-5'>定時(shí)器</b>的區(qū)別

    STM32---定時(shí)器知多少

    STM32定時(shí)器知多少這里寫目錄標(biāo)題STM32---定時(shí)器知多少定時(shí)器的分類定時(shí)器的工作原理
    發(fā)表于 11-30 14:36 ?19次下載
    <b class='flag-5'>STM32</b>---<b class='flag-5'>定時(shí)器</b>知多少

    STM32定時(shí)器學(xué)習(xí)---基本定時(shí)器

    STM32F1系列的產(chǎn)品,除了互聯(lián)網(wǎng)產(chǎn)品外,工作8個(gè),3種定時(shí)器,其中一種就是基本定時(shí)器。那么STM32單片機(jī)的基本定時(shí)器如何操作以及編程呢
    發(fā)表于 12-02 14:06 ?27次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b>學(xué)習(xí)---基本<b class='flag-5'>定時(shí)器</b>

    STM32定時(shí)器功能和用法詳解

    1. STM32的Timer簡介 STM32中一共有11個(gè)定時(shí)器,其中2個(gè)高級(jí)控制定時(shí)器,4個(gè)普通定時(shí)器和2個(gè)基本
    發(fā)表于 02-11 15:04 ?29次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b>功能和<b class='flag-5'>用法</b>詳解

    STM32定時(shí)器幾種輸出模式

    最近有接觸到通過可控硅的方式來控制交流風(fēng)機(jī)或者電烙鐵功率,STM32定時(shí)器輸出比較模式,剛好可以滿足這種需求,借此機(jī)會(huì)總結(jié)一下定時(shí)器幾種輸出模式。
    的頭像 發(fā)表于 01-12 16:49 ?5147次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b>的<b class='flag-5'>幾種</b>輸出模式

    STM32定時(shí)器的分類及中斷原理

    本文主要介紹常規(guī)定時(shí)器中的TIM3,實(shí)現(xiàn)定時(shí)器中斷的功能。STM32定時(shí)器的分類在其中一篇文章中已經(jīng)介紹過,本文主要內(nèi)容主要介紹定時(shí)器的基礎(chǔ)
    的頭像 發(fā)表于 01-12 17:29 ?6730次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b>的分類及中斷原理