chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

WIZnet W55MH32以太網(wǎng)單片機(jī)開發(fā)教程 第十一章 通用定時(shí)器(上篇)

W55MH32 ? 來源:W55MH32 ? 作者:W55MH32 ? 2025-05-28 10:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

單芯片解決方案,開啟全新體驗(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,滿足存儲與數(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 提供了兩種選擇:QFN68和QFN100。

W55MH32Q采用QFN68封裝版本,尺寸為8x8mm,它擁有36個(gè)GPIO、3個(gè)ADC、12通道DMA、17個(gè)定時(shí)器、2個(gè)I2C、3個(gè)串口、2個(gè)SPI接口(其中1個(gè)帶I2S接口復(fù)用)、1個(gè)CAN以及1個(gè)USB2.0。在保持與同系列其他版本一致的核心性能基礎(chǔ)上,僅減少了部分GPIO以及SDIO接口,其他參數(shù)保持一致,性價(jià)比優(yōu)勢顯著,尤其適合網(wǎng)關(guān)模組等對空間布局要求較高的場景。緊湊的尺寸和精簡化外設(shè)配置,使其能夠在有限空間內(nèi)實(shí)現(xiàn)高效的網(wǎng)絡(luò)連接與數(shù)據(jù)交互,成為物聯(lián)網(wǎng)網(wǎng)關(guān)、邊緣計(jì)算節(jié)點(diǎn)等緊湊型設(shè)備的理想選擇。 同系列還有QFN100封裝的W55MH32L版本,該版本擁有更豐富的外設(shè)資源,適用于需要多接口擴(kuò)展的復(fù)雜工控場景,軟件使用方法一致。

此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應(yīng)用,涵蓋TCP SSL、HTTP SSL以及MQTT SSL等,為網(wǎng)絡(luò)通信安全再添保障。

為助力開發(fā)者快速上手與深入開發(fā),基于W55MH32Q這顆芯片,WIZnet精心打造了配套開發(fā)板。開發(fā)板集成WIZ-Link芯片,借助一根USB C口數(shù)據(jù)線,就能輕松實(shí)現(xiàn)調(diào)試、下載以及串口打印日志等功能。開發(fā)板將所有外設(shè)全部引出,拓展功能也大幅提升,便于開發(fā)者全面評估芯片性能。

wKgZO2gbOfaAVPzkACJSygzv-rI600.png

第十一章 通用定時(shí)器(上篇)

W55MH32的通用定時(shí)器為TIM2~TIM5/TIM9~TIM14,由于篇幅有限,這里我們講解TIM2~TIM5的相關(guān)功能,對于通用定時(shí)器TIM9~TIM14,感興趣的朋友查閱《W55MH32參考手冊》使用方法一致,功能上存在些許差異,掌握了方法之后都是一通百通的。

本章分為如下幾個(gè)小節(jié):

1 通用定時(shí)器概述

2 程序設(shè)計(jì)

3 下載驗(yàn)證

1 通用定時(shí)器概述

1.1 通用定時(shí)器簡介

通用定時(shí)器是一個(gè)通過可編程預(yù)分頻器驅(qū)動(dòng)的 16 位自動(dòng)裝載計(jì)數(shù)器構(gòu)成。它適用于多種場合,包括測量輸入信號的脈沖長度(輸入捕獲)或者產(chǎn)生輸出波形(輸出比較和PWM)。使用定時(shí)器預(yù)分頻器和 RCC 時(shí)鐘控制器預(yù)分頻器,脈沖長度和波形周期可以在幾個(gè)微秒到幾個(gè) 毫秒間調(diào)整。每個(gè)定時(shí)器都是完全獨(dú)立的,沒有互相共享任何資源。

1.2 主要功能

通用TIMx (TIM2、TIM3、TIM4和TIM5)定時(shí)器功能包括:

?16位向上、向下、向上/向下自動(dòng)裝載計(jì)數(shù)器

?16位可編程(可以實(shí)時(shí)修改)預(yù)分頻器,計(jì)數(shù)器時(shí)鐘頻率的分頻系數(shù)為1~65536之間的任意 數(shù)值

?4個(gè)獨(dú)立通道:

······輸入捕獲

······輸出比較

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

······單脈沖模式輸出

?使用外部信號控制定時(shí)器和定時(shí)器互連的同步電路

?如下事件發(fā)生時(shí)產(chǎn)生中斷/DMA:

······更新:計(jì)數(shù)器向上溢出/向下溢出,計(jì)數(shù)器初始化(通過軟件或者內(nèi)部/外部觸發(fā))

······觸發(fā)事件(計(jì)數(shù)器啟動(dòng)、停止、初始化或者由內(nèi)部/外部觸發(fā)計(jì)數(shù))

······輸入捕獲

······輸出比較

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

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

通用定時(shí)器框圖如下:

wKgZO2g2cEWABEDfAAHJuXxtXmI133.png

1.3 功能描述

1.3.1時(shí)基單元

可編程通用定時(shí)器的主要部分是一個(gè)16位計(jì)數(shù)器和與其相關(guān)的自動(dòng)裝載寄存器。這個(gè)計(jì)數(shù)器可以向上計(jì)數(shù)、向下計(jì)數(shù)或者向上向下雙向計(jì)數(shù)。此計(jì)數(shù)器時(shí)鐘由預(yù)分頻器分頻得到。

計(jì)數(shù)器、自動(dòng)裝載寄存器和預(yù)分頻器寄存器可以由軟件讀寫,在計(jì)數(shù)器運(yùn)行時(shí)仍可以讀寫。時(shí)基單元包含:

?計(jì)數(shù)器寄存器(TIMx_CNT)

?預(yù)分頻器寄存器 (TIMx_PSC)

?自動(dòng)裝載寄存器 (TIMx_ARR)

自動(dòng)裝載寄存器是預(yù)先裝載的,寫或讀自動(dòng)重裝載寄存器將訪問預(yù)裝載寄存器。根據(jù)在 TIMx_CR1寄存器中的自動(dòng)裝載預(yù)裝載使能位(ARPE)的設(shè)置,預(yù)裝載寄存器的內(nèi)容被立即或在 每次的更新事件UEV時(shí)傳送到影子寄存器。當(dāng)計(jì)數(shù)器達(dá)到溢出條件(向下計(jì)數(shù)時(shí)的下溢條件)并當(dāng) TIMx_CR1寄存器中的UDIS位等于'0'時(shí),產(chǎn)生更新事件。更新事件也可以由軟件產(chǎn)生。隨后會詳細(xì)描述每一種配置下更新事件的產(chǎn)生。

計(jì)數(shù)器由預(yù)分頻器的時(shí)鐘輸出CK_CNT驅(qū)動(dòng),僅當(dāng)設(shè)置了計(jì)數(shù)器TIMx_CR1寄存器中的計(jì)數(shù)器使能位(CEN)時(shí),CK_CNT才有效。(有關(guān)計(jì)數(shù)器使能的細(xì)節(jié),請參見控制器的從模式描述)。

注:真正的計(jì)數(shù)器使能信號CNT_EN是在CEN的一個(gè)時(shí)鐘周期后被設(shè)置。

預(yù)分頻器描述

預(yù)分頻器可以將計(jì)數(shù)器的時(shí)鐘頻率按1到65536之間的任意值分頻。它是基于一個(gè)(在TIMx_PSC 寄存器中的)16位寄存器控制的16位計(jì)數(shù)器。這個(gè)控制寄存器帶有緩沖器,它能夠在工作時(shí)被改 變。新的預(yù)分頻器參數(shù)在下一次更新事件到來時(shí)被采用。

下面出了在預(yù)分頻器運(yùn)行時(shí),更改計(jì)數(shù)器參數(shù)的例子:

wKgZO2g2cEOARXdFAABmVnizRS4188.png

當(dāng)預(yù)分頻器的參數(shù)從1變到2時(shí),計(jì)數(shù)器的時(shí)序圖

wKgZO2g2cEOAPh8QAACL7psv-2c736.png

當(dāng)預(yù)分頻器的參數(shù)從1變到4時(shí),計(jì)數(shù)器的時(shí)序圖

1.3.2計(jì)數(shù)器模式

向上計(jì)數(shù)模式

在向上計(jì)數(shù)模式中,計(jì)數(shù)器從0計(jì)數(shù)到自動(dòng)加載值(TIMx_ARR計(jì)數(shù)器的內(nèi)容),然后重新從0開始 計(jì)數(shù)并且產(chǎn)生一個(gè)計(jì)數(shù)器溢出事件。

每次計(jì)數(shù)器溢出時(shí)可以產(chǎn)生更新事件,在TIMx_EGR寄存器中(通過軟件方式或者使用從模式控 制器)設(shè)置UG位也同樣可以產(chǎn)生一個(gè)更新事件。

設(shè)置TIMx_CR1寄存器中的UDIS位,可以禁止更新事件;這樣可以避免在向預(yù)裝載寄存器中寫 入新值時(shí)更新影子寄存器。在UDIS位被清'0'之前,將不產(chǎn)生更新事件。但是在應(yīng)該產(chǎn)生更新事 件時(shí),計(jì)數(shù)器仍會被清'0',同時(shí)預(yù)分頻器的計(jì)數(shù)也被請0(但預(yù)分頻系數(shù)不變)。此外,如果設(shè)置 了TIMx_CR1寄存器中的URS位(選擇更新請求),設(shè)置UG位將產(chǎn)生一個(gè)更新事件UEV,但硬件 不設(shè)置UIF標(biāo)志(即不產(chǎn)生中斷或DMA請求);這是為了避免在捕獲模式下清除計(jì)數(shù)器時(shí),同時(shí)產(chǎn) 生更新和捕獲中斷。

當(dāng)發(fā)生一個(gè)更新事件時(shí),所有的寄存器都被更新,硬件同時(shí)(依據(jù)URS位)設(shè)置更新標(biāo)志位 (TIMx_SR寄存器中的UIF位)。

?預(yù)分頻器的緩沖區(qū)被置入預(yù)裝載寄存器的值(TIMx_PSC寄存器的內(nèi)容)。

?自動(dòng)裝載影子寄存器被重新置入預(yù)裝載寄存器的值(TIMx_ARR)。

下圖給出一些例子,當(dāng)TIMx_ARR=0x36時(shí)計(jì)數(shù)器在不同時(shí)鐘頻率下的動(dòng)作:

wKgZPGg2cEOADGzHAACL7psv-2c145.png

計(jì)數(shù)器時(shí)序圖,內(nèi)部時(shí)鐘分頻因子為1

wKgZPGg2cESAR_MKAAB-EATFNto954.png

計(jì)數(shù)器時(shí)序圖,內(nèi)部時(shí)鐘分頻因子為2

wKgZPGg2cESAEKa7AABwLvLjwaY895.png

計(jì)數(shù)器時(shí)序圖,內(nèi)部時(shí)鐘分頻因子為4

wKgZO2g2cESAZrk-AABnmN1g-BQ643.png

計(jì)數(shù)器時(shí)序圖,內(nèi)部時(shí)鐘分頻因子為N

wKgZPGg2cESAD0nvAACyExeRrjQ043.png

計(jì)數(shù)器時(shí)序圖,當(dāng)ARPE=0時(shí)的更新事件(TIMx_ARR沒有預(yù)裝入)

wKgZO2g2cESAar8nAADKRhEpG6U661.png

計(jì)數(shù)器時(shí)序圖,當(dāng)ARPE=1時(shí)的更新事件(預(yù)裝入了TIMx_ARR)

向下計(jì)數(shù)模式

在向下模式中,計(jì)數(shù)器從自動(dòng)裝入的值(TIMx_ARR計(jì)數(shù)器的值)開始向下計(jì)數(shù)到0,然后從自動(dòng) 裝入的值重新開始并且產(chǎn)生一個(gè)計(jì)數(shù)器向下溢出事件。

每次計(jì)數(shù)器溢出時(shí)可以產(chǎn)生更新事件,在TIMx_EGR寄存器中(通過軟件方式或者使用從模式控 制器)設(shè)置UG位,也同樣可以產(chǎn)生一個(gè)更新事件。

設(shè)置TIMx_CR1寄存器的UDIS位可以禁止UEV事件。這樣可以避免向預(yù)裝載寄存器中寫入新值 時(shí)更新影子寄存器。因此UDIS位被清為'0'之前不會產(chǎn)生更新事件。然而,計(jì)數(shù)器仍會從當(dāng)前自 動(dòng)加載值重新開始計(jì)數(shù),同時(shí)預(yù)分頻器的計(jì)數(shù)器重新從0開始(但預(yù)分頻系數(shù)不變)。

此外,如果設(shè)置了TIMx_CR1寄存器中的URS位(選擇更新請求) ,設(shè)置UG位將產(chǎn)生一個(gè)更新事 件UEV但不設(shè)置UIF標(biāo)志(因此不產(chǎn)生中斷和DMA請求),這是為了避免在發(fā)生捕獲事件并清除計(jì) 數(shù)器時(shí),同時(shí)產(chǎn)生更新和捕獲中斷。

當(dāng)發(fā)生更新事件時(shí),所有的寄存器都被更新,并且(根據(jù)URS位的設(shè)置)更新標(biāo)志位(TIMx_SR寄 存器中的UIF位)也被設(shè)置。

?預(yù)分頻器的緩存器被置入預(yù)裝載寄存器的值(TIMx_PSC寄存器的值)。

?當(dāng)前的自動(dòng)加載寄存器被更新為預(yù)裝載值(TIMx_ARR寄存器中的內(nèi)容) 。

注:自動(dòng)裝載在計(jì) 數(shù)器重載入之前被更新,因此下一個(gè)周期將是預(yù)期的值。

以下是一些當(dāng)TIMx_ARR=0x36時(shí),計(jì)數(shù)器在不同時(shí)鐘頻率下的操作例子。

wKgZPGg2cESAG0CoAACRfx0rdzY994.png

計(jì)數(shù)器時(shí)序圖,內(nèi)部時(shí)鐘分頻因子為1

wKgZO2g2cESAcoJlAACAwEexPR0454.png

計(jì)數(shù)器時(shí)序圖,內(nèi)部時(shí)鐘分頻因子為2

wKgZPGg2cESAeeJPAAA61IkSUJU432.png

計(jì)數(shù)器時(shí)序圖,內(nèi)部時(shí)鐘分頻因子為4

wKgZO2g2cESAJcabAAA2_EMBfGg480.png

計(jì)數(shù)器時(shí)序圖,內(nèi)部時(shí)鐘分頻因子為N

wKgZO2g2cESAFpk8AABdjGTtfZ4775.png

計(jì)數(shù)器時(shí)序圖,當(dāng)沒有使用重復(fù)計(jì)數(shù)器時(shí)的更新事件

中央對齊模式(向上/向下計(jì)數(shù))

在中央對齊模式,計(jì)數(shù)器從0開始計(jì)數(shù)到自動(dòng)加載的值(TIMx_ARR寄存器)-1,產(chǎn)生一個(gè)計(jì)數(shù)器 溢出事件,然后向下計(jì)數(shù)到1并且產(chǎn)生一個(gè)計(jì)數(shù)器下溢事件;然后再從0開始重新計(jì)數(shù)。

在這個(gè)模式,不能寫入TIMx_CR1中的DIR方向位。它由硬件更新并指示當(dāng)前的計(jì)數(shù)方向。

可以在每次計(jì)數(shù)上溢和每次計(jì)數(shù)下溢時(shí)產(chǎn)生更新事件;也可以通過(軟件或者使用從模式控制器) 設(shè)置TIMx_EGR寄存器中的UG位產(chǎn)生更新事件。然后,計(jì)數(shù)器重新從0開始計(jì)數(shù),預(yù)分頻器也 重新從0開始計(jì)數(shù)。

設(shè)置TIMx_CR1寄存器中的UDIS位可以禁止UEV事件。這樣可以避免在向預(yù)裝載寄存器中寫入 新值時(shí)更新影子寄存器。因此UDIS位被清為'0'之前不會產(chǎn)生更新事件。然而,計(jì)數(shù)器仍會根據(jù) 當(dāng)前自動(dòng)重加載的值,繼續(xù)向上或向下計(jì)數(shù)。

此外,如果設(shè)置了TIMx_CR1寄存器中的URS位(選擇更新請求) ,設(shè)置UG位將產(chǎn)生一個(gè)更新事 件UEV但不設(shè)置UIF標(biāo)志(因此不產(chǎn)生中斷和DMA請求),這是為了避免在發(fā)生捕獲事件并清除計(jì) 數(shù)器時(shí),同時(shí)產(chǎn)生更新和捕獲中斷。

當(dāng)發(fā)生更新事件時(shí),所有的寄存器都被更新,并且(根據(jù)URS位的設(shè)置)更新標(biāo)志位(TIMx_SR寄 存器中的UIF位)也被設(shè)置。

?預(yù)分頻器的緩存器被加載為預(yù)裝載(TIMx_PSC寄存器)的值。

?當(dāng)前的自動(dòng)加載寄存器被更新為預(yù)裝載值(TIMx_ARR寄存器中的內(nèi)容)。

注:如果因?yàn)橛?jì)數(shù) 器溢出而產(chǎn)生更新,自動(dòng)重裝載將在計(jì)數(shù)器重載入之前被更新,因此下一個(gè)周期將是預(yù)期 的值(計(jì)數(shù)器被裝載為新的值)。

