單芯片解決方案,開啟全新體驗(yàn)——W55MH32 高性能以太網(wǎng)單片機(jī)
W55MH32是WIZnet重磅推出的高性能以太網(wǎng)單片機(jī),它為用戶帶來前所未有的集成化體驗(yàn)。這顆芯片將強(qiáng)大的組件集于一身,具體來說,一顆W55MH32內(nèi)置高性能Arm? Cortex-M3核心,其主頻最高可達(dá)216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲(chǔ)與數(shù)據(jù)處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協(xié)議棧、內(nèi)置MAC以及PHY,擁有獨(dú)立的32KB以太網(wǎng)收發(fā)緩存,可供8個(gè)獨(dú)立硬件socket使用。如此配置,真正實(shí)現(xiàn)了All-in-One解決方案,為開發(fā)者提供極大便利。
在封裝規(guī)格上,W55MH32 提供了兩種選擇:QFN100和QFN68。
W55MH32L采用QFN100封裝版本,尺寸為12x12mm,其資源豐富,專為各種復(fù)雜工控場(chǎng)景設(shè)計(jì)。它擁有66個(gè)GPIO、3個(gè)ADC、12通道DMA、17個(gè)定時(shí)器、2個(gè)I2C、5個(gè)串口、2個(gè)SPI接口(其中1個(gè)帶I2S接口復(fù)用)、1個(gè)CAN、1個(gè)USB2.0以及1個(gè)SDIO接口。如此豐富的外設(shè)資源,能夠輕松應(yīng)對(duì)工業(yè)控制中多樣化的連接需求,無論是與各類傳感器、執(zhí)行器的通信,還是對(duì)復(fù)雜工業(yè)協(xié)議的支持,都能游刃有余,成為復(fù)雜工控領(lǐng)域的理想選擇。 同系列還有QFN68封裝的W55MH32Q版本,該版本體積更小,僅為8x8mm,成本低,適合集成度高的網(wǎng)關(guān)模組等場(chǎng)景,軟件使用方法一致。更多信息和資料請(qǐng)進(jìn)入網(wǎng)站或者私信獲取。
此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應(yīng)用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網(wǎng)絡(luò)通信安全再添保障。
為助力開發(fā)者快速上手與深入開發(fā),基于W55MH32L這顆芯片,WIZnet精心打造了配套開發(fā)板。開發(fā)板集成WIZ-Link芯片,借助一根USB C口數(shù)據(jù)線,就能輕松實(shí)現(xiàn)調(diào)試、下載以及串口打印日志等功能。開發(fā)板將所有外設(shè)全部引出,拓展功能也大幅提升,便于開發(fā)者全面評(píng)估芯片性能。
若您想獲取芯片和開發(fā)板的更多詳細(xì)信息,包括產(chǎn)品特性、技術(shù)參數(shù)以及價(jià)格等,歡迎訪問官方網(wǎng)頁,我們期待與您共同探索W55MH32的無限可能。

第二十二章 TIM——高級(jí)定時(shí)器
本章參考資料:《W55MH32中文參考手冊(cè)》高級(jí)定時(shí)器章節(jié)。學(xué)習(xí)本章時(shí),配合參考資料一起閱讀,效果會(huì)更佳,特別是涉及到寄存器說明的部分。
1 高級(jí)控制定時(shí)器
高級(jí)控制定時(shí)器(TIM1和TIM8)和通用定時(shí)器在基本定時(shí)器的基礎(chǔ)上引入了外部引腳,可以實(shí)現(xiàn)輸入捕獲和輸出比較功能。 高級(jí)控制定時(shí)器比通用定時(shí)器增加了可編程死區(qū)互補(bǔ)輸出、重復(fù)計(jì)數(shù)器、帶剎車(斷路)功能,這些功能都是針對(duì)工業(yè)電機(jī)控制方面。 這幾個(gè)功能在本書不做詳細(xì)的介紹,主要介紹常用的輸入捕獲和輸出比較功能。
高級(jí)控制定時(shí)器時(shí)基單元包含一個(gè)16位自動(dòng)重裝載寄存器ARR,一個(gè)16位的計(jì)數(shù)器CNT,可向上/下計(jì)數(shù),一個(gè)16位可編程預(yù)分頻器PSC, 預(yù)分頻器時(shí)鐘源有多種可選,有內(nèi)部的時(shí)鐘、外部時(shí)鐘。還有一個(gè)8位的重復(fù)計(jì)數(shù)器RCR,這樣最高可實(shí)現(xiàn)40位的可編程定時(shí)。
W55MH32的高級(jí)/通用定時(shí)器的IO分配具體見下表,高級(jí)控制和通用定時(shí)器通道引腳分布 。配套開發(fā)板因?yàn)镮O資源緊缺, 定時(shí)器的IO很多已經(jīng)復(fù)用它途,故下表中的IO只有部分可用于定時(shí)器的實(shí)驗(yàn)。
| 高級(jí)定時(shí)器 | 通用定時(shí)器 | |||||
| TIM1 | TIM8 | TIM2 | TIM5 | TIM3 | TIM4 | |
| CH1 | PA8/PE9 | PC6 | PA0/PA15 | PA0 | PA6/PC6/PB4 | PB6/PD12 |
| CH1N | PB13/PA7/PE8 | PA7 | ||||
| CH2 | PA9/PE11 | PC7 | PA1/PB3 | PA1 | PA7/PC7/PB5 | PB7/PD13 |
| CH2N | PB14/PB0/PE10 | PB0 | ||||
| CH3 | PA10/PE13 | PC8 | PA2/PB10 | PA2 | PB0/PC8 | PB8/PD14 |
| CH3N | PB15/PB1/PE12 | PB1 | ||||
| CH4 | PA11/PE14 | PC9 | PA3/PB11 | PA3 | PB1/PC9 | PB9/PD15 |
| ETR | PA12/PE7 | PA0 | PA0/PA15 | PD2 | PE0 | |
| BKIN | PB12/PA6/PE15 | PA6 |
2 高級(jí)控制定時(shí)器功能框圖
高級(jí)控制定時(shí)器功能框圖包含了高級(jí)控制定時(shí)器最核心內(nèi)容,掌握了功能框圖,對(duì)高級(jí)控制定時(shí)器就有一個(gè)整體的把握,在編程時(shí)思路就非常清晰, 見下圖,圖中有些寄存器是帶影子的,表示其有影子寄存器:

2.1 時(shí)鐘選擇
計(jì)數(shù)器時(shí)鐘可由下列時(shí)鐘源提供:
內(nèi)部時(shí)鐘(CK_INT)
外部時(shí)鐘模式 1:外部輸入引腳
外部時(shí)鐘模式 2:外部觸發(fā)輸入 ETR
內(nèi)部觸發(fā)輸入(ITRx):使用一個(gè)定時(shí)器作為另一個(gè)定時(shí)器的預(yù)分頻器。如可以配置一個(gè)定時(shí)器 Timer1 而作為另一個(gè)定時(shí)器 Timer2 的預(yù)分頻器。
內(nèi)部時(shí)鐘源(CK_INT):如果禁止了從模式控制器(SMS=000),則 CEN、DIR(TIMx_CR1 寄存器)和 UG 位(TIMx_EGR 寄存器)是事實(shí)上的控制位,并且只能被軟件修改(UG 位仍被自動(dòng)清除)。只要 CEN 位被寫成'1',預(yù)分頻器的時(shí)鐘就由內(nèi)部時(shí)鐘 CK_INT 提供。
下圖顯示控制電路和向上計(jì)數(shù)器在一般模式下,不帶預(yù)分頻器時(shí)的操作。

外部時(shí)鐘源模式 1
當(dāng) TIMx_SMCR 寄存器的 SMS=111 時(shí),此模式被選中。計(jì)數(shù)器可以在選定輸入端的每個(gè)上升沿或下降沿計(jì)數(shù)。

例如,要配置向上計(jì)數(shù)器在 T12 輸入端的上升沿計(jì)數(shù),使用下列步驟:配置 TIMx_CCMR1 寄存器CC2S=01,配置通道 2 檢測(cè) TI2 輸入的上升沿。
配置TIMx_CCMR1寄存器的IC2F[3:0],選擇輸入濾波器帶寬(如果不需要濾波器,保持IC2F=0000)配置 TIMx_CCER 寄存器的 CC2P=0,選定上升沿極性W55MH32 參考手冊(cè) V1.0.0 201/671配置 TIMx_SMCR 寄存器的 SMS=111,選擇定時(shí)器外部時(shí)鐘模式 1 配置 TIMx_SMCR 寄存器中的TS=110,選定 TI2 作為觸發(fā)輸入源設(shè)置 TIMx_CR1 寄存器的 CEN=1,啟動(dòng)計(jì)數(shù)器。
注:捕獲預(yù)分頻器不用作觸發(fā),所以不需要對(duì)它進(jìn)行配置
當(dāng)上升沿出現(xiàn)在 TI2,計(jì)數(shù)器計(jì)數(shù)一次,且 TIF 標(biāo)志被設(shè)置。在 TI2 的上升沿和計(jì)數(shù)器實(shí)際時(shí)鐘之間的延時(shí),取決于在 TI2 輸入端的重新同步電路。

