娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年12月10日(星期二)

正在發生

2018年12月10日 | 【STM32】通用定時器的基本原理(實例:定時器中斷)

發布者:RainbowJoy 來源: eefocus關鍵字:STM32  通用定時器  定時器中斷 手機看文章 掃描二維碼
隨時隨地手機看文章

STM32F1xx官方資料:《STM32中文參考手冊V10》-第14章通用定時器


STM32的定時器:STM32F103ZET6一共有8個定時器,其中分別為:


高級定時器(TIM1、TIM8);通用定時器(TIM2、TIM3、TIM4、TIM5);基本定時器(TIM6、TIM7)。


STM32的通用定時器


通用定時器功能特點描述


STM32的通用定時器是由一個可編程預分頻器(PSC)驅動的16位自動重裝載計數器(CNT)構成,可用于測量輸入脈沖長度(輸入捕獲)或者產生輸出波形(輸出比較和PWM)等。


STM3 的通用TIMx(TIM2、TIM3、TIM4 和 TIM5)定時器功能特點包括:


位于低速的APB1總線上(注意:高級定時器是在高速的APB2總線上);


16位向上、向下、向上/向下(中心對齊)計數模式,自動裝載計數器(TIMx_CNT);


16位可編程(可以實時修改)預分頻器(TIMx_PSC),計數器時鐘頻率的分頻系數 為 1~65535 之間的任意數值;


4 個獨立通道(TIMx_CH1~4),這些通道可以用來作為:


輸入捕獲


輸出比較


PWM生成(邊緣或中間對齊模式)


單脈沖模式輸出 


可使用外部信號(TIMx_ETR)控制定時器和定時器互連(可以用 1 個定時器控制另外一個定時器)的同步電路。


如下事件發生時產生中斷/DMA(6個獨立的IRQ/DMA請求生成器): 


更新:計數器向上溢出/向下溢出,計數器初始化(通過軟件或者內部/外部觸發) 


觸發事件(計數器啟動、停止、初始化或者由內部/外部觸發計數)


輸入捕獲 


輸出比較 


支持針對定位的增量(正交)編碼器和霍爾傳感器電路 


觸發輸入作為外部時鐘或者按周期的電流管理


STM32 的通用定時器可以被用于:測量輸入信號的脈沖長度(輸入捕獲)或者產生輸出波形(輸出比較和 PWM)等。   


使用定時器預分頻器和 RCC 時鐘控制器預分頻器,脈沖長度和波形周期可以在幾個微秒到幾個毫秒間調整。STM32 的每個通用定時器都是完全獨立的,沒有互相共享的任何資源。


計數器模式


通用定時器可以向上計數、向下計數、向上向下雙向計數模式。


向上計數模式:計數器從0計數到自動加載值(TIMx_ARR),然后重新從0開始計數并且產生一個計數器溢出事件。


向下計數模式:計數器從自動裝入的值(TIMx_ARR)開始向下計數到0,然后從自動裝入的值重新開始,并產生一個計數器向下溢出事件。


中央對齊模式(向上/向下計數):計數器從0開始計數到自動裝入的值-1,產生一個計數器溢出事件,然后向下計數到1并且產生一個計數器溢出事件;然后再從0開始重新計數。


簡單地理解三種計數模式,可以通過下面的圖形:



通用定時器工作流程



對于這個定時器框圖,分成四部分來講:最頂上的一部分(計數時鐘的選擇)、中間部分(時基單元)、左下部分(輸入捕獲)、右下部分(PWM輸出)。這里主要介紹一下前兩個,后兩者的內容會在后面的文章中講解到。


計數時鐘的選擇


計數器時鐘可由下列時鐘源提供:


內部時鐘(TIMx_CLK) 


外部時鐘模式1:外部捕捉比較引腳(TIx)


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


內部觸發輸入(ITRx):使用一個定時器作為另一個定時器的預分頻器,如可以配置一個定時器Timer1而作為另一個定時器Timer2的預分頻器。


內部時鐘源



從圖中可以看出:由AHB時鐘經過APB1預分頻系數轉至APB1時鐘,再通過某個規定轉至TIMxCLK時鐘(即內部時鐘CK_INT、CK_PSC)。最終經過PSC預分頻系數轉至CK_CNT。