以下是一些計(jì)數(shù)器在不同時(shí)鐘頻率下的操作的例子:

wKgZPGg2cESAIyAKAABQDg_JHVs883.png

計(jì)數(shù)器時(shí)序圖,內(nèi)部時(shí)鐘分頻因子為1,TIMx_ARR=0x6

1.這里使用了中心對齊模式1。

wKgZO2g2cESAB0bHAABCsnUPytg473.png

計(jì)數(shù)器時(shí)序圖,內(nèi)部時(shí)鐘分頻因子為2

wKgZPGg2cESAaUuFAAA2i1iaut0559.png

計(jì)數(shù)器時(shí)序圖,內(nèi)部時(shí)鐘分頻因子為4,TIMx_ARR=0x36

wKgZO2g2cESALVK5AAA2i1iaut0314.png

計(jì)數(shù)器時(shí)序圖,內(nèi)部時(shí)鐘分頻因子為N

wKgZPGg2cESAJzGuAABq5I2a9nI067.png

計(jì)數(shù)器時(shí)序圖,ARPE=1時(shí)的更新事件(計(jì)數(shù)器下溢)

計(jì)數(shù)器時(shí)序圖,ARPE=1時(shí)的更新事件(計(jì)數(shù)器溢出)

1.3.3時(shí)鐘選擇

計(jì)數(shù)器時(shí)鐘可由下列時(shí)鐘源提供:

?內(nèi)部時(shí)鐘(CK_INT)

?外部時(shí)鐘模式1:外部輸入腳(TIx)

?外部時(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)

如果禁止了從模式控制器(TIMx_SMCR寄存器的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í)的操作:

wKgZPGg2cESAVDBzAABBNgqPM-Q002.png

一般模式下的控制電路,內(nèi)部時(shí)鐘分頻因子為1

外部時(shí)鐘源模式1

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

wKgZO2g2cESAPa31AADQFIfKVMA407.png

TI2外部時(shí)鐘連接例子

例如,要配置向上計(jì)數(shù)器在T12輸入端的上升沿計(jì)數(shù),使用下列步驟:

1.配置TIMx_CCMR1寄存器CC2S='01',配置通道2檢測TI2輸入的上升沿。

2.配置TIMx_CCMR1寄存器的IC2F[3:0],選擇輸入濾波器帶寬(如果不需要濾波器,保持 IC2F=0000)。

注:捕獲預(yù)分頻器不用作觸發(fā),所以不需要對它進(jìn)行配置。

3.配置TIMx_CCER寄存器的CC2P='0',選定上升沿極性。

4.配置TIMx_SMCR寄存器的SMS='111',選擇定時(shí)器外部時(shí)鐘模式1。

5.配置TIMx_SMCR寄存器中的TS='110',選定TI2作為觸發(fā)輸入源。

6.設(shè)置TIMx_CR1寄存器的CEN='1',啟動(dòng)計(jì)數(shù)器。

當(dāng)上升沿出現(xiàn)在TI2,計(jì)數(shù)器計(jì)數(shù)一次,且TIF標(biāo)志被設(shè)置。

在TI2的上升沿和計(jì)數(shù)器實(shí)際時(shí)鐘之間的延時(shí),取決于在TI2輸入端的重新同步電路。

wKgZPGg2cESAJvSBAAApmd9KH2Y358.png

外部時(shí)鐘模式1下的控制電路

外部時(shí)鐘源模式2

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

wKgZO2g2cESAWVtZAADEAs5lA4Q207.png

外部觸發(fā)輸入框圖

例如,要配置在ETR下每2個(gè)上升沿計(jì)數(shù)一次的向上計(jì)數(shù)器,使用下列步驟:

1.本例中不需要濾波器,置TIMx_SMCR寄存器中的ETF[3:0]=0000

2.設(shè)置預(yù)分頻器,置TIMx_SMCR寄存器中的ETPS[1:0]=01

3.設(shè)置在ETR的上升沿檢測,置TIMx_SMCR寄存器中的ETP=0

4.開啟外部時(shí)鐘模式2,置TIMx_SMCR寄存器中的ECE=1

5.啟動(dòng)計(jì)數(shù)器,置TIMx_CR1寄存器中的CEN=1 計(jì)數(shù)器在每2個(gè)ETR上升沿計(jì)數(shù)一次。

在ETR的上升沿和計(jì)數(shù)器實(shí)際時(shí)鐘之間的延時(shí)取決于在ETRP信號端的重新同步電路。

wKgZO2g2cESAB8srAAAuZTUwOP4299.png

外部時(shí)鐘模式2下的控制電路

1.3.4捕獲/比較通道

每一個(gè)捕獲/比較通道都是圍繞著一個(gè)捕獲/比較寄存器(包含影子寄存器),包括捕獲的輸入部分

(數(shù)字濾波、多路復(fù)用和預(yù)分頻器),和輸出部分(比較器和輸出控制)。 下面幾張圖是一個(gè)捕獲/比較通道概覽。

輸入部分對相應(yīng)的TIx輸入信號采樣,并產(chǎn)生一個(gè)濾波后的信號TIxF。然后,一個(gè)帶極性選擇的 邊緣檢測器產(chǎn)生一個(gè)信號(TIxFPx),它可以作為從模式控制器的輸入觸發(fā)或者作為捕獲控制。該 信號通過預(yù)分頻進(jìn)入捕獲寄存器(ICxPS)。

wKgZPGg2cEWAeaCeAABhm4WlaTM445.png

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

輸出部分產(chǎn)生一個(gè)中間波形OCxRef(高有效)作為基準(zhǔn),鏈的末端決定最終輸出信號的極性。

wKgZPGg2cEWARlGIAAEnS5Uglx4086.png

捕獲/比較通道1的主電路

wKgZPGg2cEWAaOKJAABKVuovIu4739.png

捕獲/比較通道的輸出部分(通道1)

捕獲/比較模塊由一個(gè)預(yù)裝載寄存器和一個(gè)影子寄存器組成。讀寫過程僅操作預(yù)裝載寄存器。

在捕獲模式下,捕獲發(fā)生在影子寄存器上,然后再復(fù)制到預(yù)裝載寄存器中。

在比較模式下,預(yù)裝載寄存器的內(nèi)容被復(fù)制到影子寄存器中,然后影子寄存器的內(nèi)容和計(jì)數(shù)器進(jìn)行比較。

1.3.5輸入捕獲模式

在輸入捕獲模式下,當(dāng)檢測到ICx信號上相應(yīng)的邊沿后,計(jì)數(shù)器的當(dāng)前值被鎖存到捕獲/比較寄存 器(TIMx_CCRx)中。當(dāng)捕獲事件發(fā)生時(shí),相應(yīng)的CCxIF標(biāo)志(TIMx_SR寄存器)被置'1',如果使能 了中斷或者DMA操作, 則將產(chǎn)生中斷或者DMA操作。如果捕獲事件發(fā)生時(shí)CCxIF標(biāo)志已經(jīng)為 高,那么重復(fù)捕獲標(biāo)志CCxOF(TIMx_SR寄存器)被置'1'。寫CCxIF=0可清除CCxIF,或讀取存 儲在TIMx_CCRx寄存器中的捕獲數(shù)據(jù)也可清除CCxIF。寫CCxOF=0可清除CCxOF。

以下例子說明如何在TI1輸入的上升沿時(shí)捕獲計(jì)數(shù)器的值到TIMx_CCR1寄存器中,步驟如下:

?選擇有效輸入端:TIMx_CCR1必須連接到TI1輸入,所以寫入TIMx_CCR1寄存器中的 CC1S=01,只要CC1S不為'00',通道被配置為輸入,并且TM1_CCR1寄存器變?yōu)橹蛔x。

?根據(jù)輸入信號的特點(diǎn),配置輸入濾波器為所需的帶寬(即輸入為TIx時(shí),輸入濾波器控制位是 TIMx_CCMRx寄存器中的ICxF位)。假設(shè)輸入信號在最多5個(gè)內(nèi)部時(shí)鐘周期的時(shí)間內(nèi)抖動(dò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)中斷請求,通過設(shè)置 TIMx_DIER寄存器中的CC1DE位允許DMA請求。

當(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位,則會產(chǎn)生一個(gè)中斷。

?如設(shè)置了CC1DE位,則還會產(chǎn)生一個(gè)DMA請求。

為了處理捕獲溢出,建議在讀出捕獲溢出標(biāo)志之前讀取數(shù)據(jù),這是為了避免丟失在讀出捕獲溢出標(biāo)志之后和讀取數(shù)據(jù)之前可能產(chǎn)生的捕獲溢出信息。

注:設(shè)置TIMx_EGR寄存器中相應(yīng)的CCxG位,可以通過軟件產(chǎn)生輸入捕獲中斷和/或DMA請求。

1.3.6PWM輸入模式

該模式是輸入捕獲模式的一個(gè)特例,除下列區(qū)別外,操作與輸入捕獲模式相同:

?兩個(gè)ICx信號被映射至同一個(gè)TIx輸入。

?這2個(gè)ICx信號為邊沿有效,但是極性相反。

?其中一個(gè)TIxFP信號被作為觸發(fā)輸入信號,而從模式控制器被配置成復(fù)位模式。

例如,你需要測量輸入到TI1上的PWM信號的長度(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ā)輸入信號:置TIMx_SMCR寄存器中的TS=101(選擇TI1FP1)。

?配置從模式控制器為復(fù)位模式:置TIMx_SMCR中的SMS=100。

?使能捕獲:置TIMx_CCER寄存器中CC1E=1且CC2E=1。

wKgZO2g2cEWAcWXOAABcRZVVPNw477.png

PWM輸入模式時(shí)序

由于只有TI1FP1 和TI2FP2 連到了從模式控制器 ,所以 PWM 輸入模式只能使用TIMx_CH1 /TIMx_CH2信號。

1.3.7強(qiáng)置輸出模式

在輸出模式(TIMx_CCMRx寄存器中CCxS=00)下,輸出比較信號(OCxREF和相應(yīng)的OCx)能夠 直接由軟件強(qiáng)置為有效或無效狀態(tài),而不依賴于輸出比較寄存器和計(jì)數(shù)器間的比較結(jié)果。

置TIMx_CCMRx寄存器中相應(yīng)的OCxM=101,即可強(qiáng)置輸出比較信號(OCxREF/OCx)為有效狀 態(tài)。這樣OCxREF被強(qiáng)置為高電平(OCxREF始終為高電平有效),同時(shí)OCx得到CCxP極性位相 反的值。

例如:CCxP=0(OCx高電平有效),則OCx被強(qiáng)置為高電平。

置TIMx_CCMRx寄存器中的OCxM=100,可強(qiáng)置OCxREF信號為低。

該模式下,在TIMx_CCRx影子寄存器和計(jì)數(shù)器之間的比較仍然在進(jìn)行,相應(yīng)的標(biāo)志也會被修改。因此仍然會產(chǎn)生相應(yīng)的中斷和DMA請求。這將會在下面的輸出比較模式一節(jié)中介紹。

1.3.8輸出比較模式

此項(xiàng)功能是用來控制一個(gè)輸出波形,或者指示一段給定的的時(shí)間已經(jīng)到時(shí)。當(dāng)計(jì)數(shù)器與捕獲/比較寄存器的內(nèi)容相同時(shí),輸出比較功能做如下操作:

?將輸出比較模式(TIMx_CCMRx寄存器中的OCxM位)和輸出極性(TIMx_CCER寄存器中的 CCxP位)定義的值輸出到對應(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請求功能),則產(chǎn)生一個(gè)DMA請求。

TIMx_CCMRx中的OCxPE位選擇TIMx_CCRx寄存器是否需要使用預(yù)裝載寄存器。 在輸出比較模式下,更新事件UEV對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è)中斷請求和/或一個(gè)DMA請求,設(shè)置CCxIE位和/或CCxDE位。

