精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32定時器(二)定時器中斷

冬至子 ? 來源:不懂幽默的秦二 ? 作者:diandianmo ? 2023-07-21 14:54 ? 次閱讀

一、STM32定時器的分類

1.1 按照內核、外核、特定、常規分為4大類:

1)內核定時器:Systick

2)外設定時器:特定應用定時器+常規定時器

3)特定應用定時器:LPTIM,RTC,WTD,HRTIM

  1. 常規定時器:基本定時器TIM6&TIM7)、通用定時器(TIM2TIM5,TIM9TIM14)、高級定時器(TIM1&TIM8)

**1.2 CPU時序 **

此處我們提一下學習單片機原理的課程時,提到的幾個CPU時序。

振蕩周期:為單片機提供定時信號的振蕩源的周期。

狀態周期:1個狀態周期=2個振蕩周期

**機器周期:1個機器周期=6個狀態周期=12個振蕩周期**

指令周期:完成1條指令所占用的全部時間,以機器周期為單位。

以12MHz外接晶振為例

振蕩周期=1/12us,相當于1/12*10^6,所以單位為us;

狀態周期=1/6us

機器周期=1us

指令周期=1~4us

STM32共有14組常規定時器,其實也可以稱為計數器,定時器/計數器的工作過程是自動完成的,不需要CPU的參與,互相獨立,執行不同的任務,可以增加單片機的效率。

二、定時器中斷原理

2.1 何為定時器中斷:定時器中斷是由單片機中的定時器溢出而申請的中斷。

提到中斷,必須滿足幾個要素: 中斷源中斷請求中斷優先級 。 使CPU發生中斷的事件稱為中斷源,中斷源向CPU發出中斷請求,CPU暫時中斷原來執行的事件A轉去執行事件B,事件B處理完成后繼續返回原先中斷的位置(該過程稱為中斷返回,原先中斷的地方稱為斷點),繼續執行原先的事件。

2.2 中斷流程可以用下圖表示:

圖片

圖片

2.3 中斷優先級

嵌入式學習(八)—STM32中斷優先級分組與搶占優先級和響應優先級的關系》 這篇文章里,介紹了STM32中的 中斷優先級分組、中斷優先級(搶占優先級&響應優先級)嵌套向量中斷控制器NVIC等概念,那么我們定時器中斷也必須滿足這個規則---定時器中斷也要用NVIC來設置其中斷組別、搶占優先級、響應優先級。

STM32中斷分組有5種

圖片

#define NVIC_PriorityGroup_0 ((uint32_t)0x700)

/*!< 0 bits for pre-emption priority 4 bits for subpriority */
#define NVIC_PriorityGroup_1 ((uint32_t)0x600)

/*!< 1 bits for pre-emption priority 3 bits for subpriority */
#define NVIC_PriorityGroup_2 ((uint32_t)0x500)

/*!< 2 bits for pre-emption priority 2 bits for subpriority */
#define NVIC_PriorityGroup_3 ((uint32_t)0x400)

/*!< 3 bits for pre-emption priority1 bits for subpriority */
#define NVIC_PriorityGroup_4 ((uint32_t)0x300)

/*!< 4 bits for pre-emption priority 0 bits for subpriority */

在函數中要調用

void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group)

實現對某一個中斷的中斷分組和優先級配置。

與定時器配置緊密相關的就是自動重裝載計數器(CNT)和預分頻器(PSC),初始化定時器就是對定時器的CNT、PSC進行設置。下面介紹一下與本文密切相關的幾個通用定時器的寄存器

三、定時器相關寄存器及中斷編程

3.1****定時器相關寄存器

3.1.1 控制寄存器TIMx_CR1

圖片

位0 CEN:計數器使能,0:禁止計數器,1,使能計數器

注意:只有事先通過軟件將CEN位置去,才可以使用外部時鐘、門控模式、編碼器模式,而觸發模式可以通過硬件自動將CEN置1;在單脈沖模式下,當發生更新事件時會自動將CEN位清零。