那么APB1時鐘怎么轉至TIMxCLK時鐘呢?除非APB1的分頻系數是1,否則通用定時器的時鐘等于APB1時鐘的2倍。


例如:默認調用SystemInit函數情況下:SYSCLK=72M、AHB時鐘=72M、APB1時鐘=36M,所以APB1的分頻系數=AHB/APB1時鐘=2。所以,通用定時器時鐘CK_INT=2*36M=72M。最終經過PSC預分頻系數轉至CK_CNT。


時基單元


時基單元包含:計數器寄存器(TIMx_CNT)、預分頻器寄存器(TIMx_PSC)、自動裝載寄存器(TIMx_ARR)三部分。


對不同的預分頻系數,計數器的時序圖為:



計數模式


此時,再來結合時鐘的時序圖和時基單元,分析一下各個計數模式:


向上計數模式



向下計數模式



中央對齊模式



通用定時器相關配置寄存器


計數器當前值寄存器(TIMx_CNT)



作用:存放計數器的當前值。


預分頻寄存器(TIMx_PSC)



作用:對CK_PSC進行預分頻。此時需要注意:CK_CNT計算的時候,預分頻系數要+1。


自動重裝載寄存器(TIMx_ARR)



作用:包含將要被傳送至實際的自動重裝載寄存器的數值。


注意:該寄存器在物理上實際上對應著2個寄存器。一個是我們直接操作的,另一個是我們看不到的,這個看不到的寄存器叫做影子寄存器。實際上真正起作用的是影子寄存器。根據TIMx_CR1位的APRE位的設置,APRE=0時,預裝載寄存器的內容就可以隨時傳送到影子寄存器,此時兩者是互通的;APRE=1時,在每一次更新事件時,才將預裝在寄存器的內容傳送至影子寄存器。


控制寄存器(TIMx_CR1)



作用:對計數器的計數方式、使能位等進行設置。


這里有ARPE位:自動重裝載預裝載允許位。ARPE=0時,TIMx_ARR寄存器沒有緩沖;ARPE=1時,TIMx_ARR寄存器被裝入緩沖器。


DMA/中斷使能寄存器(TIMx_DIER)



作用:對DMA/中斷使能進行配置。


通用定時器超時時間


超出(溢出)時間計算:


Tout=(ARR+1)(PSC+1)/TIMxCLK


其中:Tout的單位為us,TIMxCLK的單位為MHz。


這里需要注意的是:PSC預分頻系數需要加1,同時自動重加載值也需要加1。


為什么自動重加載值需要加1,因為從ARR到0之間的數字是ARR+1個;


為什么預分頻系數需要加1,因為為了避免預分頻系數不設置的時候取0的情況,使之從1開始。


這里需要和之前的預分頻進行區分:由于通用定時器的預分頻系數為1~65535之間的任意數值,為了從1開始,所以當預分頻系數寄存器為0的時候,代表的預分頻系數為1。而之前的那些預分頻系數都是固定的幾個值,比如1、4、8、16、32、64等等,而且可能0x000代表1,0x001代表4,0x010代表8等等。也就是說,一邊是隨意的定義(要從1開始),另一邊是宏定義了某些值(只有特定的一些值)。


比如,想要設置超出時間為500ms,并配置中斷,TIMxCLK按照系統默認初始化來(即72MHz),PSC取7199,由此可以計算出ARR為4999。


也就是說,在內部時鐘TIMxCLK為72MHz,預分頻系數為7199的時候,從4999遞減至0的事件是500ms。


通用定時器相關配置庫函數


1個初始化函數


void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);


作用:用于對預分頻系數、計數方式、自動重裝載計數值、時鐘分頻因子等參數的設置。


2個使能函數


void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);

void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);


作用:前者使能定時器,后者使能定時器中斷


4個狀態標志位獲取函數


FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);

void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);

ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);

void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);


作用:前兩者獲取(或清除)狀態標志位,后兩者為獲取(或清除)中斷狀態標志位。


定時器中斷的一般步驟


實例要求:通過TIM3的中斷來控制DS1的亮滅,DS1是直接連接在PE5上的。


使能定時器時鐘。調用函數:RCC_APB1PeriphClockCmd();


初始化定時器,配置ARR、PSC。調用函數:TIM_TimeBaseInit();