4.選擇輸出模式,例如當(dāng)計(jì)數(shù)器CNT與CCRx匹配時(shí)翻轉(zhuǎn)OCx的輸出引腳,CCRx預(yù)裝載未 用,開啟OCx輸出且高電平有效,則必須設(shè)置OCxM='011' 、OCxPE='0' 、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è)例子:

輸出比較模式,翻轉(zhuǎn)OC1

1.3.9PWM 模式

脈沖寬度調(diào)制模式可以產(chǎn)生一個(gè)由TIMx_ARR寄存器確定頻率、由TIMx_CCRx寄存器確定占空比的信號。

在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ù)或中心對稱模式中)使能 自動(dòng)重裝載的預(yù)裝載寄存器。

僅當(dāng)發(fā)生一個(gè)更新事件的時(shí)候,預(yù)裝載寄存器才能被傳送到影子寄存器,因此在計(jì)數(shù)器開始計(jì)數(shù)之前,必須通過設(shè)置TIMx_EGR寄存器中的UG位來初始化所有的寄存器。

OCx的極性可以通過軟件在TIMx_CCER寄存器中的CCxP位設(shè)置,它可以設(shè)置為高電平有效或 低電平有效。TIMx_CCER寄存器中的CCxE位控制OCx輸出使能。詳見TIMx_CCERx寄存器的 描述。

在PWM模式(模式1或模式2)下,TIMx_CNT和TIMx_CCRx始終在進(jìn)行比較,(依據(jù)計(jì)數(shù)器的計(jì)數(shù) 方向) 以確定是否符合TIMx_CCRx ≤ TIMx_CNT 或者TIMx_CNT ≤ TIMx_CCRx 。然而 為了與 OCREF_CLR的功能(在下一個(gè)PWM周期之前, ETR信號上的一個(gè)外部事件能夠清除OCxREF) 一致,OCxREF信號只能在下述條件下產(chǎn)生:

l當(dāng)比較的結(jié)果改變

l當(dāng)輸出比較模式(TIMx_CCMRx寄存器中的OCxM位)從“凍結(jié)”(無比較,OCxM='000')切換到某個(gè)PWM模式(OCxM='110'或'111')。

這樣在運(yùn)行中可以通過軟件強(qiáng)置PWM輸出。

根據(jù)TIMx_CR1寄存器中CMS位的狀態(tài),定時(shí)器能夠產(chǎn)生邊沿對齊的PWM信號或中央對齊的 PWM信號。

PWM 邊沿對齊模式

向上計(jì)數(shù)配置

當(dāng)TIMx_CR1寄存器中的DIR位為低的時(shí)候執(zhí)行向上計(jì)數(shù)。參看0節(jié)。

下面是一個(gè)PWM模式1的例子。當(dāng)TIMx_CNT

如果比較值為0,則OCxREF保持為'0' 。 下圖為TIMx_ARR=8時(shí)邊沿對齊的PWM波形實(shí)例。:

wKgZPGg2cEWAQaB_AAA-eR9g4_E952.png

邊沿對齊的PWM波形(ARR=8)

向下計(jì)數(shù)的配置

當(dāng)TIMx_CR1寄存器的DIR位為高時(shí)執(zhí)行向下計(jì)數(shù)。

在 PWM 模式 1 ,當(dāng) TIMx_CNT>TIMx_CCRx 時(shí)參考信號 OCxREF 為低,否 則為高。 如果 TIMx_CCRx中的比較值大于TIMx_ARR中的自動(dòng)重裝載值,則OCxREF保持為'1'。該模式下不 能產(chǎn)生0%的PWM波形。

PWM 中央對齊模式

當(dāng)TIMx_CR1寄存器中的CMS位不為'00'時(shí),為中央對齊模式(所有其他的配置對OCxREF/OCx 信號都有相同的作用)。根據(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ù)方節(jié)的中央對齊模式。

下圖給出了一些中央對齊的PWM波形的例子:

?TIMx_ARR=8

?PWM模式1

?TIMx_CR1寄存器中的CMS=01,在中央對齊模式1時(shí),當(dāng)計(jì)數(shù)器向下計(jì)數(shù)時(shí)設(shè)置比較標(biāo) 志。

wKgZO2g2cEWABzFdAACS3j8CPAE911.png

中央對齊的PWM波形(APR=8)

使用中央對齊模式的提示:

進(jìn)入中央對齊模式時(shí),使用當(dāng)前的向上/向下計(jì)數(shù)配置;這就意味著計(jì)數(shù)器向上還是向下計(jì) 數(shù)取決于TIMx_CR1寄存器中DIR位的當(dāng)前值。此外,軟件不能同時(shí)修改DIR和CMS位。

不推薦當(dāng)運(yùn)行在中央對齊模式時(shí)改寫計(jì)數(shù)器,因?yàn)檫@會產(chǎn)生不可預(yù)知的結(jié)果。特別地:

如果寫入計(jì)數(shù)器的值大于自動(dòng)重加載的值(TIMx_CNT>TIMx_ARR),則方向不會被更新。例如,如果計(jì)數(shù)器正在向上計(jì)數(shù),它就會繼續(xù)向上計(jì)數(shù)。

如果將0或者TIMx_ARR的值寫入計(jì)數(shù)器,方向被更新,但不產(chǎn)生更新事件UEV。

使用中央對齊模式最保險(xiǎn)的方法,就是在啟動(dòng)計(jì)數(shù)器之前產(chǎn)生一個(gè)軟件更新(設(shè)置 TIMx_EGR 位中的UG位),不要在計(jì)數(shù)進(jìn)行過程中修改計(jì)數(shù)器的值。

1.3.10單脈沖模式

單脈沖模式(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ù)方式:CNT < CCRx ≤ ARR (特別地,0 < CCRx),

向下計(jì)數(shù)方式:CNT > CCRx。

wKgZO2g2cEWAH4ypAAAkQOeimSU687.png

單脈沖模式的例子

例如,你需要在從TI2輸入腳上檢測到一個(gè)上升沿開始,延遲tDELAY之后,在OC1上產(chǎn)生一個(gè)長

度為tPULSE 的正脈沖。

假定TI2FP2作為觸發(fā)1:

?置TIMx_CCMR1寄存器中的CC2S='01',把TI2FP2映像到TI2。

?置TIMx_CCER寄存器中的CC2P='0',使TI2FP2能夠檢測上升沿。

?置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)裝載值,修改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輸入腳的邊沿檢測邏輯設(shè)置CEN位以啟動(dòng)計(jì)數(shù)器。然后計(jì)數(shù)器和比較值 間的比較操作產(chǎn)生了輸出的轉(zhuǎn)換。但是這些操作需要一定的時(shí)鐘周期,因此它限制了可得到的最小延時(shí)tDELAY。

如果要以最小延時(shí)輸出波形,可以設(shè)置TIMx_CCMRx寄存器中的OCxFE位;此時(shí)OCxREF(和 OCx)被強(qiáng)制響應(yīng)激勵(lì)而不再依賴比較的結(jié)果,輸出的波形與比較匹配時(shí)的波形一樣。OCxFE只 在通道配置為PWM1和PWM2模式時(shí)起作用。

1.3.11在外部事件時(shí)清除OCxREF信號

對于一個(gè)給定的通道,設(shè)置TIMx_CCMRx寄存器中對應(yīng)的OCxCE位為'1',能夠用ETRF輸入端 的高電平把OCxREF信號拉低,OCxREF信號將保持為低直到發(fā)生下一次的更新事件UEV。

該功能只能用于輸出比較和PWM模式,而不能用于強(qiáng)置模式。

例如,OCxREF信號可以聯(lián)到一個(gè)比較器的輸出,用于控制電流。這時(shí),ETR必須配置如下:

1.外部觸發(fā)預(yù)分頻器必須處于關(guān)閉:TIMx_SMCR寄存器中的ETPS[1:0]='00'。

2.必須禁止外部時(shí)鐘模式2:TIMx_SMCR寄存器中的ECE='0'。

3.外部觸發(fā)極性(ETP)和外部觸發(fā)濾波器(ETF)可以根據(jù)需要配置。

下圖顯示了當(dāng)ETRF輸入變?yōu)楦邥r(shí),對應(yīng)不同OCxCE的值,OCxREF信號的動(dòng)作。在這個(gè)例子 中,定時(shí)器TIMx被置于PWM模式。

wKgZPGg2cEWAE091AAA_45mWjHY003.png

清除TIMx的OCxREF

1.3.12編碼器接口模式