外部時(shí)鐘源模式 2
選定此模式的方法為:令 TIMx_SMCR 寄存器中的 ECE=1 計(jì)數(shù)器能夠在外部觸發(fā) ETR 的每一個(gè)上升沿或下降沿計(jì)數(shù)。
下圖是外部觸發(fā)輸入的框圖:

例如,要配置在 ETR 下每 2 個(gè)上升沿計(jì)數(shù)一次的向上計(jì)數(shù)器,使用下列步驟:本例中不需要濾波器,置 TIMx_SMCR 寄存器中的 ETF[3:0]=0000設(shè)置預(yù)分頻器,置 TIMx_SMCR 寄存器中的 ETPS[1:0]=01.選擇 ETR 的上升沿檢測(cè),置 TIMx_SMCR 寄存器中的 ETP=0 開啟外部時(shí)鐘模式 2,寫 TIMx_SMCR寄存器中的 ECE=1.啟動(dòng)計(jì)數(shù)器,寫 TIMx_CR1 寄存器中的 CEN=1 計(jì)數(shù)器在每 2 個(gè) ETR 上升沿計(jì)數(shù)一次。在 ETR 的上升沿和計(jì)數(shù)器實(shí)際時(shí)鐘之間的延時(shí)取決于在 ETRP 信號(hào)端的重新同步電路。外部時(shí)鐘模式 2 下的控制電路如下圖:

3.5 捕獲/比較通道
捕獲/比較通道(如:通道 1 輸入部分)如下圖:

輸出部分產(chǎn)生一個(gè)中間波形 OCxRef(高有效)作為基準(zhǔn),鏈的末端決定最終輸出信號(hào)的極性。
捕獲/比較通道 1 的主電路如下圖:

捕獲/比較通道的輸出部分(通道 1 至 3)如下圖:

捕獲/比較通道的輸出部分(通道 4)如下圖:

捕獲/比較模塊由一個(gè)預(yù)裝載寄存器和一個(gè)影子寄存器組成。讀寫過程僅操作預(yù)裝載寄存器。在捕獲模式下,捕獲發(fā)生在影子寄存器上,然后再復(fù)制到預(yù)裝載寄存器中。
在比較模式下,預(yù)裝載寄存器的內(nèi)容被復(fù)制到影子寄存器中,然后影子寄存器的內(nèi)容和計(jì)數(shù)器進(jìn)行比較。
3.6 輸入捕獲模式
在輸入捕獲模式下,當(dāng)檢測(cè)到 ICx 信號(hào)上相應(yīng)的邊沿后,計(jì)數(shù)器的當(dāng)前值被鎖存到捕獲/比較寄存器(TIMx_CCRx)中。當(dāng)發(fā)生捕獲事件時(shí),相應(yīng)的 CCxIF 標(biāo)志(TIMx_SR 寄存器)被置 1,如果開放了中斷或者 DMA 操作,則將產(chǎn)生中斷或者 DMA 請(qǐng)求。如果發(fā)生捕獲事件時(shí) CCxIF 標(biāo)志已經(jīng)為高,那么重復(fù)捕獲標(biāo)志 CCxOF(TIMx_SR 寄存器)被置 1。寫 CCxIF=0 可清除 CCxIF,或讀取存儲(chǔ)在TIMx_CCRx 寄存器中的捕獲數(shù)據(jù)也可清除 CCxIF。寫 CCxOF=0 可清除 CCxOF。
以下例子說明如何在 TI1 輸入的上升沿時(shí)捕獲計(jì)數(shù)器的值到 TIMx_CCR1 寄存器中,步驟如下:
選擇有效輸入端:TIMx_CCR1 必須連接到 TI1 輸入,所以寫入 TIMx_CCR1 寄存器中的CC1S=01,只要 CC1S 不為'00',通道被配置為輸入,并且 TIMx_CCR1 寄存器變?yōu)橹蛔x。
根據(jù)輸入信號(hào)的特點(diǎn),配置輸入濾波器為所需的帶寬(即輸入為 TIx 時(shí),輸入濾波器控制位是TIMx_CCMRx 寄存器中的 ICxF 位)。假設(shè)輸入信號(hào)在最多 5 個(gè)內(nèi)部時(shí)鐘周期的時(shí)間內(nèi)抖動(dòng),我們須配置濾波器的帶寬長(zhǎng)于 5 個(gè)時(shí)鐘周期;因此我們可以(以 fDTS 頻率)連續(xù)采樣 8 次,以確認(rèn)在 TI1 上一次真實(shí)的邊沿變換,即在 TIMx_CCMR1 寄存器中寫入 IC1F=0011。
選擇 TI1 通道的有效轉(zhuǎn)換邊沿,在 TIMx_CCER 寄存器中寫入 CC1P=0(上升沿)。
配置輸入預(yù)分頻器。在本例中,我們希望捕獲發(fā)生在每一個(gè)有效的電平轉(zhuǎn)換時(shí)刻,因此預(yù)分頻器被禁止(寫 TIMx_CCMR1 寄存器的 IC1PS=00)。
設(shè)置 TIMx_CCER 寄存器的 CC1E=1,允許捕獲計(jì)數(shù)器的值到捕獲寄存器中。
如果需要,通過設(shè)置TIMx_DIER寄存器中的CC1IE位允許相關(guān)中斷請(qǐng)求,通過設(shè)置TIMx_DIER寄存器中的 CC1DE 位允許 DMA 請(qǐng)求。
當(dāng)發(fā)生一個(gè)輸入捕獲時(shí):
產(chǎn)生有效的電平轉(zhuǎn)換時(shí),計(jì)數(shù)器的值被傳送到 TIMx_CCR1 寄存器。
CC1IF 標(biāo)志被設(shè)置(中斷標(biāo)志)。當(dāng)發(fā)生至少 2 個(gè)連續(xù)的捕獲時(shí),而 CC1IF 未曾被清除,CC1OF也被置 1。
如設(shè)置了 CC1IE 位,則會(huì)產(chǎn)生一個(gè)中斷。
如設(shè)置了 CC1DE 位,則還會(huì)產(chǎn)生一個(gè) DMA 請(qǐng)求。
為了處理捕獲溢出,建議在讀出捕獲溢出標(biāo)志之前讀取數(shù)據(jù),這是為了避免丟失在讀出捕獲溢出標(biāo)志之后和讀取數(shù)據(jù)之前可能產(chǎn)生的捕獲溢出信息。
3.7 PWM 輸入模式
該模式是輸入捕獲模式的一個(gè)特例,除下列區(qū)別外,操作與輸入捕獲模式相同:
兩個(gè) ICx 信號(hào)被映射至同一個(gè) TIx 輸入。
這 2 個(gè) ICx 信號(hào)為邊沿有效,但是極性相反。
其中一個(gè) TIxFP 信號(hào)被作為觸發(fā)輸入信號(hào),而從模式控制器被配置成復(fù)位模式。
例如,你需要測(cè)量輸入到 TI1 上的 PWM 信號(hào)的長(zhǎng)度(TIMx_CCR1 寄存器)和占空比(TIMx_CCR2 寄存器),具體步驟如下(取決于 CK_INT 的頻率和預(yù)分頻器的值):
選擇 TIMx_CCR1 的有效輸入:置 TIMx_CCMR1 寄存器的 CC1S=01(選中 TI1)。
選擇 TI1FP1 的有效極性(用來捕獲數(shù)據(jù)到 TIMx_CCR1 中和清除計(jì)數(shù)器):置 CC1P=0(上升沿有效)。
選擇 TIMx_CCR2 的有效輸入:置 TIMx_CCMR1 寄存器的 CC2S=10(選中 TI1)。
選擇 TI1FP2 的有效極性(捕獲數(shù)據(jù)到 TIMx_CCR2):置 CC2P=1(下降沿有效)。
選擇有效的觸發(fā)輸入信號(hào):置 TIMx_SMCR 寄存器中的 TS=101(選擇 TI1FP1)。
配置從模式控制器為復(fù)位模式:置 TIMx_SMCR 中的 SMS=100。
使能捕獲:置 TIMx_CCER 寄存器中 CC1E=1 且 CC2E=1。
PWM 輸入模式時(shí)序圖如下:

因?yàn)橹挥?TI1FP1 和 TI2FP2 連到了從模式控制器,所以 PWM 輸入模式只能使用TIMx_CH1/TIMx_CH2 信號(hào)。
3.8 輸出比較模式
此項(xiàng)功能是用來控制一個(gè)輸出波形,或者指示一段給定的的時(shí)間已經(jīng)到時(shí)。當(dāng)計(jì)數(shù)器與捕獲/比較寄存器的內(nèi)容相同時(shí),輸出比較功能做如下操作:
將輸出比較模式(TIMx_CCMRx 寄存器中的 OCxM 位)和輸出極性(TIMx_CCER 寄存器中的 CCxP位)定義的值輸出到對(duì)應(yīng)的引腳上。在比較匹配時(shí),輸出引腳可以保持它的電平(OCxM=000)、被設(shè)置成有效電平(OCxM=001)、被設(shè)置成無效電平(OCxM=010)或進(jìn)行翻轉(zhuǎn)(OCxM=011)。
設(shè)置中斷狀態(tài)寄存器中的標(biāo)志位(TIMx_SR 寄存器中的 CCxIF 位)。
若設(shè)置了相應(yīng)的中斷屏蔽(TIMx_DIER 寄存器中的 CCxIE 位),則產(chǎn)生一個(gè)中斷。
若設(shè)置了相應(yīng)的使能位(TIMx_DIER 寄存器中的 CCxDE 位,TIMx_CR2 寄存器中的 CCDS 位選擇 DMA 請(qǐng)求功能),則產(chǎn)生一個(gè) DMA 請(qǐng)求。
TIMx_CCMRx 中的 OCxPE 位選擇 TIMx_CCRx 寄存器是否需要使用預(yù)裝載寄存器。在輸出比較模式下,更新事件 UEV 對(duì) OCxREF 和 OCx 輸出沒有影響。
同步的精度可以達(dá)到計(jì)數(shù)器的一個(gè)計(jì)數(shù)周期。輸出比較模式(在單脈沖模式下)也能用來輸出一個(gè)單脈沖。
輸出比較模式的配置步驟:
1. 選擇計(jì)數(shù)器時(shí)鐘(內(nèi)部,外部,預(yù)分頻器)。
2. 將相應(yīng)的數(shù)據(jù)寫入 TIMx_ARR 和 TIMx_CCRx 寄存器中。
3. 如果要產(chǎn)生一個(gè)中斷請(qǐng)求,設(shè)置 CCxIE 位。
4. 選擇輸出模式,例如:
要求計(jì)數(shù)器與 CCRx 匹配時(shí)翻轉(zhuǎn) OCx 的輸出引腳,設(shè)置 OCxM=011
置 OCxPE=0 禁用預(yù)裝載寄存器
置 CCxP=0 選擇極性為高電平有效
置 CCxE=1 使能輸出
5. 設(shè)置 TIMx_CR1 寄存器的 CEN 位啟動(dòng)計(jì)數(shù)器
TIMx_CCRx 寄存器能夠在任何時(shí)候通過軟件進(jìn)行更新以控制輸出波形,條件是未使用預(yù)裝載寄存器(OCxPE='0',否則 TIMx_CCRx 的影子寄存器只能在發(fā)生下一次更新事件時(shí)被更新)。下圖給出了一個(gè)例子:

3.9 PWM 模式
脈沖寬度調(diào)制模式可以產(chǎn)生一個(gè)由 TIMx_ARR 寄存器確定頻率、由 TIMx_CCRx 寄存器確定占空比的信號(hào)。
在 TIMx_CCMRx 寄存器中的 OCxM 位寫入'110'(PWM 模式 1)或'111'(PWM 模式 2),能夠獨(dú)立地設(shè)置每個(gè) OCx 輸出通道產(chǎn)生一路 PWM。必須通過設(shè)置 TIMx_CCMRx 寄存器的 OCxPE 位使能相應(yīng)的預(yù)裝載寄存器,最后還要設(shè)置 TIMx_CR1 寄存器的 ARPE 位,(在向上計(jì)數(shù)或中心對(duì)稱模式中)使能自動(dòng)重裝載的預(yù)裝載寄存器。
僅當(dāng)發(fā)生一個(gè)更新事件的時(shí)候,預(yù)裝載寄存器才能被傳送到影子寄存器,因此在計(jì)數(shù)器開始計(jì)數(shù)之前,必須通過設(shè)置 TIMx_EGR 寄存器中的 UG 位來初始化所有的寄存器。OCx 的極性可以通過軟件在 TIMx_CCER 寄存器中的 CCxP 位設(shè)置,它可以設(shè)置為高電平有效或低電平有效。OCx 的輸出使能通過(TIMx_CCER 和 TIMx_BDTR 寄存器中)CCxE、CCxNE、MOE、OSSI和 OSSR 位的組合控制。在 PWM 模式(模式 1 或模式 2)下,TIMx_CNT 和 TIMx_CCRx 始終在進(jìn)行比較,(依據(jù)計(jì)數(shù)器的計(jì)數(shù)方向)以確定是否符合 TIMx_CCRx≤TIMx_CNT 或者 TIMx_CNT≤TIMx_CCRx。
根據(jù) TIMx_CR1 寄存器中 CMS 位的狀態(tài),定時(shí)器能夠產(chǎn)生邊沿對(duì)齊的 PWM 信號(hào)或中央對(duì)齊的 PWM信號(hào)。
PWM 邊沿對(duì)齊模式
向上計(jì)數(shù)配置
當(dāng) TIMx_CR1 寄存器中的 DIR 位為低的時(shí)候執(zhí)行向上計(jì)數(shù)。下面是一個(gè) PWM 模式 1 的例子。當(dāng) TIMx_CNT

向下計(jì)數(shù)的配置
當(dāng) TIMx_CR1 寄存器的 DIR 位為高時(shí)執(zhí)行向下計(jì)數(shù)。在 PWM 模式 1,當(dāng) TIMx_CNT>TIMx_CCRx 時(shí)參考信號(hào) OCxREF 為低,否則為高。如果TIMx_CCRx 中的比較值大于 TIMx_ARR 中的自動(dòng)重裝載值,則 OCxREF 保持為'1'。該模式下不能產(chǎn)生 0%的 PWM 波形。
PWM 中央對(duì)齊模式
當(dāng) TIMx_CR1 寄存器中的 CMS 位不為'00'時(shí)為中央對(duì)齊模式(所有其他的配置對(duì) OCxREF/OCx 信號(hào)都有相同的作用)。根據(jù)不同的 CMS 位設(shè)置,比較標(biāo)志可以在計(jì)數(shù)器向上計(jì)數(shù)時(shí)被置 1、在計(jì)數(shù)器向下計(jì)數(shù)時(shí)被置 1、或在計(jì)數(shù)器向上和向下計(jì)數(shù)時(shí)被置 1。TIMx_CR1 寄存器中的計(jì)數(shù)方向位(DIR)由硬件更新,不要用軟件修改它。下圖給出了一些中央對(duì)齊的 PWM 波形的例子。
TIMx_ARR=8
PWM 模式 1
TIMx_CR1 寄存器的 CMS=01,在中央對(duì)齊模式 1 下,當(dāng)計(jì)數(shù)器向下計(jì)數(shù)時(shí)設(shè)置比較標(biāo)志。