開啟定時器中斷,配置NVIC。調用函數:void TIM_ITConfig();NVIC_Init();


使能定時器。調用函數:TIM_Cmd();


編寫中斷服務函數。調用函數:TIMx_IRQHandler()。


下面按照這個一般步驟來進行一個簡單的定時器中斷程序:


//通用定時器3中斷初始化

//這里時鐘選擇為APB1的2倍,而APB1為36M

//arr:自動重裝值。

//psc:時鐘預分頻數

//這里使用的是定時器3!

void TIM3_Int_Init(u16 arr,u16 psc)

{

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

NVIC_InitTypeDef NVIC_InitStructure;

 

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //時鐘使能


//定時器TIM3初始化

TIM_TimeBaseStructure.TIM_Period = arr; //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler =psc; //設置用來作為TIMx時鐘頻率除數的預分頻值

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設置時鐘分割:TDTS = Tck_tim

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計數模式

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據指定的參數初始化TIMx的時間基數單位

 

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中斷,允許更新中斷

 

//中斷優先級NVIC設置

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中斷

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占優先級0級

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //從優先級3級

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能

NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器

 

 

TIM_Cmd(TIM3, ENABLE);  //使能TIMx  

}

//定時器3中斷服務程序

void TIM3_IRQHandler(void)   //TIM3中斷

{

if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //檢查TIM3更新中斷發生與否

{

TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx更新中斷標志 

LED1=!LED1;

}

}

 int main(void)

 {

 

delay_init();     //延時函數初始化   

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級

  LED_Init();      //LED端口初始化

TIM3_Int_Init(4999,7199);//10Khz的計數頻率,計數到5000為500ms  

    while(1)

{

LED0=!LED0;

delay_ms(200);    

}  

 

 

}  


定時器中斷的程序和串口中斷的程序非常類似,可以將兩者結合起來進行比對著學習【STM32】串口相關配置寄存器、庫函數(UART一般步驟) 。


同時強調一下,在中斷處理函數內,需要判斷中斷來源和及時清除中斷標志位。

關鍵字:STM32  通用定時器  定時器中斷 引用地址:【STM32】通用定時器的基本原理(實例:定時器中斷)

上一篇:STM32之定時器中斷控制LED閃爍
下一篇:解決STM32開啟定時器時立即進入一次中斷程序問題

推薦閱讀

作為家電行業的巨頭,格力電器集科技型、創新型、多元化于一體,旗下擁有格力、TOSOT、凌達、凱邦、新元等品牌,通過已建成的5個家電再生資源基地,覆蓋了從家電上游零部件生產到下游廢舊家電回收的全產業鏈。?在今年年初,格力電器定下了營收破2000億元的目標,截至目前,該目標已經幾乎完成。據公司三季報顯示,格力電器2018年前三季度實現營收1500.50...
意法半導體推出STPMIC1電源管理芯片(PMIC),集成四個DC/DC降壓轉換器、一個DC/DC升壓轉換器和六個低壓降穩壓器(LDO),可滿足基于應用處理器的高集成度系統的復雜功率需求。 該芯片是意法半導體的STM32MP1 *異構多核微處理器的最佳配套PMIC。STM32MP1 *集成單核和或雙核Arm?Cortex?-A7處理器和Cortex?-M4內核、可選的3D圖形處理單元,以及豐富的數...
集微網12月9日消息,前幾天在國內某綜藝節目中,vivo專業影像旗艦X60系列的外觀正式被曝光了。外觀方面,vivo X60系列正面采用了居中挖孔屏的設計,四周的邊框也設計的很窄,背面則是延續了X50系列的微云臺、雙色云階設計,總的來說,X60系列的顏值很高。那么問題來了,vivo X60系列什么時候發布呢?據知名數碼博主 @數碼閑聊站爆料稱,vivo X60系列新...
??工業機器人及智能裝備制造技術不僅能提高企業工廠的生產效率,更能大大降低用工風險。現在越來越多的行業開始應用機器人焊接技術。例如機車制造行業、船舶制造行業、機械制造行業、航天技術、建筑行業、石油化工行業等等。??焊接工作站主要包括兩大部分,一部分是焊接機器人系統;另一部分是周邊設備。???● 焊接機器人系統包括:機器人本體及控...

