PWM 輸出與看門狗定時(shí)器_第1頁
PWM 輸出與看門狗定時(shí)器_第2頁
PWM 輸出與看門狗定時(shí)器_第3頁
PWM 輸出與看門狗定時(shí)器_第4頁
PWM 輸出與看門狗定時(shí)器_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第5章 PWM輸出與看門狗定時(shí)器應(yīng)用實(shí)例、本章將介紹PWM輸出與看門狗定時(shí)器應(yīng)用實(shí)例,包括ST32F103定時(shí)器概述、ST32通用定時(shí)器ST32PWM輸出應(yīng)用實(shí)例和看門狗定時(shí)器。、5.1 ST32F103定時(shí)器概述從本質(zhì)上講,定時(shí)器就是“數(shù)字電路”課程中學(xué)過的計(jì)數(shù)器(Coutr),它像鬧鐘一樣忠實(shí)地為處理器完成定時(shí)或計(jì)數(shù)任務(wù),幾乎是現(xiàn)代微處理器必備的一種片上外設(shè)。很多讀者在初次接觸定時(shí)器時(shí)都會(huì)提出這樣一個(gè)問題:既然Arm內(nèi)核每條指令的執(zhí)行時(shí)間都是固定的,且大多數(shù)是相等的,那么我們可以用軟件的方法實(shí)現(xiàn)定時(shí)嗎?例如,在72MHz系統(tǒng)/時(shí)鐘下要實(shí)現(xiàn)1s的定時(shí),完全可以通過執(zhí)行72條不影響狀態(tài)的“無關(guān)指令”實(shí)現(xiàn)。既然這樣,ST32中為什么還要有定時(shí)計(jì)數(shù)器這樣一個(gè)完成定時(shí)工作的硬件結(jié)構(gòu)呢?其實(shí),讀者/、、的看法一點(diǎn)也沒有錯(cuò),確實(shí)可以通過插入若干條不產(chǎn)生影響的“無關(guān)指令”實(shí)現(xiàn)固定時(shí)間的定時(shí)。但這會(huì)帶來兩個(gè)問題:其一,在這段時(shí)間中,ST32不能做其他任何事情,否則定時(shí)將不再準(zhǔn)確;其二,這些“無關(guān)指令”會(huì)占據(jù)大量程序空間。而當(dāng)嵌入式處理器中集成了硬件的定時(shí)結(jié)構(gòu)以后,它就可以在內(nèi)核運(yùn)行執(zhí)行其他任務(wù)的同時(shí)完成精確的定時(shí),并在定時(shí)結(jié)束后通過中斷事件等方法通知內(nèi)核或相關(guān)外設(shè)。簡(jiǎn)單地說,定時(shí)器最重要的作用就是將內(nèi)核從簡(jiǎn)單重復(fù)的延時(shí)工作中解放出來。、、P、 、 、當(dāng)然,定時(shí)器的核心電路結(jié)構(gòu)是計(jì)數(shù)器。當(dāng)它對(duì)ST32內(nèi)部固定頻率的信號(hào)進(jìn)行計(jì)數(shù)時(shí),只要指定計(jì)數(shù)器的計(jì)數(shù)值,也就相當(dāng)于固定了從定時(shí)器啟動(dòng)到溢出之間的時(shí)間長(zhǎng)度。這種對(duì)內(nèi)部已知頻率計(jì)數(shù)的工作方式稱為“定時(shí)方式”。定時(shí)器還可以對(duì)外部管腳輸入的未知頻率信號(hào)進(jìn)行計(jì)數(shù),此時(shí)由于外部輸入時(shí)鐘頻率可能改變,從定時(shí)器啟動(dòng)到溢出之間的時(shí)間長(zhǎng)度是無法預(yù)測(cè)的,軟件所能判斷的僅僅是外部脈沖的個(gè)數(shù)。因此,這種計(jì)數(shù)時(shí)鐘來自外部的工作方式只能稱為“計(jì)數(shù)方式”。在這兩種基本工作方式的基礎(chǔ)上,ST32的定時(shí)器又衍生出了輸入捕獲輸出比較、WM脈沖計(jì)數(shù)編碼器接口等多種P、 、 、定時(shí)與計(jì)數(shù)的應(yīng)用十分廣泛。在實(shí)際生產(chǎn)過程中,許多場(chǎng)合都需要定時(shí)或計(jì)數(shù)操作,如107、 /產(chǎn)生精確的時(shí)間對(duì)流水線上的產(chǎn)品進(jìn)行計(jì)數(shù)等。因此,定時(shí)計(jì)數(shù)器在嵌入式單片機(jī)應(yīng)用系統(tǒng)中十分重要。定時(shí)和計(jì)數(shù)可以通過以下方式實(shí)、 /1.軟件延時(shí)/單片機(jī)是在一定時(shí)鐘下運(yùn)行的,可以根據(jù)代碼所需的時(shí)鐘周期完成延時(shí)操作。軟件延時(shí)會(huì)導(dǎo)致CPU利用率低,因此主要用于短時(shí)間延時(shí),如高速A/D轉(zhuǎn)換器。/2.可編程定時(shí)計(jì)數(shù)器/ ///微控制器中的可編程定時(shí)計(jì)數(shù)器可以實(shí)現(xiàn)定時(shí)和計(jì)數(shù)操作,定時(shí)計(jì)數(shù)器功能由程序靈活設(shè)置,重復(fù)利用。設(shè)置好后由硬件與CPU并行工作,不占用CPU時(shí)間,這樣在軟件的控制下,可以實(shí)現(xiàn)多個(gè)精密定時(shí)計(jì)數(shù)。嵌入式處理器為了適應(yīng)多種應(yīng)用,通常集成多個(gè)高性能的定時(shí)計(jì)數(shù)/ //// 、微控制器中的定時(shí)器本質(zhì)上是一個(gè)計(jì)數(shù)器,可以對(duì)內(nèi)部脈沖或外部輸入進(jìn)行計(jì)數(shù),不僅具有基本的延時(shí)計(jì)數(shù)功能,還具有輸入捕獲輸出比較和PWM波形輸出等高級(jí)功能。在嵌入式開發(fā)中,充分利用定時(shí)器的強(qiáng)大功能,可以顯著提高外設(shè)驅(qū)動(dòng)的編程效率和CPU利用率,增強(qiáng)系統(tǒng)的實(shí)時(shí)/ 、//。ST32內(nèi)部集成了多個(gè)定時(shí)計(jì)數(shù)器。根據(jù)型號(hào)不同,ST32系列芯片最多包含8個(gè)定時(shí)計(jì)數(shù)器。其中,TI6和TI7為基本定時(shí)器;TI2~TI5為通用定時(shí)器;TI1和TI8為高級(jí)控制定時(shí)器,功能最強(qiáng)3種定時(shí)器的功能如表-1所示。此外,在ST32中還有兩個(gè)看門狗定時(shí)器和一個(gè)系統(tǒng)滴答定時(shí)器。//。表-1ST32定時(shí)器的功能主要功能內(nèi)部時(shí)鐘源(8MHz)帶16位分頻的計(jì)數(shù)單元更新中斷和DMA計(jì)數(shù)方向、外部事件計(jì)數(shù)其他定時(shí)器觸發(fā)或級(jí)聯(lián)、4個(gè)獨(dú)立輸入捕獲輸出比較通道單脈沖輸出方式正交編碼器輸入霍爾傳感器輸入輸出比較信號(hào)死區(qū)產(chǎn)生制動(dòng)信號(hào)輸入