使用中央對(duì)齊模式的提示:
進(jìn)入中央對(duì)齊模式時(shí),使用當(dāng)前的向上/向下計(jì)數(shù)配置;這就意味著計(jì)數(shù)器向上還是向下計(jì)數(shù)取決于 TIMx_CR1 寄存器中 DIR 位的當(dāng)前值。此外,軟件不能同時(shí)修改 DIR 和 CMS 位。
不推薦當(dāng)運(yùn)行在中央對(duì)齊模式時(shí)改寫計(jì)數(shù)器,因?yàn)檫@會(huì)產(chǎn)生不可預(yù)知的結(jié)果。特別地: 如果寫入計(jì)數(shù)器的值大于自動(dòng)重加載的值(TIMx_CNT>TIMx_ARR),則方向不會(huì)被更新。例如,如果計(jì)數(shù)器正在向上計(jì)數(shù),它就會(huì)繼續(xù)向上計(jì)數(shù)。如果將 0 或者 TIMx_ARR 的值寫入計(jì)數(shù)器,方向被更新,但不產(chǎn)生更新事件 UEV。
使用中央對(duì)齊模式最保險(xiǎn)的方法,就是在啟動(dòng)計(jì)數(shù)器之前產(chǎn)生一個(gè)軟件更新(設(shè)置 TIMx_EGR位中的 UG 位),并且不要在計(jì)數(shù)進(jìn)行過程中修改計(jì)數(shù)器的值。
3.10 互補(bǔ)輸出和死區(qū)插入
高級(jí)控制定時(shí)器(TIM1 和 TIM8)能夠輸出兩路互補(bǔ)信號(hào),并且能夠管理輸出的瞬時(shí)關(guān)斷和接通。這段時(shí)間通常被稱為死區(qū),用戶應(yīng)該根據(jù)連接的輸出器件和它們的特性(電平轉(zhuǎn)換的延時(shí)、電源開關(guān)的延時(shí)等)來調(diào)整死區(qū)時(shí)間。
配置 TIMx_CCER 寄存器中的 CCxP 和 CCxNP 位,可以為每一個(gè)輸出獨(dú)立地選擇極性(主輸出 OCx或互補(bǔ)輸出 OCxN)。
互補(bǔ)信號(hào) OCx和OCxN通過下列控制位的組合進(jìn)行控制:TIMx_CCER寄存器的CCxE和CCxNE位,TIMx_BDTR 和 TIMx_CR2 寄存器中的 MOE、OISx、OISxN、OSSI 和 OSSR 位,特別的是,在轉(zhuǎn)換到 IDLE 狀態(tài)時(shí)(MOE 下降到 0)死區(qū)被激活。
同時(shí)設(shè)置 CCxE 和 CCxNE 位將插入死區(qū),如果存在剎車電路,則還要設(shè)置 MOE 位。每一個(gè)通道都有一個(gè) 10 位的死區(qū)發(fā)生器。參考信號(hào) OCxREF 可以產(chǎn)生 2 路輸出 OCx 和 OCxN。如果 OCx 和 OCxN為高有效:
OCx 輸出信號(hào)與參考信號(hào)相同,只是它的上升沿相對(duì)于參考信號(hào)的上升沿有一個(gè)延遲。
OCxN 輸出信號(hào)與參考信號(hào)相反,只是它的上升沿相對(duì)于參考信號(hào)的下降沿有一個(gè)延遲。如果延遲大于當(dāng)前有效的輸出寬度(OCx 或者 OCxN),則不會(huì)產(chǎn)生相應(yīng)的脈沖。下列幾張圖顯示了死區(qū)發(fā)生器的輸出信號(hào)和當(dāng)前參考信號(hào) OCxREF 之間的關(guān)系。(假設(shè) CCxP=0、CCxNP=0、MOE=1、CCxE=1 并且 CCxNE=1)。帶死區(qū)插入的互補(bǔ)輸出如下圖所示:

死區(qū)波形延遲大于負(fù)脈沖如下圖所示:

死區(qū)波形延遲大于正脈沖如下圖所示:

每一個(gè)通道的死區(qū)延時(shí)都是相同的,是由 TIMx_BDTR 寄存器中的 DTG 位編程配置。重定向 OCxREF 到 OCx 或 OCxN
在輸出模式下(強(qiáng)置、輸出比較或 PWM),通過配置 TIMx_CCER 寄存器的 CCxE 和 CCxNE 位,OCxREF 可以被重定向到 OCx 或者 OCxN 的輸出。
這個(gè)功能可以在互補(bǔ)輸出處于無效電平時(shí),在某個(gè)輸出上送出一個(gè)特殊的波形(例如 PWM 或者靜態(tài)有效電平)。另一個(gè)作用是,讓兩個(gè)輸出同時(shí)處于無效電平,或處于有效電平和帶死區(qū)的互補(bǔ)輸出。
3.11 產(chǎn)生六步 PWM 輸出
當(dāng)在一個(gè)通道上需要互補(bǔ)輸出時(shí),預(yù)裝載位有 OCxM、CCxE 和 CCxNE。在發(fā)生 COM 換相事件時(shí),這些預(yù)裝載位被傳送到影子寄存器位。這樣你就可以預(yù)先設(shè)置好下一步驟配置,并在同一個(gè)時(shí)刻同時(shí)修更改所有通道的配置。COM 可以通過設(shè)置 TIMx_EGR 寄存器的 COM 位由軟件產(chǎn)生,或在TRGI 上升沿由硬件產(chǎn)生。
當(dāng)發(fā)生 COM 事件時(shí)會(huì)設(shè)置一個(gè)標(biāo)志位(TIMx_SR 寄存器中的 COMIF 位),這時(shí)如果已設(shè)置了TIMx_DIER 寄存器的 COMIE 位,則產(chǎn)生一個(gè)中斷;如果已設(shè)置了 TIMx_DIER 寄存器的 COMDE 位,則產(chǎn)生一個(gè) DMA 請(qǐng)求。
下圖顯示當(dāng)發(fā)生 COM 事件時(shí),三種不同配置下 OCx 和 OCxN 輸出:

3.12 單脈沖模式
單脈沖模式(OPM)是前述眾多模式的一個(gè)特例。這種模式允許計(jì)數(shù)器響應(yīng)一個(gè)激勵(lì),并在一個(gè)程序可控的延時(shí)之后產(chǎn)生一個(gè)脈寬可程序控制的脈沖??梢酝ㄟ^從模式控制器啟動(dòng)計(jì)數(shù)器,在輸出比較模式或者 PWM 模式下產(chǎn)生波形。設(shè)置 TIMx_CR1寄存器中的 OPM 位將選擇單脈沖模式,這樣可以讓計(jì)數(shù)器自動(dòng)地在產(chǎn)生下一個(gè)更新事件 UEV 時(shí)停止。
僅當(dāng)比較值與計(jì)數(shù)器的初始值不同時(shí),才能產(chǎn)生一個(gè)脈沖。啟動(dòng)之前(當(dāng)定時(shí)器正在等待觸發(fā)),
須如下配置:
向上計(jì)數(shù)方式:計(jì)數(shù)器 CNT
向下計(jì)數(shù)方式:計(jì)數(shù)器 CNT>CCRx。