選擇編碼器接口模式的方法是:如果計(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極性;如果需要,還可以 對輸入濾波器編程。

兩個(gè)輸入TI1和TI2被用來作為增量編碼器的接口。參看表75,假定計(jì)數(shù)器已經(jīng)啟動(dòng)(TIMx_CR1 寄存器中的CEN='1'),計(jì)數(shù)器由每次在TI1FP1或TI2FP2上的有效跳變驅(qū)動(dòng)。TI1FP1和TI2FP2 是TI1和TI2在通過輸入濾波器和極性控制后的信號; 如果沒有濾波和變相, 則TI1FP1=TI1 , TI2FP2=TI2。根據(jù)兩個(gè)輸入信號的跳變順序,產(chǎn)生了計(jì)數(shù)脈沖和方向信號。依據(jù)兩個(gè)輸入信號的跳變順序,計(jì)數(shù)器向上或向下計(jì)數(shù),同時(shí)硬件對TIMx_CR1寄存器的DIR位進(jìn)行相應(yīng)的設(shè)置。 不管計(jì)數(shù)器是依靠TI1計(jì)數(shù)、依靠TI2計(jì)數(shù)或者同時(shí)依靠TI1和TI2計(jì)數(shù)。在任一輸入端(TI1或者 TI2)的跳變都會重新計(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ā)輸出特性等仍工作如常。

在這個(gè)模式下,計(jì)數(shù)器依照增量編碼器的速度和方向被自動(dòng)的修改,因此計(jì)數(shù)器的內(nèi)容始終指示著編碼器的位置。計(jì)數(shù)方向與相連的傳感器旋轉(zhuǎn)的方向?qū)?yīng)。下表列出了所有可能的組合,假設(shè)TI1和TI2不同時(shí)變換。

表75 計(jì)數(shù)方向與編碼器信號的關(guān)系

有效邊沿 相對信號的電平 (TI1FP1對應(yīng)TI2, TI2FP2對應(yīng)TI1) TI1FP1信號 TI2FP2信號
上升 下降 上升 下降
僅在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連接而不需要外部接口邏輯。但是, 一般會使用比較器 將編碼器的差動(dòng)輸出轉(zhuǎn)換到數(shù)字信號,這大大增加了抗噪聲干擾能力。編碼器輸出的第三個(gè)信 號表示機(jī)械零點(diǎn),可以把它連接到一個(gè)外部中斷輸入并觸發(fā)一個(gè)計(jì)數(shù)器復(fù)位。

下圖是一個(gè)計(jì)數(shù)器操作的實(shí)例,顯示了計(jì)數(shù)信號的產(chǎn)生和方向控制。它還顯示了當(dāng)選擇了雙邊沿時(shí),輸入抖動(dòng)是如何被抑制的;抖動(dòng)可能會在傳感器的位置靠近一個(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ù)器使能)

wKgZO2g2cEWAGUt5AAAstb7oR2E597.png

編碼器模式下的計(jì)數(shù)器操作實(shí)例

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

wKgZPGg2cEWAD6waAAAstb7oR2E690.png

IC1FP1反相的編碼器接口模式實(shí)例

當(dāng)定時(shí)器配置成編碼器接口模式時(shí),提供傳感器當(dāng)前位置的信息。使用第二個(gè)配置在捕獲模式的定時(shí)器,可以測量兩個(gè)編碼器事件的間隔,獲得動(dòng)態(tài)的信息(速度,加速度,減速度)。指示機(jī) 械零點(diǎn)的編碼器輸出可被用做此目的。根據(jù)兩個(gè)事件間的間隔,可以按照固定的時(shí)間讀出計(jì)數(shù)器。如果可能的話,你可以把計(jì)數(shù)器的值鎖存到第三個(gè)輸入捕獲寄存器(捕獲信號必須是周期的 并且可以由另一個(gè)定時(shí)器產(chǎn)生);也可以通過一個(gè)由實(shí)時(shí)時(shí)鐘產(chǎn)生的DMA請求來讀取它的值。

1.3.13定時(shí)器輸入異或功能

TIMx_CR2寄存器中的TI1S位,允許通道1的輸入濾波器連接到一個(gè)異或門的輸出端,異或門的 3個(gè)輸入端為TIMx_CH1、TIMx_CH2和TIMx_CH3。

異或輸出能夠被用于所有定時(shí)器的輸入功能,如觸發(fā)或輸入捕獲。

1.3.14定時(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以檢測TI1的上升沿。配置輸入濾波器的帶寬(在本例中,不需要任何濾波器,因 此保持IC1F=0000)。觸發(fā)操作中不使用捕獲預(yù)分頻器,所以不需要配置它。CC1S位只選 擇輸入捕獲源,即TIMx_CCMR1寄存器中CC1S=01。置TIMx_CCER寄存器中CC1P=0以 確定極性(只檢測上升沿)。

置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è)中斷請求或一個(gè)DMA請求。

下圖顯示當(dāng)自動(dòng)重裝載寄存器TIMx_ARR=0x36時(shí)的動(dòng)作。在TI1上升沿和計(jì)數(shù)器的實(shí)際復(fù)位之 間的延時(shí),取決于TI1輸入端的重同步電路。

wKgZO2g2cEWAQLuVAAA3iTDDhl4429.png

復(fù)位模式下的控制電路

從模式:門控模式

按照選中的輸入端電平使能計(jì)數(shù)器。

在如下的例子中,計(jì)數(shù)器只在TI1為低時(shí)向上計(jì)數(shù):

?配置通道1以檢測TI1上的低電平。配置輸入濾波器帶寬(本例中,不需要濾波,所以保持 IC1F=0000)。觸發(fā)操作中不使用捕獲預(yù)分頻器,所以不需要配置。CC1S位用于選擇輸入 捕獲源,置TIMx_CCMR1寄存器中CC1S=01。置TIMx_CCER寄存器中CC1P=1以確定極 性(只檢測低電平)。

?置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變高時(shí)停止計(jì)數(shù)。當(dāng)計(jì)數(shù)器開始或停止時(shí) 都設(shè)置TIMx_SR中的TIF標(biāo)置。

TI1上升沿和計(jì)數(shù)器實(shí)際停止之間的延時(shí),取決于TI1輸入端的重同步電路。

wKgZPGg2cEWABPJuAAA261jfH7o201.png

門控模式下的控制電路

從模式:觸發(fā)模式

輸入端上選中的事件使能計(jì)數(shù)器。

在下面的例子中,計(jì)數(shù)器在TI2輸入的上升沿開始向上計(jì)數(shù):

?配置通道2檢測TI2的上升沿。配置輸入濾波器帶寬(本例中,不需要任何濾波器,保持IC2F=0000)。觸發(fā)操作中不使用捕獲預(yù)分頻器,不需要配置。CC2S位只用于選擇輸入捕 獲源,置TIMx_CCMR1寄存器中CC2S=01。置TIMx_CCER寄存器中CC2P=1以確定極性 (只檢測低電平)。

?置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輸入端的重同步電路。

wKgZO2g2cEWAUp8vAAAlsXjW068910.png

觸發(fā)器模式下的控制電路

從模式:外部時(shí)鐘模式2 + 觸發(fā)模式

外部時(shí)鐘模式2可以與另一種從模式(外部時(shí)鐘模式1和編碼器模式除外)一起使用。這時(shí),ETR信 號被用作外部時(shí)鐘的輸入,在復(fù)位模式、門控模式或觸發(fā)模式時(shí)可以選擇另一個(gè)輸入作為觸發(fā)輸入。不建議使用TIMx_SMCR寄存器的TS位選擇ETR作為TRGI。

下面的例子中,TI1上出現(xiàn)一個(gè)上升沿之后,計(jì)數(shù)器即在ETR的每一個(gè)上升沿向上計(jì)數(shù)一次:

?通過TIMx_SMCR寄存器配置外部觸發(fā)輸入電路:

······ETF=0000:沒有濾波

······ETPS=00:不用預(yù)分頻器

······ETP=0:檢測ETR的上升沿,置ECE=1使能外部時(shí)鐘模式2

?按如下配置通道1,檢測TI的上升沿:

······IC1F=0000:沒有濾波

·······觸發(fā)操作中不使用捕獲預(yù)分頻器,不需要配置

·······置TIMx_CCMR1寄存器中CC1S=01,選擇輸入捕獲源

······置TIMx_CCER寄存器中CC1P=0以確定極性(只檢測上升沿)

?置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信號的上升沿和計(jì)數(shù)器實(shí)際復(fù)位間的延時(shí),取決于ETRP輸入端的重同步電路。

外部時(shí)鐘模式2+觸發(fā)模式下的控制電路

1.3.15定時(shí)器同步

所有TIMx定時(shí)器在內(nèi)部相連,用于定時(shí)器同步或鏈接。當(dāng)一個(gè)定時(shí)器處于主模式時(shí),它可以對另一個(gè)處于從模式的定時(shí)器的計(jì)數(shù)器進(jìn)行復(fù)位、啟動(dòng)、停止或提供時(shí)鐘等操作。

下圖顯示了觸發(fā)選擇和主模式選擇模塊的概況。

使用一個(gè)定時(shí)器作為另一個(gè)定時(shí)器的預(yù)分頻器

wKgZPGg2cEWABKn2AAA_yBtTA2U151.png

主/從定時(shí)器的例子

如:可以配置定時(shí)器1作為定時(shí)器2的預(yù)分頻器。參考上圖,進(jìn)行下述操作:

?配置定時(shí)器1為主模式,它可以在每一個(gè)更新事件UEV時(shí)輸出一個(gè)周期性的觸發(fā)信號。在TIM1_CR2寄存器的MMS='010'時(shí),每當(dāng)產(chǎn)生一個(gè)更新事件時(shí)在TRGO1上輸出一個(gè)上升沿信號。

?連接定時(shí)器1的TRGO1輸出至定時(shí)器2,設(shè)置TIM2_SMCR寄存器的TS='000',配置定時(shí)器2為使用ITR1作為內(nèi)部觸發(fā)的從模式。