高級(jí)控制定時(shí)器 通用定時(shí)器 基本定時(shí)器√ √ √√ √ √、 、、 、√ √ √向上向下雙向向上向下雙向、 、、 、√ √ ×√ √ ×√ √ ×√ √ ×√ √ ×√ √ ×√ × ×√ × ×、PST32F103定時(shí)器相比于傳統(tǒng)的51單片機(jī)要完善和復(fù)雜得多,它是專為工業(yè)控制應(yīng)用量身定做的。定時(shí)器有很多用途,包括基本定時(shí)功能生成輸出波形(比較輸出、WM和帶死區(qū)插入的互補(bǔ)PWM)和測(cè)量輸入信號(hào)的脈沖寬度(輸入捕獲)等。、P1085.2 ST32通用定時(shí)器5.2.1 通用定時(shí)器簡(jiǎn)介通用定時(shí)器(TI2~TI5)由一個(gè)通過可編程預(yù)分頻器驅(qū)動(dòng)的16位自動(dòng)裝載計(jì)數(shù)器構(gòu)成。它適用于多種場(chǎng)合,包括測(cè)量輸入信號(hào)的脈沖長(zhǎng)度(輸入捕獲)或產(chǎn)生輸出波形(輸出比較和PWM)。使用定時(shí)器預(yù)分頻器和RCC時(shí)鐘控制器預(yù)分頻器,脈沖長(zhǎng)度和波形周期可以在幾微秒到幾毫秒間調(diào)整。每個(gè)定時(shí)器都是完全獨(dú)立的,沒有互相共享任何資源,它們可以同步操作。5.2.2 通用定時(shí)器的主要功能通用定時(shí)器的主要功能如下。、 、 /1)16位向上向下向上向下自動(dòng)裝載、 、 /(2)16位可編程(可以實(shí)時(shí)修改)預(yù)分頻器,計(jì)數(shù)器時(shí)鐘頻率的分頻系數(shù)為1~65536的任意數(shù)值。、 、、3)4個(gè)獨(dú)立通道:輸入捕獲輸出比較PWM生成(邊緣或中間對(duì)齊模式)單脈沖模式輸、 、、/4)使用外部信號(hào)控制定時(shí)器和定時(shí)器互連的同步電路。5)以下事件發(fā)生時(shí)產(chǎn)生中斷DMA:/、 / 、 /、 、 /①更新計(jì)數(shù)器向上溢出向下溢出計(jì)數(shù)器初始化(通過軟件或內(nèi)部外部觸發(fā));②觸發(fā)事件(計(jì)數(shù)器啟動(dòng)停止初始化或由內(nèi)部、 / 、 /、 、 /③輸入捕獲;④輸出比較。6)支持針對(duì)定位的增量(正交)編碼器和霍爾傳感器電路。7)觸發(fā)輸入作為外部時(shí)鐘或按周期的電流管理。5.2.3 通用定時(shí)器的功能描述/通用定時(shí)器內(nèi)部結(jié)構(gòu)如圖-1所示,相比于基本定時(shí)器,其內(nèi)部結(jié)構(gòu)要復(fù)雜得多,其中最顯著的區(qū)別就是增加了4個(gè)捕獲比較寄存器TIxCCR,這也是通用定時(shí)器擁有如此多強(qiáng)大功能的原因。/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ù)器寄存器(TIxNT)預(yù)分頻器寄存器(TIxPSC)和自動(dòng)裝載寄存器(TIxRR)、 /、、109圖-1 通用定時(shí)器內(nèi)部結(jié)構(gòu)_預(yù)分頻器可以將計(jì)數(shù)器的時(shí)鐘頻率按1~65536的任意值分頻。它是基于一個(gè)(在TIxPSC寄存器中的)16位寄存器控制的16位計(jì)數(shù)器。這個(gè)控制寄存器帶有緩沖器,它能夠在工作時(shí)被改變。新的預(yù)分頻器參數(shù)在下一次更新事件到來時(shí)被采用。_2.計(jì)數(shù)模式1)向上計(jì)數(shù)模式_向上計(jì)數(shù)模式的工作過程與基本定時(shí)器向上計(jì)數(shù)模式相同,工作過程如圖-2所示。在向上計(jì)數(shù)模式中,計(jì)數(shù)器在時(shí)鐘CKCNT的驅(qū)動(dòng)下從0計(jì)數(shù)到自動(dòng)重裝載寄存器TIxARR的預(yù)設(shè)值,然后重新從0開始計(jì)數(shù),并產(chǎn)生一個(gè)計(jì)數(shù)器溢出事件,可觸發(fā)中斷或DMA請(qǐng)求。當(dāng)發(fā)生一個(gè)更新事件時(shí),所有寄存器都被更新,硬件同時(shí)設(shè)置更新標(biāo)志位。_110對(duì)于一個(gè)工作在向上計(jì)數(shù)模式的通用定時(shí)器,自動(dòng)重裝載寄存器T1xRR的值為0x0036,內(nèi)部預(yù)分頻系數(shù)為4(預(yù)分頻寄存器TIxPSC的值為3),計(jì)數(shù)器時(shí)序圖如圖-3所示。2)向下計(jì)數(shù)模式通用定時(shí)器向下計(jì)數(shù)模式工作過程如圖-4所示。圖5-2 向上計(jì)數(shù)模式 在向下計(jì)數(shù)模式中,計(jì)數(shù)器在時(shí)鐘CKCNT的驅(qū)動(dòng)下從自動(dòng)重裝載寄存器TIxRR的預(yù)設(shè)值開始向下計(jì)數(shù)到0,然后從自動(dòng)重裝載寄存器TIxARR的預(yù)設(shè)值重新開始計(jì)數(shù),并產(chǎn)生一個(gè)計(jì)數(shù)器溢出事件,可觸發(fā)中斷或DMA請(qǐng)求。當(dāng)發(fā)生一個(gè)更新事件時(shí),所有寄存器都被更新,硬件同時(shí)設(shè)置更新標(biāo)志位。圖-3 計(jì)數(shù)器時(shí)序圖(內(nèi)部預(yù)分頻系數(shù)為4)/對(duì)于一個(gè)工作在向下計(jì)數(shù)模式的通用定時(shí)器,自動(dòng)重裝載寄存器TIx_ARR的值為0x0036,內(nèi)部預(yù)分頻系數(shù)為2(預(yù)分頻寄存器TIxPSC的值為1),計(jì)數(shù)器時(shí)序圖如圖-5所示。/3)向上向下計(jì)數(shù)模式/向上向下計(jì)數(shù)模式又稱為中央對(duì)齊模式或雙/向計(jì)數(shù)模式,其工作過程如圖-6所示。計(jì)數(shù)器從0開始計(jì)數(shù)到自動(dòng)重裝載寄存器TIx_ARR的值 圖-4 向下計(jì)數(shù)模式-1,產(chǎn)生一個(gè)計(jì)數(shù)器溢出事件,向下計(jì)數(shù)到1并且產(chǎn)生一個(gè)計(jì)數(shù)器下溢事件;然后再從0開始重新計(jì)數(shù)。在這個(gè)模式下,不能寫入TIxCR1中的IR方向位,它由硬件更新并指示當(dāng)前的計(jì)數(shù)方向。可以在每次計(jì)數(shù)上溢和每次計(jì)數(shù)下溢時(shí)產(chǎn)生更新事件,觸發(fā)中斷或DMA請(qǐng)求。111圖-5 計(jì)數(shù)器時(shí)序圖(內(nèi)部預(yù)分頻系數(shù)為2)/圖-6 向上向下計(jì)數(shù)模式//對(duì)于一個(gè)工作在向上向下計(jì)數(shù)模式的通用定時(shí)器,自動(dòng)重裝載寄存器TIxARR的值為0x06,內(nèi)部預(yù)分頻系數(shù)為1(預(yù)分頻寄存器TIxPSC的值為0),計(jì)數(shù)器時(shí)序圖如圖-7所示。/圖-7 計(jì)數(shù)器時(shí)序圖(內(nèi)部預(yù)分頻系數(shù)為1)1123.時(shí)鐘選擇相比于基本定時(shí)器單一的內(nèi)部時(shí)鐘源,ST32F103通用定時(shí)器的16位計(jì)數(shù)器的時(shí)鐘源有多種選擇,可由以下時(shí)鐘源提供。_1)內(nèi)部時(shí)鐘(CKINT)___ _內(nèi)部時(shí)鐘CKINT來自RCC的TIxCLK,根據(jù)ST32F103時(shí)鐘樹,通用定時(shí)器TI2~TI5內(nèi)部時(shí)鐘CKINT的來源TIMCLK與基本定時(shí)器相同,都是來自APB1預(yù)分頻器的輸出。通常情況下,時(shí)鐘頻率為72MHz__ _2)外部輸入捕獲引腳TIx(外部時(shí)鐘模式1)_外部輸入捕獲引腳TIx(外部時(shí)鐘模式1)來自外部輸入捕獲引腳上的邊沿信號(hào)。計(jì)數(shù)器可以在選定的輸入端(引腳1:TI1FP1或TI1FED,引腳2:TI2FP2)的每個(gè)上升沿或下降沿計(jì)數(shù)。_3)外部觸發(fā)輸入引腳ETR(外部時(shí)鐘模式2)外部觸發(fā)輸入引腳ETR(外部時(shí)鐘模式2)來自外部引腳ETR。計(jì)數(shù)器能在外部觸發(fā)輸入ETR的每個(gè)上升沿或下降沿計(jì)數(shù)。4)內(nèi)部觸發(fā)器輸入ITRx內(nèi)部觸發(fā)輸入ITRx來自芯片內(nèi)部其他定時(shí)器的觸發(fā)輸入,使用一個(gè)定時(shí)器作為另一個(gè)定時(shí)器的預(yù)分頻器。例如,可以配置TI1作為TI2的預(yù)分頻器。/4.捕獲比較通道// /、(每個(gè)捕獲比較通道都圍繞一個(gè)捕獲比較寄存器(包含影子寄存器),包括捕獲的輸入部分(數(shù)字濾波多路復(fù)用和預(yù)分頻器)和輸出部分(比較器和輸出控制)。輸入部分對(duì)相應(yīng)的TIx輸入信號(hào)采樣,并產(chǎn)生一個(gè)濾波后的信號(hào)TIxF。然后,一個(gè)帶極性選擇的邊緣檢測(cè)器產(chǎn)生一個(gè)信號(hào)(TIxFPx),它可以作為從模式控制器的輸入觸發(fā)或作為捕獲控制。該信號(hào)通過預(yù)分頻器進(jìn)入捕獲寄存器ICxPS)。輸出部分產(chǎn)生一個(gè)中間波形OCxRf(高有效)作為基準(zhǔn),鏈的末端決定最終輸出信號(hào)的極/ /、(5.2.4 通用定時(shí)器的工作模式1.輸入捕獲模式/_在輸入捕獲模式下,檢測(cè)到ICx信號(hào)上相應(yīng)的邊沿后,計(jì)數(shù)器的當(dāng)前值被鎖存到捕獲比較寄存器(TIxCCRx)中。當(dāng)捕獲事件發(fā)生時(shí),相應(yīng)的CCxIF標(biāo)志(TIxSR寄存器)被置為1,如果使能了中斷或DMA操作,則將產(chǎn)生中斷或DMA操作。如果捕獲事件發(fā)生時(shí)CCxIF標(biāo)志已經(jīng)為高,那么重復(fù)捕獲標(biāo)志CCxOF(TIxR寄存器)被置為1。寫/_CCxIF=0可清除CCxIF,或讀取存儲(chǔ)在TIx_CCRx寄存器中的捕獲數(shù)據(jù)也可清除CCxIF;寫CCxOF=0可清除CCxOF。2.PWM輸入模式PWM輸入模式是輸入捕獲模式的一個(gè)特例,除以下區(qū)別外,操作與輸入捕獲模式相同。1131)兩個(gè)ICx信號(hào)被映射至同一個(gè)TIx輸入。2)這兩個(gè)ICx信號(hào)為邊沿有效,但是極性相反。_3)其中一個(gè)TIxFP信號(hào)被作為觸發(fā)輸入信號(hào),而從模式控制器被配置成復(fù)位模式。例如,需要測(cè)量輸入TI1的PWM信號(hào)的長(zhǎng)度(TIxCCR1寄存器)和占空比(TIxCCR2寄存器),具體步驟如下(取決于CKINT的頻率和預(yù)分頻器的值)。__①選擇TIxCCR1的有效輸入:置TIxCCMR1寄存器的CC1S=01(選擇TI1)。②選擇TI1FP1的有效極性(捕獲數(shù)據(jù)到TIxCCR1中,清除計(jì)數(shù)器):置CC1P=0_(上升沿有效)。③選擇TIx_CCR2的有效輸入:置TIx_CCMR1寄存器的CC2S=10(選擇14478)。___④選擇T11FP2的有效極性(捕獲數(shù)據(jù)到TIxCCR2):置CC2P=1(下降沿有效)。⑤選擇有效的觸發(fā)輸入信號(hào):置TIxSMCR寄存器中的TS=101(選擇TI1FP1)。⑥配置從模式控制器為復(fù)位模式:置TIxSMCR中的SS=100。____⑦使能捕獲:置TIxCCER寄存器中CC1E=1且CC2E=1。3.強(qiáng)置輸出模式_在輸出模式(TIxCCMRx寄存器中CCxS=00)下,輸出比較信號(hào)(OCxREF和相應(yīng)的OCx)能夠直接由軟件強(qiáng)置為有效或無效狀態(tài),而不依賴于輸出比較寄存器和計(jì)數(shù)器間的比較結(jié)果。置TIxCCMRx寄存器中相應(yīng)的OCxM=101,即可強(qiáng)置輸出比較信號(hào)(OCxREF/OCx)為有效狀態(tài)。這樣OCxREF被強(qiáng)置為高電平(OCxREF始終為高電平有效),同時(shí)OCx得到CCxP極性位相反的值。例如,CCxP=0(OCx高電平有效),則OCx被強(qiáng)置為高電平。置TIxCCMRx寄存器中的OCxM=100,可強(qiáng)置OCxREF信號(hào)為低電平。該模式下,TIxCCRx影子寄存器和計(jì)數(shù)器之間的比較仍然在進(jìn)行,相應(yīng)的標(biāo)志也會(huì)被修改,因此仍然會(huì)產(chǎn)生相應(yīng)的中斷和DMA請(qǐng)求。4.輸出比較模式/輸出比較模式用于控制一個(gè)輸出波形,或者指示一段給定的時(shí)間已經(jīng)到時(shí)。當(dāng)計(jì)數(shù)器與捕獲比較寄存器的內(nèi)容相同時(shí),輸出比較功能進(jìn)行如下操作。/_ _、 、1)將輸比較(TIxCCRx寄中的OCxM位)和輸出極(TIxCCER寄存器中的CCxP位)定義的值輸出到對(duì)應(yīng)的引腳上。在比較匹配時(shí),輸出引腳可以保持它的電(OCxM=000)被設(shè)置有效電平(OCxM=001)被設(shè)置成無效電平OCxM=010)或進(jìn)行翻(OCxM=011_ _、 、_2)設(shè)置中斷狀態(tài)寄存器中的標(biāo)志位(TIxSR寄存器中的CCxIF位)。_3)若設(shè)置了相應(yīng)的中斷屏蔽(TIxIER寄存器中的CCxIE位),則產(chǎn)生一個(gè)中斷。4)若設(shè)置了相應(yīng)的使能位(TIxIER寄存器中的CCxDE位,TIxR2寄存器中的CCDS位選擇DMA請(qǐng)求功能),則產(chǎn)生一個(gè)DMA請(qǐng)求。輸出比較模式的配置步驟如下。114、 、1)選擇計(jì)數(shù)器時(shí)鐘(內(nèi)部外部預(yù)分頻器)、 、_2)將相應(yīng)的數(shù)據(jù)寫入TIxRR和TIxCCRx寄存器中。_/ /3)如果要產(chǎn)生一個(gè)中斷請(qǐng)求和或一個(gè)DMA請(qǐng)求,設(shè)置CCxIE位和或CCxDE位。4)選擇輸出模式。例如,當(dāng)計(jì)數(shù)器CNT與CCRx匹配時(shí)翻轉(zhuǎn)OCx的輸出引/ /、CCRx預(yù)裝載未用,開啟OCx輸出且高電平有效,則必須設(shè)置OCxM=011OCxPE=0、CCxP=0和CCxE=1。、_5)設(shè)置TIxCR1寄存器的CEN位啟動(dòng)計(jì)數(shù)器。_TIxCCRx寄存器能夠在任何時(shí)候通過軟件進(jìn)行更新以控制輸出波形,條件是未使用預(yù)裝載寄存器(OCxPE=0),否則TIxCCRx影子寄存器只能在發(fā)生下一次更新事件時(shí)被更新。5.PWM輸出模式、PWM輸出模式是一種特殊的輸出模式,在電力電子和電機(jī)控制領(lǐng)域得到廣泛應(yīng)用。1)PWM簡(jiǎn)介、、 、、 、 、 、 、 、PWM是Plseithodltion的縮寫,中文意思就是脈沖寬度調(diào)制,簡(jiǎn)稱脈寬調(diào)制。它是利用微處理器的數(shù)字輸出對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù),因控制簡(jiǎn)單靈活和動(dòng)態(tài)響應(yīng)好等優(yōu)點(diǎn)而成為電力電子技術(shù)中應(yīng)用最廣泛的控制方式PWM應(yīng)用領(lǐng)域包括測(cè)量通信功率控制與變換電動(dòng)機(jī)控制伺服控制調(diào)光開關(guān)電源,甚至某些音頻放大器。因此,研究基于PWM技術(shù)的正負(fù)脈寬數(shù)控調(diào)制信號(hào)發(fā)生器具有十分重要的現(xiàn)實(shí)意義PWM是一種對(duì)模擬信號(hào)電平進(jìn)行數(shù)字編碼的方法,通過高分辨率計(jì)數(shù)器的使用,調(diào)制方波的占空比對(duì)一個(gè)具體模擬信號(hào)的電平進(jìn)行編碼PWM信號(hào)仍然是數(shù)字的,因?yàn)樵诮o定的任何時(shí)刻,滿幅值的直流供電要么完全有(ON),要么完全無(OFF),電壓或電流源是以一種通(ON)或斷(OFF)的重復(fù)脈沖序列被加載到模擬負(fù)載上的。通時(shí)即是直流供電被加到負(fù)載上,斷時(shí)即是供電被斷開。只要帶寬足夠,任何模擬值都可以使、 、、 、 、 、 、 、2)PWM實(shí)現(xiàn)目前在運(yùn)動(dòng)控制系統(tǒng)或電動(dòng)機(jī)控制系統(tǒng)中實(shí)現(xiàn)PWM的方法主要有傳統(tǒng)的數(shù)字電路、微控制器普通I/O模擬和微控制器的PWM直接輸出等。1)傳統(tǒng)的數(shù)字電路方式:用傳統(tǒng)的數(shù)字電路實(shí)現(xiàn)PWM(如555定時(shí)器),電路設(shè)計(jì)較復(fù)雜,體積大,抗干擾能力差,系統(tǒng)的研發(fā)周期較長(zhǎng)。2)微控制器普通I/O模擬方式:對(duì)于微控制器中無PWM輸出功能的情況(如51單片機(jī)),可以通過CPU操控普通I/O口實(shí)現(xiàn)PWM輸出。但這樣實(shí)現(xiàn)PWM將消耗大量的時(shí)間,大大降低CPU的效率,而且得到的PWM信號(hào)的精度不太高。3)微控制器的PWM直接輸出方式:對(duì)于具有PWM輸出功能的微控制器,在進(jìn)行簡(jiǎn)單的配置后即可在微控制器的指定引腳上輸出PWM脈沖。這也是目前使用最多的PWM實(shí)現(xiàn)方式。ST32F103就是一款具有PWM輸出功能的微控制器,除了基本定時(shí)器TI6和115TI7外,其他的定時(shí)器都可以用來產(chǎn)生PWM輸出。其中,高級(jí)控制定時(shí)器TI1和TI8可以同時(shí)產(chǎn)生多達(dá)7路的PWM輸出;通用定時(shí)器也能同時(shí)產(chǎn)生多達(dá)4路的PWM輸出;ST32最多可以同時(shí)產(chǎn)生30路PWM輸出。3)PWM輸出模式的工作過程、_ST32F103微控制器脈沖寬度調(diào)制模式可以產(chǎn)生一個(gè)由TIx_ARR寄存器確定頻率由TIxCCRx寄存器確定占空比的信號(hào),其產(chǎn)生原理如圖-8所示。、_圖-8ST32F103微控制器PWM產(chǎn)生原理通用定時(shí)器PWM輸出模式的工作過程如下。__1)若配置脈沖計(jì)數(shù)器TIxCNT為向上計(jì)數(shù)模式,自動(dòng)重裝載寄存器TIx_ARR的預(yù)設(shè)值為N,則脈沖計(jì)數(shù)器TIxCNT的當(dāng)前計(jì)數(shù)值X在時(shí)鐘CKCNT的驅(qū)動(dòng)下從0開始不斷累加計(jì)數(shù)。____/2)在脈沖計(jì)數(shù)器TIxCNT隨著時(shí)鐘CKCNT觸發(fā)進(jìn)行累加計(jì)數(shù)的同時(shí),脈沖計(jì)數(shù)MCNT的當(dāng)前計(jì)數(shù)值X與捕獲比較寄存器TIxCCR的預(yù)設(shè)值A(chǔ)進(jìn)行比較。如果__/X<A,輸出高電平(或低電平);如果X≥A,輸出低電平(或高電平)。___3)當(dāng)脈沖計(jì)數(shù)器IxCNT的計(jì)數(shù)值X大于自動(dòng)重裝載寄存器IxARR的預(yù)設(shè)值N時(shí),脈沖計(jì)數(shù)器TIxCNT的計(jì)數(shù)值清零并重新開始計(jì)數(shù)。如此循環(huán)往復(fù),得到的PWM輸出信號(hào)周期為(N+1)TCKCNT,其中N為自動(dòng)重裝載寄存器TIx_ARR的預(yù)___/設(shè)值,TCKCNT為時(shí)鐘CKCNT的周期PWM輸出信號(hào)脈沖寬度為A×TCKCNT,其中A為捕獲比較寄存器TIxCCR的預(yù)設(shè)值,TCKNT為時(shí)鐘CKNT的周期。/PWM輸出信號(hào)的占空比為A/(N+1)。/ 、、_ _ _下面舉例具體說明,當(dāng)通用定時(shí)器被設(shè)置為向上計(jì)數(shù)模式,自動(dòng)重裝載寄存器TIxARR的預(yù)設(shè)值為8,4個(gè)捕獲比較寄存器TIxCCRx分別設(shè)為048和大于8時(shí),通過用定時(shí)器的4個(gè)PWM通道的輸出時(shí)序OCxREF和觸發(fā)中斷時(shí)序CCxIF,如圖-9所示。例如,在TIxCCR=4情,當(dāng)TIxCNT<4,OCxREF輸出高電;當(dāng)TIxCNT≥4時(shí),OCxREF輸出低電平,并在比較結(jié)果改變時(shí)觸發(fā)CCxIF中斷標(biāo)志。此PWM輸出信號(hào)的占空比為4/8/ 、、_ _ _、 /需要注意的是,在PWM輸出模式下,脈沖計(jì)數(shù)器TIxCNT的計(jì)數(shù)模式有向上計(jì)數(shù)向下計(jì)數(shù)和向上向下計(jì)數(shù)(中央對(duì)齊)3種。以上僅介紹向上計(jì)數(shù)方式,讀者在掌握了通用定時(shí)器向上計(jì)數(shù)模式的PWM輸出原理后,其他兩種計(jì)數(shù)模式的PWM輸出也就容易推出、 /116圖-9 向上計(jì)數(shù)模式PWM輸出時(shí)序圖5.3 ST32PWM輸出應(yīng)用實(shí)例_本節(jié)實(shí)現(xiàn)通過配置ST32的重映射功能,把定時(shí)器TI3通道2重映射到引腳PB5上,由TI3CH2輸出PWM控制DS0的亮度。下面介紹通過庫函數(shù)配置該功能的步驟。__ _PWM相關(guān)的函數(shù)設(shè)置在庫函數(shù)文件st3f10xtim.h和st3f10xtim.c中。1)開啟TI3時(shí)鐘以及復(fù)用功能時(shí)鐘,配置引腳PB5為復(fù)用_ _要使用TI3,必須先開啟TI3的時(shí)鐘。這里還要配置引腳PB5為復(fù)用輸出,這是因?yàn)門I3通道2將重映射到引腳PB5上,此時(shí)引腳PB5屬于復(fù)用功能輸出。庫函數(shù)使能TI3時(shí)鐘的方法是_ _ _CP1PeriplockdCP1PerihTI3E_ _ _庫函數(shù)設(shè)置AFIO時(shí)鐘的方法是_ _ _CP2PeriplockdCP2PerihFIOE_ _ _這里簡(jiǎn)單列出GPIO初始化的一行代碼:_ _ _ __PIOIitStructrePI0e=PIO_ _ _ __