例如,你需要在從 TI2 輸入腳上檢測(cè)到一個(gè)上升沿開始,延遲 tDELAY 之后,在 OC1 上產(chǎn)生一個(gè)長(zhǎng)度為 tPULSE 的正脈沖。
假定 TI2FP2 作為觸發(fā) 1:
置 TIMx_CCMR1 寄存器中的 CC2S=01,把 TI2FP2 映像到 TI2。
置 TIMx_CCER 寄存器中的 CC2P=0,使 TI2FP2 能夠檢測(cè)上升沿。
置 TIMx_SMCR 寄存器中的 TS=110,TI2FP2 作為從模式控制器的觸發(fā)(TRGI)。
置 TIMx_SMCR 寄存器中的 SMS=110(觸發(fā)模式),TI2FP2 被用來啟動(dòng)計(jì)數(shù)器。OPM 的波形由寫入比較寄存器的數(shù)值決定(要考慮時(shí)鐘頻率和計(jì)數(shù)器預(yù)分頻器)
tDELAY 由 TIMx_CCR1 寄存器中的值定義。
tPULSE 由自動(dòng)裝載值和比較值之間的差值定義(TIMx_ARR-TIMx_CCR1)。
假定當(dāng)發(fā)生比較匹配時(shí)要產(chǎn)生從 0 到 1 的波形,當(dāng)計(jì)數(shù)器達(dá)到預(yù)裝載值時(shí)要產(chǎn)生一個(gè)從 1 到0 的波形;首先要置 TIMx_CCMR1 寄存器的 OC1M=111,進(jìn)入 PWM 模式 2;根據(jù)需要有選擇地使能預(yù)裝載寄存器:置 TIMx_CCMR1 中的 OC1PE=1 和 TIMx_CR1 寄存器中的 ARPE;然后在 TIMx_CCR1 寄存器中填寫比較值,在 TIMx_ARR 寄存器中填寫自動(dòng)裝載值,設(shè)置 UG 位來產(chǎn)生一個(gè)更新事件,然后等待在 TI2 上的一個(gè)外部觸發(fā)事件。本例中,CC1P=0。
在這個(gè)例子中,TIMx_CR1 寄存器中的 DIR 和 CMS 位應(yīng)該置低。因?yàn)橹恍枰粋€(gè)脈沖,所以必須設(shè)置 TIMx_CR1 寄存器中的 OPM=1,在下一個(gè)更新事件(當(dāng)計(jì)數(shù)器從自動(dòng)裝載值翻轉(zhuǎn)到 0)時(shí)停止計(jì)數(shù)。
特殊情況:OCx 快速使能:
在單脈沖模式下,在 TIx 輸入腳的邊沿檢測(cè)邏輯設(shè)置 CEN 位以啟動(dòng)計(jì)數(shù)器。然后計(jì)數(shù)器和比較值間的比較操作產(chǎn)生了輸出的轉(zhuǎn)換。但是這些操作需要一定的時(shí)鐘周期,因此它限制了可得到的最小延時(shí) tDELAY。如果要以最小延時(shí)輸出波形,可以設(shè)置 TIMx_CCMRx 寄存器中的 OCxFE 位;此時(shí) OCxREF(和 OCx)直接響應(yīng)激勵(lì)而不再依賴比較的結(jié)果,輸出的波形與比較匹配時(shí)的波形一樣。OCxFE 只在通道配置為 PWM1 和 PWM2 模式時(shí)起作用。
3.13 編碼器接口模式
選擇編碼器接口模式的方法是:如果計(jì)數(shù)器只在 TI2 的邊沿計(jì)數(shù),則置 TIMx_SMCR 寄存器中的SMS=001;如果只在 TI1 邊沿計(jì)數(shù),則置 SMS=010;如果計(jì)數(shù)器同時(shí)在 TI1 和 TI2 邊沿計(jì)數(shù),則置SMS=011。
通過設(shè)置 TIMx_CCER 寄存器中的 CC1P 和 CC2P 位,可以選擇 TI1 和 TI2 極性;如果需要,還可以對(duì)輸入濾波器編程。
兩個(gè)輸入 TI1 和 TI2 被用來作為增量編碼器的接口。參看表 71,假定計(jì)數(shù)器已經(jīng)啟動(dòng)(TIMx_CR1 寄存器中的 CEN=1),則計(jì)數(shù)器由每次在 TI1FP1 或 TI2FP2 上的有效跳變驅(qū)動(dòng)。TI1FP1 和 TI2FP2 是TI1 和 TI2 在通過輸入濾波器和極性控制后的信號(hào);如果沒有濾波和變相,則 TI1FP1=TI1,TI2FP2=TI2。根據(jù)兩個(gè)輸入信號(hào)的跳變順序,產(chǎn)生了計(jì)數(shù)脈沖和方向信號(hào)。依據(jù)兩個(gè)輸入信號(hào)的跳變順序,計(jì)數(shù)器向上或向下計(jì)數(shù),同時(shí)硬件對(duì) TIMx_CR1 寄存器的 DIR 位進(jìn)行相應(yīng)的設(shè)置。不管計(jì)數(shù)器是依靠 TI1 計(jì)數(shù)、依靠 TI2 計(jì)數(shù)或者同時(shí)依靠 TI1 和 TI2 計(jì)數(shù),在任一輸入端(TI1 或者 TI2)的跳變都會(huì)重新計(jì)算 DIR 位。
編碼器接口模式基本上相當(dāng)于使用了一個(gè)帶有方向選擇的外部時(shí)鐘。這意味著計(jì)數(shù)器只在 0 到TIMx_ARR 寄存器的自動(dòng)裝載值之間連續(xù)計(jì)數(shù)(根據(jù)方向,或是 0 到 ARR 計(jì)數(shù),或是 ARR 到 0 計(jì)數(shù))。所以在開始計(jì)數(shù)之前必須配置 TIMx_ARR;同樣,捕獲器、比較器、預(yù)分頻器、重復(fù)計(jì)數(shù)器、觸發(fā)輸出特性等仍工作如常。編碼器模式和外部時(shí)鐘模式 2 不兼容,因此不能同時(shí)操作。在這個(gè)模式下,計(jì)數(shù)器依照增量編碼器的速度和方向被自動(dòng)的修改,因此計(jì)數(shù)器的內(nèi)容始終指示著編碼器的位置。計(jì)數(shù)方向與相連的傳感器旋轉(zhuǎn)的方向?qū)?yīng)。下表列出了所有可能的組合,假設(shè)TI1 和 TI2 不同時(shí)變換。
| 有效邊沿 | 相對(duì)信號(hào)的電平(TI1FP1 對(duì)應(yīng) TI2, TI2FP2 對(duì)應(yīng) TI1) | TI1FP1 信號(hào) | TI2FP2 信號(hào) | ||
| 上升 | 下降 | 上升 | 下降 | ||
| 僅在 TI1 計(jì)數(shù) | 高 | 向下計(jì)數(shù) | 向上計(jì)數(shù) | 不計(jì)數(shù) | 不計(jì)數(shù) |
| 低 | 向上計(jì)數(shù) | 向下計(jì)數(shù) | 不計(jì)數(shù) | 不計(jì)數(shù) | |
| 僅在 TI2 計(jì)數(shù) | 高 | 不計(jì)數(shù) | 不計(jì)數(shù) | 向上計(jì)數(shù) | 向下計(jì)數(shù) |
| 低 | 不計(jì)數(shù) | 不計(jì)數(shù) | 向下計(jì)數(shù) | 向上計(jì)數(shù) | |
| 在 TI1 和 TI2 上計(jì)數(shù) | 高 | 向下計(jì)數(shù) | 向上計(jì)數(shù) | 向上計(jì)數(shù) | 向下計(jì)數(shù) |
| 低 | 向上計(jì)數(shù) | 向下計(jì)數(shù) | 向下計(jì)數(shù) | 向上計(jì)數(shù) |
一個(gè)外部的增量編碼器可以直接與 MCU 連接而不需要外部接口邏輯。但是,一般會(huì)使用比較器將編碼器的差動(dòng)輸出轉(zhuǎn)換到數(shù)字信號(hào),這大大增加了抗噪聲干擾能力。編碼器輸出的第三個(gè)信號(hào)表示機(jī)械零點(diǎn),可以把它連接到一個(gè)外部中斷輸入并觸發(fā)一個(gè)計(jì)數(shù)器復(fù)位。
下圖是一個(gè)計(jì)數(shù)器操作的實(shí)例,顯示了計(jì)數(shù)信號(hào)的產(chǎn)生和方向控制。它還顯示了當(dāng)選擇了雙邊沿時(shí),輸入抖動(dòng)是如何被抑制的;抖動(dòng)能會(huì)在傳感器的位置靠近一個(gè)轉(zhuǎn)換點(diǎn)時(shí)產(chǎn)生。在這個(gè)例子中,我們假定配置如下:
CC1S='01'(TIMx_CCMR1 寄存器,IC1FP1 映射到 TI1)
CC2S='01'(TIMx_CCMR2 寄存器,IC2FP2 映射到 TI2)
CC1P='0'(TIMx_CCER 寄存器,IC1FP1 不反相,IC1FP1=TI1)
CC2P='0'(TIMx_CCER 寄存器,IC2FP2 不反相,IC2FP2=TI2)
SMS='011'(TIMx_SMCR 寄存器,所有的輸入均在上升沿和下降沿有效).
CEN='1'(TIMx_CR1 寄存器,計(jì)數(shù)器使能)
編碼器模式下的計(jì)數(shù)器操作實(shí)例如下:

下圖為當(dāng) IC1FP1 極性反相時(shí)計(jì)數(shù)器的操作實(shí)例(CC1P='1',其他配置與上例相同):

