国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32CubeMX教程5 TIM 定時器概述及基本定時器

這篇具有很好參考價值的文章主要介紹了STM32CubeMX教程5 TIM 定時器概述及基本定時器。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、準備材料

開發(fā)板(STM32F407G-DISC1)

STM32CubeMX軟件(Version 6.10.0)

keil μVision5 IDE(MDK-Arm)

ST-LINK/V2驅動

邏輯分析儀nanoDLA

2、實驗目標

使用STM32CubeMX軟件配置STM32F407開發(fā)板使用基本定時器TIM6實現(xiàn)每500ms控制綠燈狀態(tài)變化一次,基本定時器TIM7實現(xiàn)每1s控制紅燈狀態(tài)變化一次

3、定時器概述

STM32F407擁有2個基礎定時器、10個通用定時器和2個高級定時器,14個定時器全部掛載在APB1和APB2時鐘總線上,APB2時鐘總線時鐘頻率最高可達84MHz,APB1時鐘總線時鐘頻率最高可達42MHz,除TIM2和TIM5為32位外,其余定時器全部為16位,其結構框圖如下圖所示 (注釋1)

?不同的定時器具有不同的特性,有些定時器的計數(shù)器長度為16位,有些則為32位;有些定時器可以遞增、遞減或遞增/遞減計數(shù),但有些定時器只能遞增計數(shù);有些定時器可以產(chǎn)生DMA請求,有些則不可以;另外定時器捕獲/比較通道數(shù)量也不一樣;具體特性區(qū)別請看下表 (注釋2)

?4、實驗流程

4.0、前提知識

基本定時器由TIM6和TIM7組成,計數(shù)器為16位,內(nèi)部結構較為簡單,只有定時器的基本功能,可以做定時或驅動DAC,本實驗暫不討論DAC,只用定時功能,如下圖所示為基本定時器框架 (注釋3)

?基本定時器的時鐘來源為APB1 Timer clocks,當通過控制器啟動基本定時器TIM6/7時,時鐘信號經(jīng)過PSC預分頻器將時鐘分頻,然后以分頻后的時鐘頻率增加計數(shù)器的值,當計數(shù)器達到自動重載寄存器設置的值之后,產(chǎn)生溢出

4.1、CubeMX相關配置

4.1.0、工程基本配置

打開STM32CubeMX軟件,單擊ACCESS TO MCU SELECTOR選擇開發(fā)板MCU(選擇你使用開發(fā)板的主控MCU型號),選中MCU型號后單擊頁面右上角Start Project開始工程,具體如下圖所示

?開始工程之后在配置主頁面System Core/RCC中配置HSE/LSE晶振,在System Core/SYS中配置Debug模式,具體如下圖所示

?詳細工程建立內(nèi)容讀者可以閱讀“STM32CubeMX教程1 工程建立”

4.1.1、時鐘樹配置

基本定時器涉及到定時時間的問題,而TIM6/7的時鐘來源自APB1 Timer clocks,因此需要先知道APB1 Timer clocks的頻率,才可以計算基本定時器的溢出時間

如下圖所示,時鐘樹上所有總線頻率均設置為了STM32F4能達到的最高頻率,此時APB1 Timer clocks=84MHz

4.1.2、外設參數(shù)配置

在Pinout & Configuration頁面左側功能分類欄目中點開Timers欄目,單擊欄目下的TIM6和TIM7

在頁面中間TIM6/7 Mode and Configuration 中勾選Activated激活基本定時器,One Pulse Mode為單次定時模式,勾選該模式則定時器只觸發(fā)一次,默認定時器為連續(xù)觸發(fā),觸發(fā)完一次后自動重載ARR中設置的值重新計數(shù)

在頁面中間Configuration欄中可設置基本定時器參數(shù),包括 Prescaler (預分頻系數(shù))、 Counter Mode (計數(shù)模式)和 Counter Period (ARR寄存器的值)通過這些參數(shù)的設置可以決定基本定時器的溢出時間