使能TI3時(shí)鐘復(fù)用時(shí)鐘使能復(fù)用推挽輸出_2)設(shè)置TI3通道2TI3CH2重映射到引腳PB5上。__因?yàn)門I3CH2默認(rèn)是接在引腳PA7上的,所以需要設(shè)置TI3REMAP為部分重映射(通過AFIO_MAPR配置),讓TI3CH2重映射到引腳PB5上。設(shè)置重映射的庫函數(shù)是__ _ _vidPIOPieapfiguint32tPIOeapFuctionalStateeSt_ _ _ST32只能重映射到特定的端口。第1個(gè)入口參數(shù)可以理解為設(shè)置重映射的類型,如117_TI3部分重映射入口參數(shù)為GPIOPrtilReapTI3。所以,TI3部分重映射的庫函數(shù)實(shí)現(xiàn)方法是__ _ _PIOPieapfigPIOPartialeapTI3E_ _ _3)初始化TI3,設(shè)置TI3的ARR和PSC。開啟了TI3的時(shí)鐘之后,就要設(shè)置ARR和PSC兩個(gè)寄存器的值用于控制輸出PWM的周期。當(dāng)PWM周期太慢(低于50Hz)時(shí),我們就會(huì)明顯感覺到閃爍了。因此,PWM周期在這里不宜設(shè)置得太小,通過TIMTieBasIit()函數(shù)實(shí)現(xiàn),調(diào)用格式為_ __ __ _ __ _ _ _p_ _TIMTieaseStructreTIMPerid=arr 設(shè)置自動(dòng)重裝載值TIMTieaseStructreTIMPr_ __ __ _ __ _ _ _p_ _TIMTieaseStructreTIMlockivisin=0 設(shè)置時(shí)鐘分割TTS=TcktimTIMTieaseStructreTIMtere=TIMtereU 向上計(jì)數(shù)模式TIMTieaseInitTI3TIMTieaseStructre 根據(jù)指定的參數(shù)初始TIx_4)設(shè)置TI3CH2的PWM模式,使能TI3的通道2輸出。___。接下來要設(shè)置TI3CH2為PWM模式(默認(rèn)是凍結(jié)的),因?yàn)镈S0是低電平亮,而我們希望當(dāng)CCR2值小時(shí)DS0就暗,CCR2值大時(shí)DS0就亮,所以要通過配置TI3CCR1的位制TI3CH2模式PWM道過庫函數(shù)TIMOCIit~TIMOCIit設(shè)置的,不同通道的設(shè)置函數(shù)不一樣,這里使用的是通道2,所以使用的函數(shù)是TIMOCIit。__。_ __ _vidTIM2InitTIMTypeef*TIxTIMIitTypeef*TIMInitSt_ __ _TIMOCIitTypeDf結(jié)構(gòu)體的定義如下。_ __ ____ __ __ __ __ ____ __ __ __ __ __int16tTIMeint16tTIMttStateint16tTIMttStateint16tTIMPlseint16tTIMPlarityint16tTIMPlarityint16tTIMIdleStateint16tTIMIdleStateTIMInitTypeef相關(guān)的幾個(gè)成員變量介紹如下。參數(shù)TIMOCode設(shè)置是PWM模式還是輸出比較模式,這里是PWM模式。參數(shù)TIMOttStte設(shè)置比較輸出使能,也就是使能PWM輸出到端口。參數(shù)TIMOCPlrity設(shè)置極性是高還是低。、、其(TIMOtptNtteTIMOCNPlityTIMOIlette和TIMOIlette)是高級(jí)控制定時(shí)器TI1和TI8才用到的。、、要實(shí)現(xiàn)上面提到的場(chǎng)景,方法如下。_ __ _ __ _ _ __ _ __ _ _ __ _TIMInitTypeefTIMInitStrctreTIMInitStructreTIMe=TIMeP2TIMInitStructrettState=TIMttStateEnableTIMInitStructreTIMPlarity=TIMPlarityighTIM2InitTI3TIMInitStructre5)在完成以上設(shè)置之后,需要使能TI3。