當(dāng)定時(shí)器配置成編碼器接口模式時(shí),提供傳感器當(dāng)前位置的信息。使用第二個(gè)配置在捕獲模式的定時(shí)器,可以測(cè)量?jī)蓚€(gè)編碼器事件的間隔,獲得動(dòng)態(tài)的信息(速度,加速度,減速度)。指示機(jī)械零點(diǎn)的編碼器輸出可被用做此目的。根據(jù)兩個(gè)事件間的間隔,可以按照固定的時(shí)間讀出計(jì)數(shù)器。如果可能的話,你可以把計(jì)數(shù)器的值鎖存到第三個(gè)輸入捕獲寄存器(捕獲信號(hào)必須是周期的并且可以由另一個(gè)定時(shí)器產(chǎn)生);也可以通過一個(gè)由實(shí)時(shí)時(shí)鐘產(chǎn)生的 DMA 請(qǐng)求來讀取它的值。
3.14 定時(shí)器輸入異或功能
TIMx_CR2 寄存器中的 TI1S 位,允許通道 1 的輸入濾波器連接到一個(gè)異或門的輸出端,異或門的 3個(gè)輸入端為 TIMx_CH1、TIMx_CH2 和 TIMx_CH3。
異或輸出能夠被用于所有定時(shí)器的輸入功能,如觸發(fā)或輸入捕獲。下節(jié) 23.3.18 給出了此特性用于連接霍爾傳感器的例子。
3.15 與霍爾傳感器的接口
使用高級(jí)控制定時(shí)器(TIM1 或 TIM8)產(chǎn)生 PWM 信號(hào)驅(qū)動(dòng)馬達(dá)時(shí),可以用另一個(gè)通用 TIMx(TIM2、TIM3、TIM4 或 TIM5)定時(shí)器作為“接口定時(shí)器”來連接霍爾傳感器,3 個(gè)定時(shí)器輸入腳(CC1、CC2、CC3)通過一個(gè)異或門連接到 TI1 輸入通道(通過設(shè)置 TIMx_CR2 寄存器中的 TI1S 位來選擇),“接口定時(shí)器”捕獲這個(gè)信號(hào)。
從模式控制器被配置于復(fù)位模式,從輸入是 TI1F_ED。每當(dāng) 3 個(gè)輸入之一變化時(shí),計(jì)數(shù)器從新從 0開始計(jì)數(shù)。這樣產(chǎn)生一個(gè)由霍爾輸入端的任何變化而觸發(fā)的時(shí)間基準(zhǔn)。
“接口定時(shí)器”上的捕獲/比較通道 1 配置為捕獲模式,捕獲信號(hào)為 TRC。捕獲值反映了兩個(gè)輸入變化間的時(shí)間延遲,給出了馬達(dá)速度的信息。
“接口定時(shí)器”可以用來在輸出模式產(chǎn)生一個(gè)脈沖,這個(gè)脈沖可以(通過觸發(fā)一個(gè) COM 事件)用于改變高級(jí)定時(shí)器 TIM1 或 TIM8 各個(gè)通道的屬性,而高級(jí)控制定時(shí)器產(chǎn)生 PWM 信號(hào)驅(qū)動(dòng)馬達(dá)。因此“接口定時(shí)器”通道必須編程為在一個(gè)指定的延時(shí)(輸出比較或 PWM 模式)之后產(chǎn)生一個(gè)正脈沖,這個(gè)脈沖通過 TRGO 輸出被送到高級(jí)控制定時(shí)器 TIM1 或 TIM8。
舉例:霍爾輸入連接到 TIMx 定時(shí)器,要求每次任一霍爾輸入上發(fā)生變化之后的一個(gè)指定的時(shí)刻,改變高級(jí)控制定時(shí)器 TIMx 的 PWM 配置。
置 TIMx_CR2 寄存器的 TI1S 位為'1',配置三個(gè)定時(shí)器輸入邏輯或到 TI1 輸入,時(shí)基編程:置 TIMx_ARR 為其最大值(計(jì)數(shù)器必須通過 TI1 的變化清零)。設(shè)置預(yù)分頻器得到一個(gè)最大的計(jì)數(shù)器周期,它長(zhǎng)于傳感器上的兩次變化的時(shí)間間隔。
設(shè)置通道 1 為捕獲模式(選中 TRC):置 TIMx_CCMR1 寄存器中 CC1S=01,如果需要,還可以設(shè)置數(shù)字濾波器。
設(shè)置通道 2 為 PWM2 模式,并具有要求的延時(shí):置 TIMx_CCMR1 寄存器中的 OC2M=111 和CC2S=00。
選擇 OC2REF 作為 TRGO 上的觸發(fā)輸出:置 TIMx_CR2 寄存器中的 MMS=101。在高級(jí)控制寄存器TIM1中,正確的ITR輸入必須是觸發(fā)器輸入,定時(shí)器被編程為產(chǎn)生PWM信號(hào),捕獲/比較控制信號(hào)為預(yù)裝載的(TIMx_CR2 寄存器中 CCPC=1),同時(shí)觸發(fā)輸入控制 COM 事件(TIMx_CR2 寄存器中 CCUS=1)。在一次 COM 事件后,寫入下一步的 PWM 控制位(CCxE、OCxM),這可以在處理 OC2REF 上升沿的中斷子程序里實(shí)現(xiàn)。下圖顯示了這個(gè)實(shí)例:

3.16 TIMx 定時(shí)器和外部觸發(fā)的同步
TIMx 定時(shí)器能夠在多種模式下和一個(gè)外部的觸發(fā)同步:復(fù)位模式、門控模式和觸發(fā)模式。
從模式:復(fù)位模式
在發(fā)生一個(gè)觸發(fā)輸入事件時(shí),計(jì)數(shù)器和它的預(yù)分頻器能夠重新被初始化;同時(shí),如果TIMx_CR1寄存器的 URS位為低,還產(chǎn)生一個(gè)更新事件 UEV;然后所有的預(yù)裝載寄存器(TIMx_ARR,TIMx_CCRx)都被更新了。
在以下的例子中,TI1 輸入端的上升沿導(dǎo)致向上計(jì)數(shù)器被清零:
配置通道 1 以檢測(cè) TI1 的上升沿。配置輸入濾波器的帶寬(在本例中,不需要任何濾波器,因此保持 IC1F=0000)。觸發(fā)操作中不使用捕獲預(yù)分頻器,所以不需要配置。CC1S位只選擇輸入捕獲源,即 TIMx_CCMR1 寄存器中 CC1S=01。置 TIMx_CCER 寄存器中 CC1P=0 以確定極性(只檢測(cè)上升沿)。
置 TIMx_SMCR 寄存器中 SMS=100,配置定時(shí)器為復(fù)位模式;置 TIMx_SMCR 寄存器中 TS=101,選擇 TI1 作為輸入源。
置 TIMx_CR1 寄存器中 CEN=1,啟動(dòng)計(jì)數(shù)器。
計(jì)數(shù)器開始依據(jù)內(nèi)部時(shí)鐘計(jì)數(shù),然后正常運(yùn)轉(zhuǎn)直到 TI1 出現(xiàn)一個(gè)上升沿;此時(shí),計(jì)數(shù)器被清零然后從 0 重新開始計(jì)數(shù)。同時(shí),觸發(fā)標(biāo)志(TIMx_SR 寄存器中的 TIF 位)被設(shè)置,根據(jù) TIMx_DIER 寄存器中 TIE(中斷使能)位和 TDE(DMA 使能)位的設(shè)置,產(chǎn)生一個(gè)中斷請(qǐng)求或一個(gè) DMA 請(qǐng)求。
下圖顯示當(dāng)自動(dòng)重裝載寄存器 TIMx_ARR=0x36 時(shí)的動(dòng)作。在 TI1 上升沿和計(jì)數(shù)器的實(shí)際復(fù)位之間的延時(shí)取決于 TI1 輸入端的重同步電路:

從模式:門控模式
按照選中的輸入端電平使能計(jì)數(shù)器。在如下的例子中,計(jì)數(shù)器只在 TI1 為低時(shí)向上計(jì)數(shù):
配置通道 1 以檢測(cè) TI1 上的低電平。配置輸入濾波器帶寬(本例中,不需要濾波,所以保持IC1F=0000)。觸發(fā)操作中不使用捕獲預(yù)分頻器,所以不需要配置。CC1S 位用于選擇輸入捕獲源,置 TIMx_CCMR1 寄存器中 CC1S=01。置 TIMx_CCER 寄存器中 CC1P=1 以確定極性(只檢測(cè)低電平)。
置 TIMx_SMCR 寄存器中 SMS=101,配置定時(shí)器為門控模式;置 TIMx_SMCR 寄存器中 TS=101,選擇 TI1 作為輸入源。
置 TIMx_CR1 寄存器中 CEN=1,啟動(dòng)計(jì)數(shù)器。在門控模式下,如果 CEN=0,則計(jì)數(shù)器不能啟動(dòng),不論觸發(fā)輸入電平如何。
只要 TI1 為低,計(jì)數(shù)器開始依據(jù)內(nèi)部時(shí)鐘計(jì)數(shù),一旦 TI1 變高則停止計(jì)數(shù)。當(dāng)計(jì)數(shù)器開始或停止時(shí)都設(shè)置 TIMx_SR 中的 TIF 標(biāo)置。TI1 上升沿和計(jì)數(shù)器實(shí)際停止之間的延時(shí)取決于 TI1 輸入端的重同步電路:

從模式:觸發(fā)模式
輸入端上選中的事件使能計(jì)數(shù)器。在下面的例子中,計(jì)數(shù)器在 TI2 輸入的上升沿開始向上計(jì)數(shù):
配置通道 2 檢測(cè) TI2 的上升沿。配置輸入濾波器帶寬(本例中,不需要任何濾波器,保持IC2F=0000)。觸發(fā)操作中不使用捕獲預(yù)分頻器,不需要配置。CC2S 位只用于選擇輸入捕獲源,置 TIMx_CCMR1 寄存器中 CC2S=01。置 TIMx_CCER 寄存器中 CC2P=1 以確定極性(只檢測(cè)低電平)。
置 TIMx_SMCR 寄存器中 SMS=110,配置定時(shí)器為觸發(fā)模式;置 TIMx_SMCR 寄存器中 TS=110,選擇 TI2 作為輸入源。當(dāng) TI2 出現(xiàn)一個(gè)上升沿時(shí),計(jì)數(shù)器開始在內(nèi)部時(shí)鐘驅(qū)動(dòng)下計(jì)數(shù),同時(shí)設(shè)置 TIF 標(biāo)志。TI2 上升沿和計(jì)數(shù)器啟動(dòng)計(jì)數(shù)之間的延時(shí),取決于 TI2 輸入端的重同步電路:

從模式:外部時(shí)鐘模式 2+觸發(fā)模式
外部時(shí)鐘模式 2 可以與另一種從模式(外部時(shí)鐘模式 1 和編碼器模式除外)一起使用。這時(shí),ETR 信號(hào)被用作外部時(shí)鐘的輸入,在復(fù)位模式、門控模式或觸發(fā)模式可以選擇另一個(gè)輸入作為觸發(fā)輸入。不建議使用 TIMx_SMCR 寄存器的 TS 位選擇 ETR 作為 TRGI。
在下面的例子中,一旦在 TI1 上出現(xiàn)一個(gè)上升沿,計(jì)數(shù)器即在 ETR 的每一個(gè)上升沿向上計(jì)數(shù)一次:
1. 通過 TIMx_SMCR 寄存器配置外部觸發(fā)輸入電路:
ETF=0000:沒有濾波
ETPS=00:不用預(yù)分頻器
ETP=0:檢測(cè) ETR 的上升沿,置 ECE=1 使能外部時(shí)鐘模式 2。
2. 按如下配置通道 1,檢測(cè) TI 的上升沿:
IC1F=0000:沒有濾波
觸發(fā)操作中不使用捕獲預(yù)分頻器,不需要配置
置 TIMx_CCMR1 寄存器中 CC1S=01,選擇輸入捕獲源
置 TIMx_CCER 寄存器中 CC1P=0 以確定極性(只檢測(cè)上升沿)
3. 置 TIMx_SMCR 寄存器中 SMS=110,配置定時(shí)器為觸發(fā)模式。置 TIMx_SMCR 寄存器中 TS=101,選擇 TI1 作為輸入源。當(dāng) TI1 上出現(xiàn)一個(gè)上升沿時(shí),TIF 標(biāo)志被設(shè)置,計(jì)數(shù)器開始在 ETR 的上升沿計(jì)數(shù)。ETR 信號(hào)的上升沿和計(jì)數(shù)器實(shí)際復(fù)位間的延時(shí),取決于 ETRP 輸入端的重同步電路。

5 定時(shí)器初始化結(jié)構(gòu)體詳解
在標(biāo)準(zhǔn)庫函數(shù)頭文件w55mh32_tim.h中對(duì)定時(shí)器外設(shè)建立了四個(gè)初始化結(jié)構(gòu)體,分別為時(shí)基初始化結(jié)構(gòu)體TIM_TimeBaseInitTypeDef、 輸出比較初始化結(jié)構(gòu)體TIM_OCInitTypeDef、輸入捕獲初始化結(jié)構(gòu)體TIM_ICInitTypeDef和斷路和死區(qū)初始化結(jié)構(gòu)體TIM_BDTRInitTypeDef, 高級(jí)控制定時(shí)器可以用到所有初始化結(jié)構(gòu)體,通用定時(shí)器不能使用TIM_BDTRInitTypeDef結(jié)構(gòu)體, 基本定時(shí)器只能使用時(shí)基結(jié)構(gòu)體。接下來我們具體講解下這四個(gè)結(jié)構(gòu)體。
5.1 TIM_TimeBaseInitTypeDef
時(shí)基結(jié)構(gòu)體TIM_TimeBaseInitTypeDef用于定時(shí)器基礎(chǔ)參數(shù)設(shè)置,與TIM_TimeBaseInit函數(shù)配合使用完成配置。
代碼清單:高級(jí)定時(shí)器-1 定時(shí)器基本初始化結(jié)構(gòu)體
typedef struct {
uint16_t TIM_Prescaler; // 預(yù)分頻器
uint16_t TIM_CounterMode; // 計(jì)數(shù)模式
uint32_t TIM_Period; // 定時(shí)器周期
uint16_t TIM_ClockDivision; // 時(shí)鐘分頻
uint8_t TIM_RepetitionCounter; // 重復(fù)計(jì)算器
} TIM_TimeBaseInitTypeDef;
TIM_Prescaler: 定時(shí)器預(yù)分頻器設(shè)置,時(shí)鐘源經(jīng)該預(yù)分頻器才是定時(shí)器計(jì)數(shù)時(shí)鐘CK_CNT,它設(shè)定PSC寄存器的值。 計(jì)算公式為:計(jì)數(shù)器時(shí)鐘頻率 (fCK_CNT) 等于 fCK_PSC / (PSC[15:0] + 1),可實(shí)現(xiàn)1至65536分頻。
TIM_CounterMode: 定時(shí)器計(jì)數(shù)方式,可設(shè)置為向上計(jì)數(shù)、向下計(jì)數(shù)以及中心對(duì)齊。高級(jí)控制定時(shí)器允許選擇任意一種。
TIM_Period: 定時(shí)器周期,實(shí)際就是設(shè)定自動(dòng)重載寄存器ARR的值,ARR 為要裝載到實(shí)際自動(dòng)重載寄存器(即影子寄存器)的值,可設(shè)置范圍為0至65535。
TIM_ClockDivision: 時(shí)鐘分頻,設(shè)置定時(shí)器時(shí)鐘CK_INT頻率與死區(qū)發(fā)生器以及數(shù)字濾波器采樣時(shí)鐘頻率分頻比??梢赃x擇1、2、4分頻。
TIM_RepetitionCounter: 重復(fù)計(jì)數(shù)器,只有8位,只存在于高級(jí)定時(shí)器。
5.2 TIM_OCInitTypeDef
輸出比較結(jié)構(gòu)體TIM_OCInitTypeDef用于輸出比較模式,與TIM_OCxInit函數(shù)配合使用完成指定定時(shí)器輸出通道初始化配置。高級(jí)控制定時(shí)器有四個(gè)定時(shí)器通道,使用時(shí)都必須單獨(dú)設(shè)置。
代碼清單:高級(jí)定時(shí)器-2 定時(shí)器比較輸出初始化結(jié)構(gòu)體
typedef struct {
uint16_t TIM_OCMode; // 比較輸出模式
uint16_t TIM_OutputState; // 比較輸出使能
uint16_t TIM_OutputNState; // 比較互補(bǔ)輸出使能
uint32_t TIM_Pulse; // 脈沖寬度
uint16_t TIM_OCPolarity; // 輸出極性
uint16_t TIM_OCNPolarity; // 互補(bǔ)輸出極性
uint16_t TIM_OCIdleState; // 空閑狀態(tài)下比較輸出狀態(tài)
uint16_t TIM_OCNIdleState; // 空閑狀態(tài)下比較互補(bǔ)輸出狀態(tài)
} TIM_OCInitTypeDef;
TIM_OCMode: 比較輸出模式選擇,總共有八種,常用的為PWM1/PWM2。它設(shè)定CCMRx寄存器OCxM[2:0]位的值。
TIM_OutputState: 比較輸出使能,決定最終的輸出比較信號(hào)OCx是否通過外部引腳輸出。它設(shè)定TIMx_CCER寄存器CCxE/CCxNE位的值。
TIM_OutputNState: 比較互補(bǔ)輸出使能,決定OCx的互補(bǔ)信號(hào)OCxN是否通過外部引腳輸出。它設(shè)定CCER寄存器CCxNE位的值。
TIM_Pulse: 比較輸出脈沖寬度,實(shí)際設(shè)定比較寄存器CCR的值,決定脈沖寬度??稍O(shè)置范圍為0至65535。
TIM_OCPolarity: 比較輸出極性,可選OCx為高電平有效或低電平有效。它決定著定時(shí)器通道有效電平。它設(shè)定CCER寄存器的CCxP位的值。
TIM_OCNPolarity: 比較互補(bǔ)輸出極性,可選OCxN為高電平有效或低電平有效。它設(shè)定TIMx_CCER寄存器的CCxNP位的值。
TIM_OCIdleState: 空閑狀態(tài)時(shí)通道輸出電平設(shè)置,可選輸出1或輸出0,即在空閑狀態(tài)(BDTR_MOE位為0)時(shí),經(jīng)過死區(qū)時(shí)間后定時(shí)器通道輸出高電平或低電平。它設(shè)定CR2寄存器的OISx位的值。
TIM_OCNIdleState: 空閑狀態(tài)時(shí)互補(bǔ)通道輸出電平設(shè)置,可選輸出1或輸出0,即在空閑狀態(tài)(BDTR_MOE位為0)時(shí),經(jīng)過死區(qū)時(shí)間后定時(shí)器互補(bǔ)通道輸出高電平或低電平, 設(shè)定值必須與TIM_OCIdleState相反。它設(shè)定是CR2寄存器的OISxN位的值。
5.3 TIM_ICInitTypeDef
輸入捕獲結(jié)構(gòu)體TIM_ICInitTypeDef用于輸入捕獲模式,與TIM_ICInit函數(shù)配合使用完成定時(shí)器輸入通道初始化配置。 如果使用PWM輸入模式需要與TIM_PWMIConfig函數(shù)配合使用完成定時(shí)器輸入通道初始化配置。
代碼清單:高級(jí)定時(shí)器 定時(shí)器輸入捕獲初始化結(jié)構(gòu)體
typedef struct {
uint16_t TIM_Channel; // 輸入通道選擇
uint16_t TIM_ICPolarity; // 輸入捕獲觸發(fā)選擇
uint16_t TIM_ICSelection; // 輸入捕獲選擇
uint16_t TIM_ICPrescaler; // 輸入捕獲預(yù)分頻器
uint16_t TIM_ICFilter; // 輸入捕獲濾波器
} TIM_ICInitTypeDef;
TIM_Channel: 捕獲通道ICx選擇,可選TIM_Channel_1、 TIM_Channel_2、TIM_Channel_3或TIM_Channel_4四個(gè)通道。它設(shè)定CCMRx寄存器CCxS位 的值。
TIM_ICPolarity: 輸入捕獲邊沿觸發(fā)選擇,可選上升沿觸發(fā)、 下降沿觸發(fā)或邊沿跳變觸發(fā)。它設(shè)定CCER寄存器CCxP位和CCxNP位的值。
TIM_ICSelection: 輸入通道選擇,捕獲通道ICx的信號(hào)可來自三個(gè)輸入通道,分別為TIM_ICSelection_DirectTI、 TIM_ICSelection_IndirectTI或TIM_ICSelection_TRC,具體的區(qū)別見下圖,輸入通道與捕獲通道IC的映射圖 。 如果是普通的輸入捕獲,4個(gè)通道都可以使用,如果是PWM輸入則只能使用通道1和通道2。它設(shè)定CCRMx寄存器的CCxS[1:0]位的值。