APB1 Timer clocks=84MHz,PSC=8399,ARR=4999,此時可計算溢出時間為(PSC+1)(ARR+1)/APB1 Timer clocks=0.5秒=500毫秒,則每500ms定時器產(chǎn)生一次溢出,ARR設置為9999則定時器1s溢出一次

auto-reload preload :可以選擇使能或不使能,如果不使能該參數(shù),則在使用__HAL_TIM_SET_AUTORELOAD()函數(shù)動態(tài)修改基本定時器ARR參數(shù)值時,修改的值會立馬生效;而如果使能該參數(shù),則修改的值會在當前計數(shù)溢出之后下次得到修改

Trigger Output (TRGO) Parameters :一般是用來設置用作其他外設的觸發(fā)源的,比如將Trigger Event Selection選擇為Update Event,然后在其他外設比如ADC中配置外部觸發(fā)源時選擇該定時器的觸發(fā)事件(如果可以的話),這樣在定時器產(chǎn)生Update Event時就可以啟動外設,實現(xiàn)用定時器來控制外設啟動的功能

上述配置如下圖所示

4.1.3、外設中斷配置

基本定時器的觸發(fā)有三種模式 ① 輪詢方式、② 中斷方式和③ DMA方式,這里只介紹前兩種方式

① 對于輪詢方式,當前設置已經(jīng)足夠,只需要在生成的程序中使用HAL_TIM_Base_Start(&htim6)啟動基本定時器,然后不斷輪詢計數(shù)值或UEV事件標志來判斷是否發(fā)生了計數(shù)溢出

② 中斷方式是基本定時器最常用的方式,在Pinout & Configuration頁面左側功能分類欄目中點開NVIC欄目,然后選擇合適的中斷優(yōu)先級并勾選基本定時器6和7的中斷使能

4.2、生成代碼

4.2.0、配置Project Manager頁面

單擊進入Project Manager頁面,在左邊Project分欄中修改工程名稱、工程目錄和工具鏈,然后在Code Generator中勾選“Gnerate peripheral initialization as a pair of 'c/h' files per peripheral”,最后單擊頁面右上角GENERATE CODE生成工程,具體如下圖所示

詳細Project Manager配置內(nèi)容讀者可以閱讀“STM32CubeMX教程1 工程建立”實驗3.4.3小節(jié)

4.2.1、外設初始化調(diào)用流程

在工程代碼主函數(shù)main()中調(diào)用MX_TIM6_Init()函數(shù)對基本定時器TIM6參數(shù)進行了配置

在該MX_TIM6_Init()函數(shù)中調(diào)用了HAL_TIM_Base_Init()對定時器進行了初始化

然后在HAL_TIM_Base_Init()函數(shù)中調(diào)用了HAL_TIM_Base_MspInit()函數(shù)對TIM6時鐘和中斷設置/使能

TIM7初始化流程類似,具體定時器TIM6初始化流程如下圖所示

4.2.2、外設中斷調(diào)用流程

激活了基本定時器并啟動TIM6/7全局中斷之后,會在stm32f4xx_it.c中新增TIM6/7的中斷服務函數(shù)TIM6_DAC_IRQHandler()和TIM7_IRQHandler()

該函數(shù)均調(diào)用HAL庫的定時器中斷統(tǒng)一處理函數(shù)HAL_TIM_IRQHandler(),該函數(shù)通過一系列的判斷最終得出基本定時器目的為周期回調(diào) (注釋4),因此最終調(diào)用周期回調(diào)函數(shù)HAL_TIM_PeriodElapsedCallback(),該函數(shù)為虛函數(shù)

TIM7中斷調(diào)用流程類似,具體定時器TIM6中斷調(diào)用流程如下圖所示

4.2.3、添加其他必要代碼

重新在tim.c中實現(xiàn)周期回調(diào)函數(shù)HAL_TIM_PeriodElapsedCallback(),當定時器TIM6溢出則翻轉GREEN_LED引腳狀態(tài),當定時器TIM7溢出則翻轉RED_LED引腳狀態(tài),具體代碼如下圖所示