選擇PM模式2比較輸出使能輸出極性高初始化TI32_TIMdTI3ELE 使能TI3__6)修改IM3CC2控制占空比。__經(jīng)過以上設(shè)置之后,PWM其實(shí)已經(jīng)開始輸出了,只是其占空比和頻率都是固定的,通過修改TI3CCR2可以控制CH2的輸出占空比,繼而控制DSO的亮度。__修改TI3CCR2占空比的庫函數(shù)是__ _ _p pvidTIMSetmare2TIMTypeef*TIxint16t_ _ _p p_當(dāng)然,其他通道分別有一個(gè)函數(shù)名稱,為TIMStCoprxx=1,2,3,4)。通過以上6個(gè)步驟,我們就可以控制TI3的通道2輸出PWM波形了。_5.3.1 PWM輸出硬件設(shè)計(jì)_本實(shí)例用到的硬件資源有指示燈DS0和定時(shí)器TI3。這里用到了TI3的部分重映射功能,把TI3CH2直接映射到了引腳PB5上,引腳PB5和DS0是直接連接的。_5.3.2 PWM輸出軟件設(shè)計(jì)1.tie.h頭文件_ __ __ _#ifef_TIERH#define_TIERH#incle_ __ __ _vidTI3PMInit16arr16psc#enif2.tie.c函數(shù)_ __ __ __ _#incle"tier"#incl_ __ __ __ _#incle"usart"TI3PM部分初始化PM輸出初始化arr自動(dòng)重裝值sc時(shí)鐘預(yù)分頻數(shù)vidTI3PMInit16arr16pscPIOIitTypeefPIOInitStructreTIMTieaseInitTypeefTIMTieaseStructreTIMInitTypeefTIMInitStrctre119_ _ __ _ _ _ __ _ ____ _ _ _ __ _ _ ___ _ _ __ __ __ __ _ __ _ _ _p_ _ ___ _ _ __ _ _ __ _ __ _ _ _ __ _ ____ _ _ _ __ _ _ ___ _ _ __ __ __ __ _ __ _ _ _p_ _ ___ _ _ __ _ _ __ __ __ ___ __CP2PeriplockdCP2PerihPIB|CP2PeriphFIOELEIOifigIOrtialpI3LE I3射I32- 5設(shè)置該引腳為復(fù)用輸出功能輸出TI32的PM脈沖波形PIOIitStructrePIOPin=PIOPin5 TI32PIOIitStructrePIOe=PIOeFPP 復(fù)用推挽輸出PIOIitStructrePIOSpeed=PIOSpeed50zPIOIitPIBPIOInitStrctre 初始化PIO初始化TI3TIMTieaseStructreTIMPerid=arr