?然后把從模式控制器置于外部時(shí)鐘模式1(TIM2_SMCR寄存器的SMS=111);這樣定時(shí)器2即可由定時(shí)器1周期性的上升沿(即定時(shí)器1的計(jì)數(shù)器溢出)信號驅(qū)動(dòng)。

?最后,必須設(shè)置相應(yīng)(TIMx_CR1寄存器)的CEN位分別啟動(dòng)兩個(gè)定時(shí)器。

注:如果OCx已被選中為定時(shí)器1的觸發(fā)輸出(MMS=1xx),它的上升沿用于驅(qū)動(dòng)定時(shí)器2的計(jì)數(shù)器。

使用一個(gè)定時(shí)器使能另一個(gè)定時(shí)器

在這個(gè)例子中,定時(shí)器2的使能由定時(shí)器1的輸出比較控制。只當(dāng)定時(shí)器1的OC1REF為高時(shí),定時(shí)器2才對分頻后的內(nèi)部時(shí)鐘計(jì)數(shù)。兩個(gè)定時(shí)器的時(shí)鐘頻率都是由預(yù)分頻器對CK_INT除以3(fCK_CNT=fCK_INT/3)得到。

?配置定時(shí)器1為主模式,送出它的輸出比較參考信號(OC1REF)為觸發(fā)輸出(TIM1_CR2寄存器的MMS=100)

?配置定時(shí)器1的OC1REF波形(TIM1_CCMR1寄存器)

?配置定時(shí)器2從定時(shí)器1獲得輸入觸發(fā)(TIM2_SMCR寄存器的TS=000)

?配置定時(shí)器2為門控模式(TIM2_SMCR寄存器的SMS=101)

?置TIM2_CR1寄存器的CEN=1以使能定時(shí)器2

?置TIM1_CR1寄存器的CEN=1以啟動(dòng)定時(shí)器1

注:定時(shí)器2的時(shí)鐘不與定時(shí)器1的時(shí)鐘同步,這個(gè)模式只影響定時(shí)器2計(jì)數(shù)器的使能信號。

wKgZO2g2cEWAXqp5AABIhdGxUlU653.png

定時(shí)器1的OC1REF控制定時(shí)器2

在這個(gè)例子中,在定時(shí)器2啟動(dòng)之前,它們的計(jì)數(shù)器和預(yù)分頻器未被初始化,因此它們從當(dāng)前的數(shù)值開始計(jì)數(shù)??梢栽趩?dòng)定時(shí)器1之前復(fù)位2個(gè)定時(shí)器,使它們從給定的數(shù)值開始,即在定時(shí)器計(jì)數(shù)器中寫入需要的任意數(shù)值。寫TIMx_EGR寄存器的UG位即可復(fù)位定時(shí)器。

在下一個(gè)例子中,需要同步定時(shí)器1和定時(shí)器2。定時(shí)器1是主模式并從0開始,定時(shí)器2是從模式并從0xE7開始;2個(gè)定時(shí)器的預(yù)分頻器系數(shù)相同。寫'0'到TIM1_CR1的CEN位將禁止定時(shí)器1,定時(shí)器2隨即停止。

?配置定時(shí)器1為主模式,送出輸出比較1參考信號(OC1REF)做為觸發(fā)輸出(TIM1_CR2寄存器的MMS=100)。

?配置定時(shí)器1的OC1REF波形(TIM1_CCMR1寄存器)。

?配置定時(shí)器2從定時(shí)器1獲得輸入觸發(fā)(TIM2_SMCR寄存器的TS=000)

?配置定時(shí)器2為門控模式(TIM2_SMCR寄存器的SMS=101)

?置TIM1_EGR寄存器的UG='1',復(fù)位定時(shí)器1。

?置TIM2_EGR寄存器的UG='1',復(fù)位定時(shí)器2。

?寫'0xE7'至定時(shí)器2的計(jì)數(shù)器(TIM2_CNTL),初始化它為0xE7。

?置TIM2_CR1寄存器的CEN='1'以使能定時(shí)器2。

?置TIM1_CR1寄存器的CEN='1'以啟動(dòng)定時(shí)器1。

?置TIM1_CR1寄存器的CEN='0'以停止定時(shí)器1。

wKgZPGg2cEWATUx9AABK2qExyEQ511.png

通過使能定時(shí)器1可以控制定時(shí)器2

使用一個(gè)定時(shí)器去啟動(dòng)另一個(gè)定時(shí)器

在這個(gè)例子中,使用定時(shí)器1的更新事件使能定時(shí)器2。一旦定時(shí)器1產(chǎn)生更新事件,定時(shí)器2即從它當(dāng)前的數(shù)值(可以是非0)按照分頻的內(nèi)部時(shí)鐘開始計(jì)數(shù)。在收到觸發(fā)信號時(shí),定時(shí)器2的CEN位被自動(dòng)地置'1',同時(shí)計(jì)數(shù)器開始計(jì)數(shù)直到寫'0'到TIM2_CR1寄存器的CEN位。兩個(gè)定時(shí)器的時(shí)鐘頻率都是由預(yù)分頻器對CK_INT除以3(fCK_CNT=fCK_INT/3)。

?配置定時(shí)器1為主模式,送出它的更新事件(UEV)做為觸發(fā)輸出(TIM1_CR2寄存器的MMS=010)。

?配置定時(shí)器1的周期(TIM1_ARR寄存器)。

?配置定時(shí)器2從定時(shí)器1獲得輸入觸發(fā)(TIM2_SMCR寄存器的TS=000)

?配置定時(shí)器2為觸發(fā)模式(TIM2_SMCR寄存器的SMS=110)

?置TIM1_CR1寄存器的CEN=1以啟動(dòng)定時(shí)器1。

wKgZPGg2cEWAA2cfAAA6ySqkQiw191.png

使用定時(shí)器1的更新觸發(fā)定時(shí)器2

在上一個(gè)例子中,可以在啟動(dòng)計(jì)數(shù)之前初始化兩個(gè)計(jì)數(shù)器。下圖顯示在與0相同配置情況下,使用觸發(fā)模式而不是門控模式(TIM2_SMCR寄存器的SMS=110)的動(dòng)作。

wKgZO2g2cEWAOA2HAABHkhVitUY368.png

利用定時(shí)器1的使能觸發(fā)定時(shí)器2

使用一個(gè)定時(shí)器作為另一個(gè)的預(yù)分頻器

這個(gè)例子使用定時(shí)器1作為定時(shí)器2的預(yù)分頻器。配置如下:

?配置定時(shí)器1為主模式,送出它的更新事件UEV做為觸發(fā)輸出(TIM1_CR2寄存器的MMS='010')。然后每次計(jì)數(shù)器溢出時(shí)輸出一個(gè)周期信號。

?配置定時(shí)器1的周期(TIM1_ARR寄存器)。

?配置定時(shí)器2從定時(shí)器1獲得輸入觸發(fā)(TIM2_SMCR寄存器的TS=000)

?配置定時(shí)器2使用外部時(shí)鐘模式(TIM2_SMCR寄存器的SMS=111)

?置TIM1_CR2寄存器的CEN=1以啟動(dòng)定時(shí)器2。

?置TIM1_CR1寄存器的CEN=1以啟動(dòng)定時(shí)器1。

使用一個(gè)外部觸發(fā)同步地啟動(dòng)2個(gè)定時(shí)器

這個(gè)例子中當(dāng)定時(shí)器1的TI1輸入上升時(shí)使能定時(shí)器1,使能定時(shí)器1的同時(shí)使能定時(shí)器2,為保證計(jì)數(shù)器的對齊,定時(shí)器1必須配置為主/從模式(對應(yīng)TI1為從,對應(yīng)定時(shí)器2為主):

?配置定時(shí)器1為主模式,送出它的使能做為觸發(fā)輸出(TIM1_CR2寄存器的MMS='001')。

?配置定時(shí)器1為從模式,從TI1獲得輸入觸發(fā)(TIM1_SMCR寄存器的TS='100')。

?配置定時(shí)器1為觸發(fā)模式(TIM1_SMCR寄存器的SMS='110')。

?配置定時(shí)器1為主/從模式,TIM1_SMCR寄存器的MSM='1'。

?配置定時(shí)器2從定時(shí)器1獲得輸入觸發(fā)(TIM2_SMCR寄存器的TS=000)

?配置定時(shí)器2為觸發(fā)模式(TIM2_SMCR寄存器的SMS='110')。

當(dāng)定時(shí)器1的TI1上出現(xiàn)一個(gè)上升沿時(shí),兩個(gè)定時(shí)器同步地按照內(nèi)部時(shí)鐘開始計(jì)數(shù),兩個(gè)TIF標(biāo)志也同時(shí)被設(shè)置。

注:在這個(gè)例子中,在啟動(dòng)之前兩個(gè)定時(shí)器都被初始化(設(shè)置相應(yīng)的UG位),兩個(gè)計(jì)數(shù)器都從0開始,但可以通過寫入任意一個(gè)計(jì)數(shù)器寄存器(TIMx_CNT)在定時(shí)器間插入一個(gè)偏移。下圖中能看到主/從模式下在定時(shí)器1的CNT_EN和CK_PSC之間有個(gè)延遲。

wKgZO2g2cEWAG0KMAABHkhVitUY541.png

使用定時(shí)器1的TI1輸入觸發(fā)定時(shí)器1和定時(shí)器2

1.3.16調(diào)試模式