?源代碼如下

/*基本定時器周期回調(diào)函數(shù)*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim == &htim6)
    {
        HAL_GPIO_TogglePin(GREEN_LED_GPIO_Port, GREEN_LED_Pin) ;
    }
 
    if(htim == &htim7)
    {
        HAL_GPIO_TogglePin(RED_LED_GPIO_Port, RED_LED_Pin) ;
    }
}

在主函數(shù)中以中斷方式啟動基本定時器TIM6/7,具體代碼如下圖所示

5、常用函數(shù)

/*以輪詢工作方式啟動定時器*/
HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim)
 
/*停止輪詢工作方式的定時器*/
HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim)
 
/*以中斷工作方式啟動定時器*/
HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
 
/*停止中斷工作方式的定時器*/
HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim)
 
/*定時器周期回調(diào)子函數(shù)*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

6、燒錄驗證

燒錄程序,開發(fā)板上電后觀察現(xiàn)象為綠燈每隔500ms狀態(tài)改變一次,紅燈每隔1s狀態(tài)改變一次

使用邏輯分析儀監(jiān)測PD12/14引腳狀態(tài),可以看出TIM6每500ms翻轉一次PD12引腳狀態(tài),TIM7每1000ms翻轉一次PD14引腳狀態(tài)

7、注釋詳解

注釋1:圖片來源STM32F407VGT6 Datasheet DS8626

注釋2:圖片來源 STM32 CubeMX 學習:003-定時器(其原表有錯誤)

注釋3:圖片來源STM32F4xx中文參考手冊

注釋4:具體過程請參看 HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim) 函數(shù)詳解文章來源地址http://www.zghlxwxcb.cn/news/detail-776469.html

到了這里,關于STM32CubeMX教程5 TIM 定時器概述及基本定時器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 野火STM32電機系列(五)Cubemx配置高級定時器TIM1

    野火STM32電機系列(五)Cubemx配置高級定時器TIM1

    鴿了一段時間,放心不會斷的哈,目前僅僅是顯示屏壞了,不影響后面項目 前文已經(jīng)配置了GPIO、編碼器 本節(jié)講解CubeMX高級定時器TIM1配置帶死區(qū)的6路互補的PWM 同時配置信號觸發(fā)后續(xù)ADC采集 板子引角的原理圖如下 對應的: Motor1--U+--PA8--TIM1_CH1 Motor1--U---PB13--TIM1_CH1N Motor1--V+--

    2024年02月15日
    瀏覽(27)
  • STM32—定時器(TIM)_基本定時

    STM32—定時器(TIM)_基本定時

    本文主要通過介紹定時器基本結構去學習如何使用定時器進行定時。 定時器可以對輸入的時鐘進行計數(shù),并在計數(shù)值達到設定值時觸發(fā)中斷,從而達到計時功能。 本文從通用定時器介紹。本文所使用芯片為 STM32F103C8T6,擁有TIM1-TIM4 四個定時器資源。 圖.2為基本定時器結構 ?

    2024年02月02日
    瀏覽(24)
  • STM32中TIM定時器定時功能詳解(適用基本,通用,高級定時器)

    STM32中TIM定時器定時功能詳解(適用基本,通用,高級定時器)

    定時器有高級定時器、通用定時器、基本定時器三種類型。具體功能如下。 上面是每種定時器所具有的功能。 我們可以看到每種定時器都有一個定時功能,(可能是名字的由來吧)。當然,每個定時器都可以來使用定時功能,但是我們往往在基本定時器和通用定時器上面使用

    2024年01月19日
    瀏覽(31)
  • STM32—TIM:基本定時器(輸入捕獲:測頻率、周期)(標準庫)

    STM32—TIM:基本定時器(輸入捕獲:測頻率、周期)(標準庫)

    ?頻率測量: ?頻率中界頻率:適用測周法 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 頻率中界頻率:適用測頻法 第一步:配置GPIO,TIM的時基單元 ? ? ? ? ? ? ?在配置TIM的時基單元參數(shù)有些許不同。 初始化輸入捕獲單元:void TIM_ICInit(); ? 配置觸發(fā)

    2024年02月13日
    瀏覽(32)
  • STM32開發(fā)(10)----CubeMX配置基本定時器

    STM32開發(fā)(10)----CubeMX配置基本定時器

    本章介紹使用STM32CubeMX對基本定時器進行配置的方法,STM32F103高性能系列設備包括基本定時器、高級控制定時器、通用定時器、看門狗定時器和 SysTick 定時器,但是STM32F103C6t6上資源比較有限(高級定時器TIM1,通用定時器TIM2和TIM3),沒有真正的基本定時器,其實通用定時器和

    2024年02月16日
    瀏覽(20)
  • 基于STM32CubeMX和keil采用STM32F407的基本定時器中斷實現(xiàn)LED閃爍

    基于STM32CubeMX和keil采用STM32F407的基本定時器中斷實現(xiàn)LED閃爍

    定時器有三種,基本定時器,通用定時器,以及高級定時器。 這篇博客以最簡單的基本定時器為例,實現(xiàn)LED的閃爍。 后面兩種定時器的用法后面再寫。 實現(xiàn)功能: TIM6控制LED每隔0.5s變一次狀態(tài)。 TIM7控制LED1常量2s后熄滅。 因為都是用到LED,所以和上一篇基于STM32CubeMX與keil采

    2024年02月04日
    瀏覽(25)
  • 基于CubeMX(hal庫)stm32中hrtim高分辨率定時器的基本使用(自存)

    基于CubeMX(hal庫)stm32中hrtim高分辨率定時器的基本使用(自存)

    1、選通道 單通道輸出or雙通道輸出 2、Timer A~F配置 (Master Timer不用管) 比較值Compare 個人感覺跟CCR差不多的意思, 注意不要大于上面的Period就行 設置上升沿和下降沿時間: 若想讓上設Compare=CCR 如圖設置 即可 即在 計數(shù)到Compare1時拉低,計數(shù)溢出時拉高 所以上圖輸出頻率10kHz占

    2024年02月04日
    瀏覽(25)
  • STM-32:TIM定時中斷—定時器定時中斷/定時器外部時鐘

    STM-32:TIM定時中斷—定時器定時中斷/定時器外部時鐘

    定時器可以對輸入的時鐘進行計數(shù),并在達到設定值時觸發(fā)中斷 16位計數(shù)器、預分頻器、自動重裝寄存器的時基單元,在72MHz計數(shù)時鐘下可以實現(xiàn)最大59.65s的定時 不僅具備基本的定時中斷功能,而且還包含內(nèi)外時鐘源選擇、輸入捕獲、輸出比較、編碼器接口、主從觸發(fā)模式等

    2024年02月09日
    瀏覽(28)
  • TIM-定時器——STM32

    TIM-定時器——STM32

    TIM(Timer)定時器 定時器可以對輸入的時鐘進行計數(shù),并在計數(shù)值達到設定值時觸發(fā)中斷 16位計數(shù)器、預分頻器、自動重裝寄存器的時基單元,在72MHz計數(shù)時鐘下可以實現(xiàn)最大59.65s的定時 不僅具備基本的定時中斷功能,而且還包含內(nèi)外時鐘源選擇、輸入捕獲、輸出比較、編碼器

    2024年02月02日
    瀏覽(39)
  • STM32單片機(六)TIM定時器 -> 第二節(jié):TIM定時中斷練習(定時器定時中斷和定時器外部時鐘)

    STM32單片機(六)TIM定時器 -> 第二節(jié):TIM定時中斷練習(定時器定時中斷和定時器外部時鐘)

    ?? 專欄簡介:本專欄記錄了從零學習單片機的過程,其中包括51單片機和STM32單片機兩部分;建議先學習51單片機,其是STM32等高級單片機的基礎;這樣再學習STM32時才能融會貫通。 ?? 專欄適用人群 :適用于想要從零基礎開始學習入門單片機,且有一定C語言基礎的的童鞋

    2024年02月09日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包