設(shè)置在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重裝載寄存器周期的值TIMTieaseStructreTIMPrescaler=psc 作為TIx時(shí)鐘頻率除數(shù)的預(yù)分頻值TIMTieaseStructreTIMlockivisin=0 設(shè)置時(shí)鐘分割TTS=TcktimTIMTieaseStructreTIMtere=TIMtereU TIM向上計(jì)數(shù)模式TIMTiasIitTI3IMTiasStrctre 根據(jù)TIMTieaseIitStruct中指定的參數(shù)初始化TIx的時(shí)間基數(shù)單位初始化TI32的PM模式TIMIitStrctreTIMe=TIMe2 選擇定時(shí)器模式TIMInitStructreTIMttState=TIMttStateEable 比較輸出使能TIMIitStrctreTIMlarity=TIMlarityigh 輸出極性TIM輸出比較極性高TIM2InitTI3TIMInitStructre 根據(jù)指定的參數(shù)初始化外TI32TIM2rlafigTI3TIMrladEale 使能TI32上的預(yù)裝載寄存器TIMdTI3ELE 使能TI33.in.c函數(shù)__ _ ____ _#incl__ _ ____ _#incle"delay"#incle"key"#incle"sys"#incle"usart"#incle"tier"intainvoid16le0pval=08dir=1elayinit 延時(shí)函數(shù)初始化ICPriorityrfigICPriorityrp2