本實驗中,我們只用到了TIMx_CR1的最低位,也就是計數器使能位,該位必須置1,才能讓定時器開始計數。

3.1.2 DMA中斷使能寄存器 TIMx_DIER

圖片

位0 UIE:更新中斷使能,0:禁止更新中斷,1:使能更新中斷

TIMx_DIER是一個16bit的寄存器,對于要實現的中斷試驗,我們僅關心第0bit,因為定時器中斷實驗要用到定時器的更新中斷,所以將該位置為1,表示允許更新時間所產生的中斷。

3.1.3預分頻寄存器TIMx_PSC

圖片

位0:15 PSC:預分頻器值。(范圍是0~65535)

表示計數器時鐘頻率CK_INT 等于Fck_psc/(PSC[15:0]+1).PSC包含在每次發生更新事件時要裝載到實際預分頻器寄存器的值。(84MHz的CK_INT,那計數器的時鐘頻率為84/(PSC[15:0]+1)MHz,計數器時鐘的取值范圍為(0.00128~84)MHz,那么計數器時鐘周期為0.012us(84MHz)~781us(0.001MHz);

***這個地方要注意:預分頻值=實際分頻值-1,***如果要設定實際分頻值為8400(定時器的工作頻率為10kHz),那我們設定預分頻值為8399

也再復習一下定時器的時鐘知識:

1.STM32總的有3種時鐘源,分為 內部時鐘、外部時鐘、鎖相環倍頻輸出時鐘, 包含LSI,LSE,HSI,HSE等;

2.系統時鐘為168MHz,其他時鐘都是通過分頻(系統時鐘除以一個分頻系數)給系統的各板塊使用;

3.看下圖三個紅色框的部分,系統時鐘(以F407系列為例)是168MHZ,通過設置不同的分頻值給AHB總線,看第一個紅框,可以設置為1.2...512,然后AHB總線再分頻給APB分線,看第二個紅框,再次分頻的值可以為1.2.4.8.16,上面的是直接分頻過后給APBx外設時鐘使用,我們重點看第二根線,注意第三個紅框,如果APBx的分頻值設置為1,那么APBx的定時器時鐘的時鐘頻率設置為與APB一樣,如果是其他的數字,那么設置為APB的時鐘頻率的兩倍。通過查手冊知道兩個基本定時器的時鐘頻率都歸屬于APB線上的,且APB1和APB2的分頻系數都不為1(可以通過中找到配置),因此基本定時器的時鐘頻率已經確定。

圖片

看下面這張圖,在文件system.stm324fxx.c中可以找到,

第一行表示系統時鐘來源是HSE,之前提過,它是高速外部時鐘,由外部晶振產生,第二三行表示系統時鐘設置為168MHZ(由外部時鐘HSE倍頻實現,具體這里不深究),第四五六行,分別表示AHB,APB1,APB2的分頻系數,即分別設置為168MHZ,42MHZ,84MHZ。

注意,如前所述APB1的分頻值為4,不為1,故其包含的基本定時器模塊的時鐘頻率需乘2,即42×2為84MHZ。由此我們得知基本定時器的時鐘源為84MHZ。

圖片

1)內部時鐘(CK_INT)

2)外部時鐘模式1:外部輸入引腳(TIx)

3)外部時鐘模式2:外部觸發輸入(ETR)用于TIM2.TIM3.TIM4

  1. 內部觸發輸入(ITRx),使用定時器A作為B定時器的預分頻(A為B提供時鐘)

這些時鐘,具體選擇哪個可以通過TIMx_SMCR寄存器的相關位來設置,CK_INT時鐘是從APB1倍頻來的,除非APB1的時鐘分頻數設置為1,否則通用定時器TIMx的時鐘是APB1時鐘的2倍,當APB1時鐘不分頻時,通用定時器的時鐘就等于APB1的時鐘,這里還要注意的就是高級定時器以及TIM9~TIM11的時鐘是來自APB2。

