性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

liuxiaofei126
認證:VIP會員
所在專題目錄 查看專題
多功能控制小車
STM32定時器的來龍去脈
底層程序如何在STM32上編譯運行
從IIC實測波形入手搞懂IIC通信
實例講解(一)移位寄存器
單片機之USB 硬件和數(shù)據(jù)的四種傳輸方式
作者動態(tài) 更多
stm32知識點總結(jié)
2021-11-24 23:12
工程師單片機LED項目
2021-11-11 07:46
電容型負載對跟隨器的影響
2021-10-28 23:33
圖騰柱和互補推挽兩個“小冤家”
2021-10-22 23:15
學習單片機的捷徑
2021-10-17 23:07

STM32定時器的來龍去脈

一、定時器介紹  

STM32F1的定時器非常多,由2個基本定時器(TIM6、TIM7)、4個通 用定時器(TIM2-TIM5)和2個高級定時器(TIM1、TIM8)組成?;径?時器的功能最為簡單,類似于51單片機內(nèi)定時器。通用定時器是在基本 定時器的基礎上擴展而來,增加了輸入捕獲與輸出比較等功能。高級定 時器又是在通用定時器基礎上擴展而來,增加了可編程死區(qū)互補輸出、 重復計數(shù)器、帶剎車(斷路)功能,這些功能主要針對工業(yè)電機控制方面

1.1 通用定時器簡介   

STM32F1的通用定時器包含一個 16 位自動重載計數(shù)器(CNT),該計 數(shù)器由可編程預分頻器(PSC)驅(qū)動。STM32F1的通用定時器可用于多種 用途,包括測量輸入信號的脈沖寬度(輸入捕獲)或者生成輸出波形(輸出 比較和PWM)等。 使用定時器預分頻器和 RCC 時鐘控制器預分頻器,脈 沖長度和波形周期可以在幾個微秒到幾個毫秒間調(diào)整。STM32F1 的每個 通用定時器都是完全獨立的,沒有互相共享的任何資源。

STM32F1的通用定時器TIMx (TIM2-TIM5 )具有如下功能: 

(1)16 位向上、向下、向上/向下自動裝載計數(shù)器(TIMx_CNT)。 

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

 (3)4個獨立通道(TIMx_CH1-4),這些通道可以用來作為: A.輸入捕獲 B.輸出比較 C. PWM 生成(邊緣或中間對齊模式) D.單脈沖模式輸出

(4)可使用外部信號(TIMx_ETR)控制定時器,且可實現(xiàn)多個定時器互連(可以用1個定時器控制另外一個定時器)的同步電路。

 (5)發(fā)生如下事件時產(chǎn)生中斷/DMA請求: A.更新:計數(shù)器向上溢出/向下溢出,計數(shù)器初始化(通過軟件或者內(nèi)部/外部觸發(fā)) B.觸發(fā)事件(計數(shù)器啟動、停止、初始化或者由內(nèi)部/外部觸發(fā)計數(shù)) C.輸入捕獲 D.輸出比較 

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

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

1.2 通用定時器結(jié)構框圖 

我們把通用定時器結(jié)構框圖分成 5 個子模塊,按照順序依次進行簡單介紹。

(1)標號 1:時鐘源通用定時器的時鐘來源有 4 種可選:

A.內(nèi)部時鐘(CK_INT)

B.外部時鐘模式 1:外部輸入引腳 TIx(x=1,2,3,4)

C.外部時鐘模式 2:外部觸發(fā)輸入 ETR

D.內(nèi)部觸發(fā)輸入(ITRx(x=0,1,2,3))

(2)標號 2:控制器

通用定時器控制器部分包括觸發(fā)控制器、從模式控制器以及編碼器接口。觸發(fā)控制器用來針對片內(nèi)外設輸出觸發(fā)信號,比如為其它定時器提供時鐘和觸發(fā)DAC/ADC 轉(zhuǎn)換。從模式控制器可以控制計數(shù)器復位、啟動、遞增/遞減、計數(shù)。編碼器接口專門針對編碼器計數(shù)而設計。 

(3)標號 3:時基單元  通用定時器時基單元包括 3 個寄存器,分別是計數(shù)器寄存器(TIMx_CNT)、預分頻器寄存器(TIMx_PSC)、自動重載寄存器(TIMx_ARR)。高級定時器中還有一個重復計數(shù)寄存器(TIMx_RCR),通用和基本定時器是沒有的。通用定時器這三個寄存器都是 16 位有效。而高級定時器的 TIMx_RCR 寄存器是 8 位有效。  

在這個時基單元中,有個預分頻器寄存器(TIMx_PSC),用于對計數(shù)器時鐘頻率進行分頻,通過寄存器內(nèi)的相應位設置,分頻系數(shù)值可在 1 到 65536 之間。由于從模式控制寄存器具有緩沖功能,因此預分頻器可實現(xiàn)實時更改,而新的預分頻比將在下一更新事件發(fā)生時被采用。  

在時基單元中,還有個計數(shù)寄存器(TIMx_CNT),通用定時器計數(shù)方式有向上計數(shù)、向下計數(shù)、向上向下計數(shù)(中心對齊計數(shù))。下面分別來介紹下這幾種計數(shù)方式:

4)標號 4:輸入捕獲 

(5)輸出比較 

 二、通用定時器配置步驟(

1)使能定時器時鐘 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能TIM4時鐘 

(2)初始化定時器參數(shù),包含自動重裝值,分頻系數(shù),計數(shù)方式等 

voidTIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); 

typedef struct {  

uint16_t TIM_Prescaler; //定時器預分頻器  

 uint16_t TIM_CounterMode; //計數(shù)模式   

uint32_t TIM_Period; //定時器周期   

uint16_t TIM_ClockDivision; //時鐘分頻   

uint8_t TIM_RepetitionCounter; //重復計數(shù)器 

} TIM_TimeBaseInitTypeDef;

了解結(jié)構體成員功能后,就可以進行配置,例如:

 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;

 TIM_TimeBaseInitStructure.TIM_Period=1000; //自動裝載值 自己定義

TIM_TimeBaseInitStructure.TIM_Prescaler=35999; //分頻系數(shù) 自己定義

TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;

 TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //設置向上計數(shù)模式

 TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure); 

定時器定時時間計算公式如下: Tout= ((per)*(psc+1))/Tclk; 1000*(35999+1)/72;

(3)設置定時器中斷類型,并使能   v

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

(4)設置定時器中斷優(yōu)先級,使能定時器中斷通道 NVIC初始化庫函數(shù)是NVIC_Init(); 

(5)開啟定時器 void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState); 

(6)編寫定時器中斷服務函數(shù)

三、定時器中斷編碼

進入中斷函數(shù)

聲明:本內(nèi)容為作者獨立觀點,不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯的朋友,別忘了一鍵三連哦!
贊 7
收藏 8
關注 210
成為作者 賺取收益
全部留言
0/200
  • dy-blNlwnWV 2021-02-17 10:05
    學習
    回復
  • keyhei66 2020-12-16 21:59
    圍觀學習
    回復
  • 蘭波 2020-11-20 09:33
    nice
    回復
  • lihui710884923 2020-11-19 16:28
    寫的比較詳細
    回復