設(shè)置IC中斷分組2兩位搶占式優(yōu)先級(jí)兩位響應(yīng)優(yōu)先級(jí)artinit115200LEDIitTI3PMInit8990

串口初始化為115200LED端口初始化不分頻PM頻率=72000000900=80kz120__pile__pelays10ifdirle0pval++elsele0val--ifle0pval 300ir=0ifle0pval==0ir=1TIMSetmare2TI3le0pval從死循環(huán)函數(shù)可以看出,將led0pwvl的值設(shè)置為PWM比較值,也就是通過led0pwvl控制PWM的占空比,然后控制led0pwvl的值從0變到300,再從300變到0,如此循環(huán)。因此,DS0的亮度也會(huì)跟著從暗變到亮,然后又從亮變到暗。這里取300是因?yàn)镻WM的輸出占空比達(dá)到這個(gè)值時(shí),LED亮度變化就不大了(雖然最大值可以設(shè)置到899),因此設(shè)計(jì)過大的值是沒有必要的。至此,軟件設(shè)計(jì)就完成了。在完成軟件設(shè)計(jì)之后,將編譯好的文件下載到戰(zhàn)艦ST32開發(fā)板上,觀看其運(yùn)行結(jié)果是否與我們編寫的一致。如果沒有錯(cuò)誤,則看到DS0不停地由暗變到亮,然后又從亮變到暗。每個(gè)過程持續(xù)時(shí)間大概為3s。PWM輸出的項(xiàng)目工程可參照本書數(shù)字資源中的程序代碼。5.4 看門狗定時(shí)器5.4.1 看門狗應(yīng)用介紹。(、微控制器系統(tǒng)的工作常常會(huì)受到來自外界的干擾(如電磁場(chǎng)),有時(shí)會(huì)出現(xiàn)程序跑飛的現(xiàn)象,甚至讓整個(gè)系統(tǒng)陷入死循環(huán)。當(dāng)出現(xiàn)這種現(xiàn)象時(shí),微控制器系統(tǒng)中的看門狗模塊或微控制器系統(tǒng)外的看門狗芯片就會(huì)強(qiáng)制對(duì)整個(gè)系統(tǒng)進(jìn)行復(fù)位,使程序恢復(fù)到正常運(yùn)行狀態(tài)。看門狗實(shí)際上是一個(gè)定時(shí)器,因此也稱為看門狗定時(shí)器,一般有一個(gè)輸入操作,叫作“喂狗”。微控制器正常工作時(shí),每隔一段時(shí)間輸出一個(gè)信號(hào)到“喂狗端”,給看門狗定時(shí)器清零,如果超過規(guī)定的時(shí)間不喂狗(一般在程序跑飛時(shí)),看門狗定時(shí)器就會(huì)超時(shí)溢出,強(qiáng)制對(duì)微控制器進(jìn)行復(fù)位,這樣就可以防止微控制器死機(jī)。看門狗定時(shí)器的作用就是防止程序發(fā)生死循環(huán),或者說在程序跑飛時(shí)能夠進(jìn)行復(fù)位操作ST32微控制器系統(tǒng)自帶了兩個(gè)看門狗,分別是獨(dú)立看門狗IWDG)和窗口看門狗(WWDG)。。(、(ST32F10xxx內(nèi)置的兩個(gè)看門狗提供了更高的安全性時(shí)間的精確性和使用的靈活性。兩個(gè)看門狗可用來檢測(cè)和解決由軟件錯(cuò)誤引起的故障;當(dāng)計(jì)數(shù)器達(dá)到給定的超時(shí)值時(shí),觸發(fā)一個(gè)中斷(僅適用于窗口看門狗)或產(chǎn)生系統(tǒng)復(fù)位。(獨(dú)立看門狗IWDG)由專用的低速時(shí)鐘(LSI)驅(qū)動(dòng),即使主時(shí)鐘發(fā)生故障,它也仍然有效。121窗口看門狗(WWDG)由從APB1時(shí)鐘分頻后得到的時(shí)鐘驅(qū)動(dòng),通過可配置的時(shí)間窗口檢測(cè)應(yīng)用程序非正常的過遲或過早的操作。IWDG適用于那些需要看門狗作為一個(gè)在主程序之外能夠完全獨(dú)立工作,并且對(duì)時(shí)間精度要求較低的場(chǎng)合。WWDG適用于那些要求看門狗在精確計(jì)時(shí)窗口起作用的應(yīng)用程序。5.4.2 獨(dú)立看門狗(獨(dú)立看門狗IWDG)主要性能如下。1)自由運(yùn)行的遞減計(jì)數(shù)器。(2)時(shí)鐘由獨(dú)立的RC振蕩器提供(可在停止和待機(jī)模式下工作)。3)看門狗被激活后,則在計(jì)數(shù)器計(jì)數(shù)至0x000時(shí)產(chǎn)生復(fù)位。獨(dú)立看門狗模塊如圖-10所示。圖-10 獨(dú)立看門狗模塊1.獨(dú)立看門狗時(shí)鐘獨(dú)立看門狗由專用的低速時(shí)鐘(LSI時(shí)鐘)驅(qū)動(dòng),即使主時(shí)鐘發(fā)生故障,它也仍然有效。LSI時(shí)鐘的標(biāo)稱頻率為40kHz,但是由于LSI時(shí)鐘由內(nèi)部RC電路產(chǎn)生,因此LSI時(shí)鐘的頻率約為30~60kHz,所以ST32內(nèi)部獨(dú)立看門狗只適用于對(duì)時(shí)間精度要求比較低的場(chǎng)合,如果系統(tǒng)對(duì)時(shí)間精度要求高,建議使用外置獨(dú)立看門狗芯片。2.獨(dú)立看門狗預(yù)分頻器( _ 、、、、、、、、、、、 、預(yù)分頻器對(duì)LSI時(shí)鐘進(jìn)行分頻之后,作為12位遞減計(jì)數(shù)器的時(shí)鐘輸入。預(yù)分頻系數(shù)由預(yù)分頻寄存器IWDGPR)的PR決定,預(yù)分頻系數(shù)可以取值0123456和7,對(duì)應(yīng)的預(yù)分頻值分別為4816( _ 、、、、、、、、、、、 、3.12位遞減計(jì)數(shù)器12位遞減計(jì)數(shù)器對(duì)預(yù)分頻器的輸出時(shí)鐘進(jìn)行計(jì)數(shù),從復(fù)位值遞減計(jì)算,當(dāng)計(jì)數(shù)到0時(shí),會(huì)產(chǎn)生一個(gè)復(fù)位信號(hào)。下面通過一個(gè)具體的例子對(duì)計(jì)數(shù)器的工作過程進(jìn)行講解。假如寫入IWDGRLR的值為624,啟動(dòng)獨(dú)立看門狗,即向鍵寄存器IWDG_KR)中寫入0xCCCC,則計(jì)數(shù)器從復(fù)位值624開始遞減計(jì)數(shù),當(dāng)計(jì)數(shù)到0時(shí)會(huì)產(chǎn)生一個(gè)復(fù)位信號(hào)。因此,為了避免產(chǎn)122生看門狗復(fù)位,即避免計(jì)數(shù)器遞減計(jì)數(shù)到0,就需要向IWDG_KR的KEY[15:0]寫入0xAAAA,則IWDGRLR的值會(huì)被加載到12位遞減計(jì)數(shù)器,計(jì)數(shù)器就又從復(fù)位值624開始遞減計(jì)數(shù)。4.狀態(tài)寄存器_獨(dú)立看門狗的狀態(tài)寄存器IWDGSR)有兩個(gè)狀態(tài)位,分別是獨(dú)立看門狗計(jì)數(shù)器重裝載值更新狀態(tài)位RVU和獨(dú)立看門狗預(yù)分頻值更新狀態(tài)位PVURVU由硬件置為1,用來指示重裝載值的更新正在進(jìn)行中,當(dāng)VDD域中的重裝載更新結(jié)束后,該位由硬件清零(最多需要5個(gè)40kHz的時(shí)鐘周期),重裝載值只有在RVU被清零后才可以更新。_5.鍵寄存器_IWDGPRIWDGRLR都具有寫保護(hù)功能,要修改這兩個(gè)寄存器的值,必須先向IWDGKR的KEY15:0]寫入0x5555。以不同的值寫入KEY[15:0]將會(huì)打亂操作順序,_寄存器將會(huì)重新被保護(hù)。除了可以向KEY15:0]寫入0x5555允許訪問IWDGPR和IWDG_RLR,也可以向KEY15:0]寫入0xAAAA使計(jì)數(shù)器從復(fù)位值開始重新遞減計(jì)數(shù);還可以向KEY15:0]寫入0xCCCC,啟動(dòng)獨(dú)立看門狗工作。5.4.3 窗口看門狗窗口看門狗(WWDG)通常被用來監(jiān)測(cè)由外部干擾或不可預(yù)見的邏輯條件造成的應(yīng)用程序背離正常的運(yùn)行序列而產(chǎn)生的軟件故障。除非遞減計(jì)數(shù)器的值在T6位變?yōu)?前被刷新,看門狗電路在達(dá)到預(yù)置的時(shí)間周期時(shí),會(huì)產(chǎn)生一個(gè)MCU復(fù)位。在遞減計(jì)數(shù)器達(dá)到窗口寄存器數(shù)值之前,如果7位的遞減計(jì)數(shù)器數(shù)值(在控制寄存器中)被刷新,那么也將產(chǎn)生一個(gè)MCU復(fù)位。這表明遞減計(jì)數(shù)器需要在一個(gè)有限的時(shí)間窗口中被刷新。1.WDG主要特性WWDG主要特性如下。1)可編程的自由運(yùn)行遞減計(jì)數(shù)器。2)條件復(fù)位:當(dāng)遞減計(jì)數(shù)器的值小于0x40時(shí),則產(chǎn)生復(fù)位(若看門狗被啟動(dòng));當(dāng)遞減計(jì)數(shù)器在窗口外被重新裝載時(shí),則產(chǎn)生復(fù)位(若看門狗被啟動(dòng))。3)如果啟動(dòng)了看門狗并且允許中斷,當(dāng)遞減計(jì)數(shù)器等于0x40時(shí)產(chǎn)生早期喚醒中斷(EI),它可以被用于重裝載計(jì)數(shù)器以避免WWDG復(fù)位。2.WDG功能描述如果看門狗被啟動(dòng)(WWDGCR寄存器中的WDGA位被置1),并且當(dāng)7位(T[6:0])遞減計(jì)數(shù)器從0x40翻轉(zhuǎn)到0x3F(T6位清零)時(shí),則產(chǎn)生一個(gè)復(fù)位。如果軟件在計(jì)數(shù)器值大于窗口寄存器中的數(shù)值時(shí)重新裝載計(jì)數(shù)器,將產(chǎn)生一個(gè)復(fù)位。窗口看門狗模塊如圖-11所示。應(yīng)用程序在正常運(yùn)行過程中必須定期地寫入WWDGCR寄存器以防止MCU發(fā)生復(fù)位。只有當(dāng)計(jì)數(shù)器值小于窗口寄存器的值時(shí),才能進(jìn)行寫操作。存儲(chǔ)在WWDGR寄存123圖-11 窗口看門狗模塊器中的數(shù)值必須在0xC0與0xFF之間。1)啟動(dòng)看門狗。在系統(tǒng)復(fù)位后,看門狗總是處于關(guān)閉狀態(tài),設(shè)置WWDGR寄存器的WDGA位能夠開啟看門狗,隨后它不能再被關(guān)閉,除非發(fā)生復(fù)位。2)控制遞減計(jì)數(shù)器處于自由運(yùn)行狀態(tài),即使看門狗被禁止,遞減計(jì)數(shù)器仍繼續(xù)遞減計(jì)數(shù)。當(dāng)看門狗被啟用時(shí),T6位必須被設(shè)置,以防止立即產(chǎn)生一個(gè)復(fù)位。_T5:0]位包含了看門狗產(chǎn)生復(fù)位之前的計(jì)時(shí)數(shù)目;復(fù)位前的延時(shí)在一個(gè)最小值和一個(gè)最大值之間變化,這是因?yàn)閷懭隬WDGCR寄存器時(shí),預(yù)分頻值是未知的。_配置寄存器(WWDGCFR)中包含窗口的上限值,要避免產(chǎn)生復(fù)位,遞減計(jì)數(shù)器必須在其值小于窗口寄存器的數(shù)值并且大于0x3F時(shí)被重新裝載。( _另一個(gè)重裝載計(jì)數(shù)器的方法是利用早期喚醒中斷(EI)。設(shè)置WWDGCFR寄存器中的EI位開啟該中斷。當(dāng)遞減計(jì)數(shù)器到達(dá)0x40時(shí),則產(chǎn)生此中斷,相應(yīng)的中斷服務(wù)程序ISR)可以用來加載計(jì)數(shù)器以防止WWDG復(fù)位。在WWDGSR寄存器中寫0可以清( _中斷。注意:可以用T6位產(chǎn)生一個(gè)軟件復(fù)位(設(shè)置WDGA位為1,T6位為0)。5.4.4 看門狗操作相關(guān)的庫函數(shù)1.獨(dú)立看門狗操作相關(guān)的庫函數(shù)_ _vidIGriteccessdintIGritecce_ _功能描述:用默認(rèn)參數(shù)初始化獨(dú)立看門狗設(shè)置。__ _vidIGSetPrescalint8tIGPrescal__ _功能描述:設(shè)置獨(dú)立看門狗的預(yù)置值。124_ _vidIGSeteloadit16telo_ _功能描述:設(shè)置IWDG的重新裝載值。_vidIGeladtervoid_功能描述:重新裝載設(shè)定的計(jì)數(shù)值。_vidIGEnablevoid_功能描述:使能IWDG。_ _ _FlagStatsIGetFlagStatsuint16tIG_ _ _功能描述:檢測(cè)獨(dú)立看門狗電路的狀態(tài)。2.窗口看門狗操作相關(guān)庫函數(shù)_vidGelnitvid_功能描述:用默認(rèn)參數(shù)初始化窗口看門狗設(shè)置。_ _ _vidGSetPrescalerint32tGPresca_ _ _功能描述:設(shè)置窗口看門狗的預(yù)置值。_ _vidGSetindwalueuint8tinal_ _功能描述:設(shè)置窗口看門狗的值。_vidGEnablelTvid_功能描述:設(shè)置窗口看門狗的提前喚醒中斷。_ _vidGSetteruint8tt_ _功能描述:設(shè)置窗口看門狗的計(jì)數(shù)值。_ _vidGEnableuit8tt_ _功能描述:使能窗口看門狗并裝載計(jì)數(shù)值。_FlagStatsGetFlagStatsvoid_功能描述:檢測(cè)窗口看門狗提前喚醒中斷的標(biāo)志狀態(tài)。_vidGlearFlagvid_功能描述:清除EI的中斷標(biāo)志。5.4.5 獨(dú)立看門狗程序設(shè)計(jì)1.wdg.h頭文件_ __ _#ifef_GH#define_GH#incle"s_ __ _125__vidIGInit8prer16rlrvidIGFeedvi__#enif2.wdg.c文件__ _ __ _______#incle"__ _ __ _______rer分頻數(shù)0~7只有低3位有效分頻因子=4*2prer但最大值只能是256rlr重裝載寄存器值低11位有效時(shí)間計(jì)算大概Tt= 4*2prer*rlr 40svidIGInit8prer16rlrIGritccssdIGritccssEaleIGSetPrescalerrerIGSeteloadrlrIGeladterIGEnable

使能對(duì)IGPR和IGLR寄存器的寫操作設(shè)置IG預(yù)分頻值設(shè)置IG重裝載值按照IG重裝載的值重裝載IG計(jì)數(shù)器使能IG喂獨(dú)立看門狗vidIGFeedvidIGeladter 重裝載_。 _代碼中只有兩個(gè)函數(shù)IWDGIit是獨(dú)立看門狗初始化函數(shù),該函數(shù)有兩個(gè)參數(shù),分別用來設(shè)置預(yù)分頻數(shù)與重裝寄存器的值。通過這兩個(gè)參數(shù)就可以大概知道看門狗復(fù)位的時(shí)間周期為多少了IWDGFed函數(shù)用來喂狗,因?yàn)镾T32的喂狗只需要向鍵值寄存器_。 _0xAAAA即可,也就是調(diào)IWDGRladCoutr函數(shù),所以這個(gè)函數(shù)也很簡(jiǎn)單。3.in.c函數(shù)接下來看看主函數(shù)的代碼。在主程序中先初始化系統(tǒng)代碼,然后啟動(dòng)按鍵輸入和看門狗,在看門狗開啟后馬上點(diǎn)亮LED0(DS0),并進(jìn)入死循環(huán)等待按鍵的輸入。一旦WK_UP有按鍵,則喂狗,否則等待IWDG復(fù)位的到來。__ _ _#incle"l__ _ _#incle"delay"#incle"key"#incle"sys"#incle"usart"#incle"g"intainvoidelayinitICrirityrfigICrirityrp2

延時(shí)函數(shù)初始化設(shè)置

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論