史海拾趣

問答坊 | AI 解惑

請大蝦們幫我 看一下,這段小程序錯在哪里,怎么該啊,拜托啦

編譯的時候說:          行:43, 錯誤353: 符號未定義: KEYSTAT          行:18, 錯誤353: 符號未定義:R0下面是編譯的程序:   ORG 0STRT: SJ ...…

查看全部問答∨

matlab 下次預告

我將以例子的方式來講解一些語法規則,然后提供一些個人入門的時候編制的一些小程序,供大家理解用的!有什么建議也可以再這里留言!!!…

查看全部問答∨

歷屆英特爾嵌入式邀請賽(2002-2006)參賽心得

本帖最后由 paulhyde 于 2014-9-15 09:00 編輯 英特爾杯大學生嵌入式專題邀請賽的發起于2002年,目的在于組織國內優秀高校的精英學生參賽,通過競賽鍛煉學生對新興技術的自我學習能力,培養學生的實踐動手能力與創新意識;通過競賽將更多前沿技術 ...…

查看全部問答∨

(多圖)購買OK6410詳細全過程+性能評測

(1)選型。這個問題考慮了好久。以前學校做過44B0,后來工作了就開始做DSP+CPLD了。N久沒弄ARM,現在想自己學一下。百度了很久,原本打算買TE2440的,畢竟CAN總線、485和VGA什么都有。可看了價格,好貴>_<!! 由于是自費學習,公司不給報銷。沒 ...…

查看全部問答∨

關于PDA研發顯示相關不規則表格問題

關于PDA研發顯示相關不規則表格問題 目前有大量數據表格要做到PDA上顯示,每個表格及數據不一樣,如何做到PDA上顯示呢?我用vs2005開發,也沒有相關控件拿來用,有人說可以把WORD中的表格轉化為RTF格式,再讀到PDA上.請問具體有什么好的方法嗎?如何來實 ...…

查看全部問答∨

有學Erlang的嗎 大家一起學?

這個是專門學習Erlang的小組 你想學嗎?或者你有什么好建議嗎?歡迎你來: http://groups.eeworld.net/erlang…

查看全部問答∨

keil2問題

我上網下了很多keil2,可都有這樣那樣的問題都不能用,綠色板的出現找不到DEBUGGER可我已經照的破解方法該了路徑,還有一個就是本站下的keil C51完全破解版,裝還打開C51下的EXAMPLE下的HELLO工程測試,調試時提示 can not open file 我新建了一個 ...…

查看全部問答∨

什么情況下要cec

wince中流驅動在什么情況下要寫cec,因為我看了些例子,只在注冊表里注冊了,就不用寫cec了。請問各位大俠?…

查看全部問答∨

STM32定時器比較輸出模式的通道選擇與GPIO輸出引腳的配置

我想用通用定時器TIM2實現比較輸出功能,比較輸出模式選擇電平翻轉,手冊上通用定時器TIM2的通道4對應的GPIO引腳為PA3,我配置完PA3和channel_4,上電后,PA3引腳上并沒有脈沖輸出,是怎么回事?PA3和channel_4不是默認對應起來的嗎?還需要再做其 ...…

查看全部問答∨

windows7下添加protel99se庫文件的方法

本文主要介紹windows7下添加protel99se庫文件的兩個方案 方案一:      1.進入C\\WINDOWS下找到ADVPCB99SE.INI和ADVSCH99SE.INI兩個文件;(有些網友的軟件剛剛裝上可能還沒有用過,這樣可能找不到ADVPCB99SE.INI這個文件。這種情況只需打開 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 新余市| 枣强县| 连云港市| 从化市| 蒙自县| 沧源| 镇沅| 上蔡县| 若尔盖县| 辉南县| 黑河市| 安溪县| 霍山县| 龙江县| 盈江县| 泾阳县| 安图县| 乡宁县| 静海县| 巴彦淖尔市| 楚雄市| 青铜峡市| 孙吴县| 临沧市| 融水| 济南市| 宁陵县| 睢宁县| 玉山县| 泗水县| 平阴县| 江门市| 枣庄市| 马公市| 西充县| 农安县| 伊春市| 化州市| 津南区| 高唐县| 塘沽区|