TIM_ICPrescaler:輸入捕獲通道預(yù)分頻器,可設(shè)置1、2、4、8分頻,它設(shè)定CCMRx寄存器的ICxPSC[1:0]位的值。如果需要捕獲輸入信號(hào)的每個(gè)有效邊沿,則設(shè)置1分頻即可。
TIM_ICFilter: 輸入捕獲濾波器設(shè)置,可選設(shè)置0x0至0x0F。它設(shè)定CCMRx寄存器ICxF[3:0]位的值。一般我們不使用濾波器,即設(shè)置為0。
5.4 TIM_BDTRInitTypeDef
斷路和死區(qū)結(jié)構(gòu)體TIM_BDTRInitTypeDef用于斷路和死區(qū)參數(shù)的設(shè)置,屬于高級(jí)定時(shí)器專用,用于配置斷路時(shí)通道輸出狀態(tài),以及死區(qū)時(shí)間。 它與TIM_BDTRConfig函數(shù)配置使用完成參數(shù)配置。這個(gè)結(jié)構(gòu)體的成員只對(duì)應(yīng)BDTR這個(gè)寄存器,有關(guān)成員的具體使用配置請(qǐng)參考手冊(cè)BDTR寄存器的詳細(xì)描述。
代碼清單:高級(jí)定時(shí)器-4 斷路和死區(qū)初始化結(jié)構(gòu)體
typedef struct {
uint16_t TIM_OSSRState; // 運(yùn)行模式下的關(guān)閉狀態(tài)選擇
uint16_t TIM_OSSIState; // 空閑模式下的關(guān)閉狀態(tài)選擇
uint16_t TIM_LOCKLevel; // 鎖定配置
uint16_t TIM_DeadTime; // 死區(qū)時(shí)間
uint16_t TIM_Break; // 斷路輸入使能控制
uint16_t TIM_BreakPolarity; // 斷路輸入極性
uint16_t TIM_AutomaticOutput; // 自動(dòng)輸出使能
} TIM_BDTRInitTypeDef;
TIM_OSSRState: 運(yùn)行模式下的關(guān)閉狀態(tài)選擇,它設(shè)定BDTR寄存器OSSR位的值。
TIM_OSSIState: 空閑模式下的關(guān)閉狀態(tài)選擇,它設(shè)定BDTR寄存器OSSI位的值。
TIM_LOCKLevel: 鎖定級(jí)別配置, BDTR寄存器LOCK[1:0]位的值。
TIM_DeadTime: 配置死區(qū)發(fā)生器,定義死區(qū)持續(xù)時(shí)間,可選設(shè)置范圍為0x0至0xFF。它設(shè)定BDTR寄存器DTG[7:0]位的值。
TIM_Break: 斷路輸入功能選擇,可選使能或禁止。它設(shè)定BDTR寄存器BKE位的值。
TIM_BreakPolarity: 斷路輸入通道BRK極性選擇,可選高電平有效或低電平有效。它設(shè)定BDTR寄存器BKP位的值。
TIM_AutomaticOutput: 自動(dòng)輸出使能,可選使能或禁止,它設(shè)定BDTR寄存器AOE位的值。
WIZnet 是一家無晶圓廠半導(dǎo)體公司,成立于 1998 年。產(chǎn)品包括互聯(lián)網(wǎng)處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術(shù),基于獨(dú)特的專利全硬連線 TCP/IP。iMCU? 面向各種應(yīng)用中的嵌入式互聯(lián)網(wǎng)設(shè)備。
WIZnet 在全球擁有 70 多家分銷商,在香港、韓國(guó)、美國(guó)設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營(yíng)銷。
香港辦事處管理的區(qū)域包括:澳大利亞、印度、土耳其、亞洲(韓國(guó)和日本除外)。
-
單片機(jī)
+關(guān)注
關(guān)注
6074文章
45319瀏覽量
662852 -
以太網(wǎng)
+關(guān)注
關(guān)注
41文章
5912瀏覽量
179421 -
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2306瀏覽量
97534 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3359瀏覽量
121646
發(fā)布評(píng)論請(qǐng)先 登錄
第二十章 TIM——基本定時(shí)器
好消息!昇潤(rùn)科技推出藍(lán)牙4.2開發(fā)視頻教程啦
HarmonyOS內(nèi)核源碼分析(下)
【每日一練】RT-Thread Nano-ESP8266 WIFI-溫度上傳至本地服務(wù)器(第二十二節(jié)學(xué)習(xí)視頻)
火力發(fā)電廠水汽分析方法 第二十二部分:化學(xué)耗氧量的測(cè)定(高錳
實(shí)時(shí)頻譜儀原理及操作指南
第二十二講 同步時(shí)序邏輯電路的分析方法
模擬電路網(wǎng)絡(luò)課件 第二十二節(jié):功率放大電路的一般問題
第二十二屆高交會(huì)深圳開幕 3300多家展商亮相
2020第二十二屆高交會(huì)助力科技領(lǐng)域雙循環(huán)
第二十二屆高交會(huì)圓滿落幕,極視角與您明年相約
美高電子推出高性能迷你主機(jī),亮相深圳第二十二屆高交會(huì)
巍泰技術(shù)攜多款創(chuàng)新產(chǎn)品驚艷亮相 2024 第二十二屆物聯(lián)網(wǎng)展

第二十二章 TIM——高級(jí)定時(shí)器
評(píng)論