3.1.4 TIMx_CNT計數器

圖片

位15:0 CNT[15:0]:計數器值,該寄存器存儲了當前寄存器的計數值。范圍為065535,可以計時的范圍是051s(假定是分頻PSC設為65535,計數器時鐘頻率是84/65536MHz,每個時鐘脈沖周期為781us)

3.1.5自動重載寄存器(TIMx_ARR)

圖片

位15:0 ARR[15:0]:自動重載值。

ARR是要裝載到實際自動重載寄存器的值。需要注意,該寄存器在物理上實際對應著2個寄存器,一個是程序員可以直接配置的,另外一個是程序員看不到的,這個看不到的寄存器叫影子寄存器,在《STM32F4xx中文參考手冊》里面有提到,事實上真正起作用的是影子寄存器,根據TIMx_CR1寄存器中的APRE位的設置:APRE=0,預裝載寄存器的內容可以隨時傳送到影子寄存器,此時兩者是連通的;而APRE=1時,每一次更新事件(UEV)時,才能把預裝載寄存器ARR的內容傳送到影子寄存器。

3.1.6狀態寄存器(TIMx_SR)

圖片

位0 UIF:更新中斷標志。

  • 該位在發生更新事件時通過硬件置1,但需要通過軟件清零。0:未發生更新,1:更新中斷掛起
  • 上溢或者下溢(對于TIM2~TIM5)以及當TIMx_CR1寄存器UDIS=0時,
  • TIMx_CR1中的寄存器中的URS=0且UDIS=0,并且由軟件使用TIMx_EGR寄存器中的UG位重新初始化CNT時。TIMx_CR1寄存器中的URS=0&UDIS=0,并且由CNT由觸發事件重新初始化。

3.2定時器中斷編程

3.2.1編程步驟
1)TIM3時鐘使能,通過APB1ENR的第1位來設置TIM3的時鐘,APB1的分頻系數是4,那么APB1為168/4=42MHz,TIM3時鐘是APB1時鐘的2倍,等于84MHz.

2)設置TIM3_ARR和TIM3_PSC的值,通過這兩個寄存器,設置自動重裝值和分頻系數,這兩個參數加上時鐘頻率決定了定時器的溢出事件。

3)設置TIM3_DIER允許更新中斷。因為我們要使用TIM3的更新中斷,所以設置DIER的UIE位為1,使能更新中斷

4)允許TIM3工作。設置好定時器參數后,還需要開啟定時器,通過TIM3_CR1的CEN位來設置

5)TIM3中斷分組設置。配置完定時器后,因為要產生中斷,必須要設置NVIC相關寄存器,以使能TIM3中斷。

6)編寫中斷服務函數。在中斷產生后,通過狀態寄存器的值來判斷此次產生的中斷屬于什么類型,然后執行相關的操作,這里采用的是更新(溢出)中斷,所以要關注狀態寄存器的SR的最低位,在處理完成之后,將TIM3_SR的最低位寫0,來清除該中斷標志。

以下是定時器3的中斷測試代碼