當(dāng)微控制器進(jìn)入調(diào)試模式(Cortex-M3核心停止),根據(jù)DBG模塊中DBG_TIMx_STOP的設(shè)置,TIMx計(jì)數(shù)器或者繼續(xù)正常操作,或者停止。詳見后面的章節(jié):支持定時(shí)器、看門狗、bxCAN和I2C的調(diào)試。

2 程序設(shè)計(jì)

2.1 TIM_Basic例程

此例程的主要作用是進(jìn)行通用定時(shí)器的測試。通過配置定時(shí)器 TIM3,使其在計(jì)數(shù)溢出時(shí)產(chǎn)生更新中斷,在中斷服務(wù)函數(shù)中打印中斷服務(wù)函數(shù)名,以此來驗(yàn)證定時(shí)器的中斷功能是否正常工作。

系統(tǒng)上電或復(fù)位后,程序開始執(zhí)行。首先會通過串口輸出系統(tǒng)時(shí)鐘頻率信息和測試提示信息,之后,定時(shí)器 TIM3 開始計(jì)數(shù)。當(dāng)計(jì)數(shù)器的值達(dá)到自動(dòng)重載值 9999 時(shí),會產(chǎn)生更新中斷,進(jìn)入中斷服務(wù)函數(shù) TIM3_IRQHandler。在中斷服務(wù)函數(shù)中,會清除中斷標(biāo)志位并通過串口輸出 TIM3_IRQHandler。

此后,每隔一段時(shí)間(由定時(shí)器的預(yù)分頻器和自動(dòng)重載值決定),定時(shí)器就會產(chǎn)生一次更新中斷,串口會周期性地輸出 TIM3_IRQHandler,表明定時(shí)器的中斷功能正常工作。

2.2 TIM_CalibrationLsi例程

此例程的主要作用是通過定時(shí)器 TIM5 的輸入捕獲功能來測量內(nèi)部低速振蕩器(LSI)信號的周期和頻率。LSI 通常用于實(shí)時(shí)時(shí)鐘(RTC)等對時(shí)鐘精度要求不高的場合,通過測量其周期和頻率,可以對 LSI 的性能進(jìn)行評估。

1.時(shí)鐘配置

void RCC_ClkConfiguration(void)
{
    RCC_DeInit(); // 復(fù)位RCC時(shí)鐘配置到默認(rèn)狀態(tài)

    // 配置外部高速時(shí)鐘(HSE)
    RCC_HSEConfig(RCC_HSE_ON);                // 使能HSE
    while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); // 等待HSE就緒

    // 配置鎖相環(huán)(PLL):HSE×9=72MHz
    RCC_PLLCmd(DISABLE);                       // 先禁用PLL
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); // 設(shè)置PLL輸入源為HSE,倍頻系數(shù)9
    RCC_PLLCmd(ENABLE);                        // 使能PLL
    while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); // 等待PLL就緒

    // 設(shè)置系統(tǒng)時(shí)鐘源為PLL輸出
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // 選擇PLL作為系統(tǒng)時(shí)鐘源

    // 配置總線時(shí)鐘分頻
    RCC_HCLKConfig(RCC_SYSCLK_Div1);           // AHB總線時(shí)鐘 = SYSCLK/1 (72MHz)
    RCC_PCLK1Config(RCC_HCLK_Div2);            // APB1總線時(shí)鐘 = HCLK/2 (36MHz)
    RCC_PCLK2Config(RCC_HCLK_Div1);            // APB2總線時(shí)鐘 = HCLK/1 (72MHz)

    // 使能內(nèi)部低速時(shí)鐘(LSI)和高速時(shí)鐘(HSI)
    RCC_LSICmd(ENABLE);                        // 使能LSI(約40kHz,用于看門狗等)
    while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET); // 等待LSI就緒
    RCC_HSICmd(ENABLE);                        // 使能HSI(16MHz內(nèi)部RC時(shí)鐘)
    while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); // 等待HSI就緒
}

外部高速時(shí)鐘(HSE):使能 HSE 并等待其就緒,為后續(xù)鎖相環(huán)(PLL)提供穩(wěn)定的輸入時(shí)鐘源。

鎖相環(huán)(PLL):以 HSE 為輸入源,設(shè)置倍頻系數(shù)為 9,使能 PLL 并等待其就緒,得到更高頻率的時(shí)鐘信號。

系統(tǒng)時(shí)鐘源:將系統(tǒng)時(shí)鐘源設(shè)置為 PLL 輸出,提高系統(tǒng)整體運(yùn)行速度。

總線時(shí)鐘分頻:對 AHB、APB1 和 APB2 總線時(shí)鐘進(jìn)行合理分頻,滿足不同外設(shè)的時(shí)鐘需求。

內(nèi)部低速時(shí)鐘(LSI)和高速時(shí)鐘(HSI):使能 LSI 和 HSI 并等待它們就緒,其中 LSI 用于后續(xù)測量。

2.初始化操作

延時(shí)函數(shù):調(diào)用 delay_init() 初始化延時(shí)函數(shù),為后續(xù)可能的延時(shí)操作做準(zhǔn)備。

串口通信:調(diào)用 UART_Configuration(115200) 配置串口通信,波特率為 115200,用于輸出系統(tǒng)時(shí)鐘信息、測試提示以及測量結(jié)果。

獲取時(shí)鐘頻率:使用 RCC_GetClocksFreq(&clocks) 獲取系統(tǒng)時(shí)鐘頻率信息,為定時(shí)器配置提供參數(shù)。

3. 定時(shí)器配置

時(shí)鐘使能:使能 TIM5 和復(fù)用功能(AFIO)的時(shí)鐘,確保 TIM5 能夠正常工作,并允許對其引腳進(jìn)行重映射。

引腳重映射:將 TIM5 的通道 4 重映射到 LSI 信號,以便對 LSI 信號進(jìn)行捕獲。

時(shí)基單元初始化:設(shè)置 TIM5 的自動(dòng)重載值為 0xFFFF,預(yù)分頻器值根據(jù) PCLK1 頻率計(jì)算得出,時(shí)鐘分割為 1,計(jì)數(shù)模式為向上計(jì)數(shù),確定定時(shí)器的計(jì)數(shù)范圍和計(jì)數(shù)速度。

輸入捕獲配置:將 TIM5 的通道 4 配置為輸入捕獲模式,采用上升沿捕獲,直接映定時(shí)器溢出和捕獲到信號邊沿時(shí)能夠及時(shí)響應(yīng)。

定時(shí)器使能:使能 TIM5,開始對 LSI 信號進(jìn)行計(jì)數(shù)和捕獲。

4.主循環(huán)處理

 int main(void)
{
    // ...(前半部分初始化代碼略)

    TIM_Configuration(); // 初始化TIM5    

    while (1)
    {
        if (TIM5_CAPTURE_STA & 0X80) // 檢測捕獲完成標(biāo)志(最高位為1)
        {
            // 計(jì)算總時(shí)間(考慮定時(shí)器溢出次數(shù))
            temp = (TIM5_CAPTURE_STA & 0X3F) * 65536 + TIM5_CAPTURE_VAL; // 溢出次數(shù)×65536 + 捕獲值
            printf("LSI The period is:%d usrn", temp); // 輸出周期(微秒)
            printf("LSI The frequency is:%f Hzrn", (float)(1000000 / temp)); // 計(jì)算頻率并輸出
            TIM5_CAPTURE_STA = 0; // 清零標(biāo)志,準(zhǔn)備下一次捕獲
        }
    }
}

使用TI4,不分頻且不進(jìn)行濾波,以準(zhǔn)確捕獲 LSI 信號的上升沿和下降沿。

中斷配置:配置 TIM5 的中斷優(yōu)先級,使能更新中斷和通道 4 捕獲中斷,確保在

在主循環(huán)中,持續(xù)檢查 TIM5_CAPTURE_STA 的最高位。若該位為 1,表示成功捕獲到一個(gè)完整的 LSI 信號周期。此時(shí),計(jì)算該周期的總時(shí)間(考慮定時(shí)器溢出情況),并通過串口輸出 LSI 的周期和頻率。最后,將 TIM5_CAPTURE_STA 清零,準(zhǔn)備下一次捕獲。

5. 中斷服務(wù)函數(shù)處理

當(dāng) TIM5 產(chǎn)生更新中斷或通道 4 捕獲中斷時(shí),進(jìn)入中斷服務(wù)函數(shù):

若還未成功捕獲到一個(gè)完整的周期:

對于更新中斷,若已捕獲到上升沿,則記錄定時(shí)器溢出次數(shù)。

對于通道 4 捕獲中斷:

若已捕獲到上升沿,此時(shí)捕獲到下降沿,標(biāo)記成功捕獲到一個(gè)完整的高脈沖寬度,并記錄捕獲值。

若還未開始捕獲,此時(shí)捕獲到上升沿,清零相關(guān)變量,設(shè)置計(jì)數(shù)器為 0,并標(biāo)記捕獲到上升沿。

最后,清除更新中斷和通道 4 捕獲中斷標(biāo)志位,為下一次中斷做好準(zhǔn)備。

3 下載驗(yàn)證

3.1 TIM_Basic例程