//通用定時器3中斷初始化
//時鐘選擇為APB1的2倍,APB1=42MHz
//arr:自動重載值
//psc:時鐘預分頻數
//定時器溢出時間:Tout=((arr+1)*(psc+1))/ft
//ft=定時器的工作頻率,MHz
void TIM3_Int_Init(u16 arr,u16 psc)
{
RCC- >APB1ENR|=1< 1;//TIM3時鐘使能    
 TIM3- >ARR=arr;  //設定計數器自動重裝值 
TIM3- >PSC=psc;  //預分頻器  
TIM3- >DIER|=1< 0;   //允許更新中斷  
TIM3- >CR1|=0x01;    //使能定時器3
MY_NVIC_Init(1,3,TIM3_IRQn,2);//搶占1,子優先級3,組2 }
//定時器3中斷服務程序   
void TIM3_IRQHandler(void)
{                         
  if(TIM3- >SR&0X0001)//溢出中斷
  {
    LED1=!LED1;                                          
  }           
  TIM3- >SR&=~(1< 
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 鎖相環
    +關注

    關注

    35

    文章

    583

    瀏覽量

    87693
  • 寄存器
    +關注

    關注

    31

    文章

    5317

    瀏覽量

    120003
  • PSC
    PSC
    +關注

    關注

    0

    文章

    15

    瀏覽量

    7738
  • 定時器中斷
    +關注

    關注

    0

    文章

    49

    瀏覽量

    11164
  • stm32定時器
    +關注

    關注

    0

    文章

    13

    瀏覽量

    2289
收藏 人收藏

    評論

    相關推薦

    定時器中斷應用

    定時器中斷應用。
    發表于 03-15 14:56 ?3次下載

    stm32定時器中斷程序

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

    stm32定時器中斷與誤區

    在用到STM32定時器的更新中斷時,發現有些情形下只要開啟定時器就立即進入一次中斷。準確說,只要使能更新
    發表于 06-17 15:48 ?2.7w次閱讀
    <b class='flag-5'>stm32</b><b class='flag-5'>定時器</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——如何配置通用定時器中斷

    STM32定時器STM32F103ZET6一共有8個定時器,其中分別為:高級定時器(TIM1、TIM8);通用
    發表于 11-23 17:51 ?14次下載
    <b class='flag-5'>STM32</b>——如何配置通用<b class='flag-5'>定時器</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>

    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-通用定時器-定時器中斷

    1STM32定時器STM32F103ZET6一共有8個定時器,其中分別為:高級定時器(TIM1、TIM8);通用
    發表于 11-26 15:36 ?16次下載
    <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>

    STM32CubeMX_定時器中斷_PWM

    文章目錄前言STM32CubeMX新建工程基本定時器配置生成代碼定時器中斷PWM配置工程代碼前言STM32CubeMX_環境搭建_GPIO_
    發表于 12-05 13:51 ?13次下載
    <b class='flag-5'>STM32</b>CubeMX_<b class='flag-5'>定時器</b><b class='flag-5'>中斷</b>_PWM

    STM32定時器中斷顯示時間

    前言利用STM32定時器中斷,實現時間的顯示。我們知道利用定時器中斷只能進行tick的計算,然而用來顯示時間我們應該怎么辦呢?經過項目的實
    發表于 12-24 18:56 ?21次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>定時器</b><b class='flag-5'>中斷</b>顯示時間

    STM32定時器的分類及中斷原理

    本文主要介紹常規定時器中的TIM3,實現定時器中斷的功能。STM32定時器的分類在其中一篇文章中已經介紹過,本文主要內容主要介紹
    的頭像 發表于 01-12 17:29 ?7084次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>定時器</b>的分類及<b class='flag-5'>中斷</b>原理

    STM32定時器中斷應用實例

    本文將介紹:通過STM32cube mx配置工程文件,實現定時器中斷的功能。
    的頭像 發表于 04-21 11:36 ?1887次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>定時器</b><b class='flag-5'>中斷</b>應用實例

    定時器中斷是什么意思,定時器中斷的工作原理

    定時器中斷是由單片機中的定時器溢出而申請的中斷。51單片機中有兩個定時器T0和T1。STM32
    的頭像 發表于 07-23 09:45 ?6007次閱讀

    定時器中斷程序怎么寫

    定時器中斷程序怎么寫? 在嵌入式系統中,定時器被廣泛應用于各種任務。它們在實時系統中可用于輪詢,計時等任務。定時器可以被配置為周期性定時器
    的頭像 發表于 09-01 10:17 ?1906次閱讀