燒錄完成后,硬件啟動(dòng),串口輸出系統(tǒng)時(shí)鐘頻率信息及“TIM Basic Test.”提示,定時(shí)器TIM3配置為向上計(jì)數(shù)模式,計(jì)數(shù)周期達(dá)9999時(shí)觸發(fā)更新中斷,在中斷服務(wù)函數(shù)中檢查并清除中斷標(biāo)志,通過串口輸出函數(shù)名`TIM3_IRQHandler,之后主函數(shù)進(jìn)入無限循環(huán)持續(xù)等待并響應(yīng)定時(shí)器中斷。

wKgZPGg2cEaAJP9pAAJNx__ns5M853.png

3.2 TIM_CalibrationLsi例程

代碼燒錄后,系統(tǒng)先對時(shí)鐘進(jìn)行配置,啟動(dòng)串口并輸出系統(tǒng)時(shí)鐘頻率信息及“TIM5 Calibration LSI Test.”提示,接著配置TIM5定時(shí)器用于測量低速內(nèi)部時(shí)鐘(LSI),當(dāng)TIM5捕獲到LSI信號的上升沿和下降沿后,主循環(huán)會計(jì)算并通過串口輸出LSI的周期和頻率,期間持續(xù)等待新的捕獲事件。

wKgZO2g2cEaAepLJAAR0l-CW2bQ481.png

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 多家分銷商,在香港、韓國、美國設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營銷。

香港辦事處管理的區(qū)域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6074

    文章

    45453

    瀏覽量

    667029
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2943

    文章

    47652

    瀏覽量

    411784
  • 通用定時(shí)器
    +關(guān)注

    關(guān)注

    1

    文章

    19

    瀏覽量

    3627
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    單片機(jī)定時(shí)器的用法

    本章以CW32通用定時(shí)器為例介紹單片機(jī)定時(shí)器的用法。
    的頭像 發(fā)表于 01-04 10:37 ?2682次閱讀
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>定時(shí)器</b>的用法

    第二十一章 TIM——通用定時(shí)器

    本篇文章介紹了W55MH32通用定時(shí)器(TIM2~TIM5等),其由16位自動(dòng)裝載計(jì)數(shù)和可編程預(yù)分頻構(gòu)成,具備輸入捕獲、輸出比較、PW
    的頭像 發(fā)表于 06-20 13:57 ?1499次閱讀
    第二<b class='flag-5'>十一章</b> TIM——<b class='flag-5'>通用</b><b class='flag-5'>定時(shí)器</b>

    WIZnet發(fā)布最新單片以太網(wǎng)控制芯片W7100

    WIZnet發(fā)布最新單片以太網(wǎng)控制芯片W7100 WIZnet HK Ltd 宣布推出嶄新的芯片W
    發(fā)表于 01-27 08:36 ?1489次閱讀

    第十一屆藍(lán)橋杯單片機(jī)模擬題--智能門鎖

    第十一屆藍(lán)橋杯單片機(jī)模擬題--智能門鎖
    發(fā)表于 11-30 10:21 ?20次下載
    <b class='flag-5'>第十一</b>屆藍(lán)橋杯<b class='flag-5'>單片機(jī)</b>模擬題--智能門鎖

    WIZnet高性能以太網(wǎng)單片機(jī)W55MH32重磅發(fā)布!

    WIZnet高性能以太網(wǎng)單片機(jī)W55MH32重磅發(fā)布!本文詳細(xì)解析了W55MH32芯片的高性能網(wǎng)絡(luò)處理能力與硬件資源,以及兩款
    的頭像 發(fā)表于 05-07 16:17 ?1364次閱讀
    <b class='flag-5'>WIZnet</b>高性能<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>W55MH32</b>重磅發(fā)布!

    即刻啟程,踏上W55MH32高性能以太網(wǎng)單片機(jī)學(xué)習(xí)之路!

    即刻啟程,踏上W55MH32高性能以太網(wǎng)單片機(jī)學(xué)習(xí)之路!即刻開啟W55MH32學(xué)習(xí)之旅!本教系列程配套官方手冊與W55MH32L
    的頭像 發(fā)表于 05-07 18:51 ?989次閱讀
    即刻啟程,踏上<b class='flag-5'>W55MH32</b>高性能<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>單片機(jī)</b>學(xué)習(xí)之路!

    第十二章 SysTick——系統(tǒng)定時(shí)器

    本章介紹了W55MH32的SysTick系統(tǒng)定時(shí)器,它是24位遞減計(jì)數(shù),含4個(gè)寄存,可配置定時(shí)、中斷,用于產(chǎn)生時(shí)基 等。
    的頭像 發(fā)表于 05-22 17:16 ?949次閱讀
    <b class='flag-5'>第十</b>二章 SysTick——系統(tǒng)<b class='flag-5'>定時(shí)器</b>

    一章 W55MH32 高性能以太網(wǎng)單片機(jī)的學(xué)習(xí)方法概述

    本章介紹W55MH32的學(xué)習(xí)方法,建議先了解硬件資源,按基礎(chǔ)篇、入門篇循序漸進(jìn)學(xué)習(xí)。參考兩份手冊,提供例程資料,還給出官網(wǎng)、github 等學(xué)習(xí)資料查找渠道。讓我們一起踏上W55MH32高性能
    的頭像 發(fā)表于 05-26 09:07 ?724次閱讀
    第<b class='flag-5'>一章</b> <b class='flag-5'>W55MH32</b> 高性能<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>單片機(jī)</b>的學(xué)習(xí)方法概述

    第二章 開發(fā)板與芯片介紹 詳解W55MH32芯片及開發(fā)

    本章介紹了W55MH32芯片及開發(fā)板。該芯片采用Cortex-M3內(nèi)核,主頻216MHz,集成以太網(wǎng)功能,有L和Q兩種型號。配套開發(fā)板L-EVB功能豐富、Q-EVB為最小系統(tǒng)板,均含仿
    的頭像 發(fā)表于 05-26 09:19 ?1215次閱讀
    第二章 <b class='flag-5'>開發(fā)</b>板與芯片介紹  詳解<b class='flag-5'>W55MH32</b>芯片及<b class='flag-5'>開發(fā)</b>板

    WIZnet W55MH32以太網(wǎng)單片機(jī)開發(fā)教程第十一章 通用定時(shí)器(下篇)

    本章為W55MH32通用定時(shí)器的下篇,介紹了TIM_InputCapture 等 4 個(gè)程序設(shè)計(jì)例程,涉及輸入捕獲、PWM 輸出、中斷測試、觸摸檢測等功能和例程下載驗(yàn)證情況,如串口輸出、波形檢測等。
    的頭像 發(fā)表于 05-28 10:48 ?1019次閱讀
    <b class='flag-5'>WIZnet</b> <b class='flag-5'>W55MH32</b><b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>開發(fā)</b>教程<b class='flag-5'>第十一章</b> <b class='flag-5'>通用</b><b class='flag-5'>定時(shí)器</b>(下篇)

    W55MH32高性能以太網(wǎng)單片機(jī)開發(fā)課件 第十四章 ADC(上篇)

    本章介紹了W55MH32的12位ADC(上篇),其有18通道,支持單次、連續(xù)等轉(zhuǎn)換模式,具有自校準(zhǔn)、模擬看門狗等功能。還含ADC_AnalogWatchdog 例程,可監(jiān)測電壓超閾值并觸發(fā)中斷。
    的頭像 發(fā)表于 05-28 13:52 ?746次閱讀
    <b class='flag-5'>W55MH32</b>高性能<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>開發(fā)</b>課件 <b class='flag-5'>第十</b>四章 ADC(<b class='flag-5'>上篇</b>)

    第十一章 W55MH32 SMTP示例

    本文講解了如何在 W55MH32?芯片上實(shí)現(xiàn) SMTP?協(xié)議,通過實(shí)例詳細(xì)展示了在該芯片上使用 SMTP?協(xié)議發(fā)送電子郵件的實(shí)現(xiàn)流程,包括 SMTP?發(fā)送內(nèi)容初始化、使用 DNS?協(xié)議解析 SMTP
    的頭像 發(fā)表于 07-24 09:49 ?1220次閱讀
    <b class='flag-5'>第十一章</b> <b class='flag-5'>W55MH32</b> SMTP示例

    第十五章 W55MH32 SNMP示例

    本文講解了如何在 W55MH32?芯片上實(shí)現(xiàn) SNMP?功能,通過實(shí)戰(zhàn)例程展示了使用 MIB Browser?管理 W55MH32?的具體過程,涵蓋在 MIB Browser?中創(chuàng)建分支、添加葉子
    的頭像 發(fā)表于 07-24 10:43 ?882次閱讀
    <b class='flag-5'>第十</b>五章 <b class='flag-5'>W55MH32</b> SNMP示例

    第二十六章 W55MH32?上位機(jī)搜索和配置示例

    本文講解了如何在 W55MH32?芯片上實(shí)現(xiàn)上位機(jī)搜索和配置功能,通過實(shí)戰(zhàn)例程展示了使用開源上位機(jī)配置工具 SmartConfigTool?搜索局域網(wǎng)中的
    的頭像 發(fā)表于 07-24 16:13 ?744次閱讀
    第二十六章 <b class='flag-5'>W55MH32</b>?上位<b class='flag-5'>機(jī)</b>搜索和配置示例

    一文讀懂:W55MH32 如何攜手微信小程序與 OneNET,實(shí)現(xiàn)以太網(wǎng)燈條調(diào)色自由(軟硬件開源)

    本文采用W55MH32開發(fā)板搭配WS2812B燈條,借助MQTT協(xié)議連接OneNET云平臺,并配合微信小程序,實(shí)現(xiàn)了以太網(wǎng)燈條的遠(yuǎn)程調(diào)色以及動(dòng)態(tài)模式(如流水燈、彩虹燈)控制。感謝大家閱讀,
    的頭像 發(fā)表于 08-08 11:16 ?1382次閱讀
    一文讀懂:<b class='flag-5'>W55MH32</b> 如何攜手微信小程序與 OneNET,實(shí)現(xiàn)<b class='flag-5'>以太網(wǎng)</b>燈條調(diào)色自由(軟硬件開源)