《嵌入式項目開發(fā)與管理》課件-5.初探定時器_第1頁
《嵌入式項目開發(fā)與管理》課件-5.初探定時器_第2頁
《嵌入式項目開發(fā)與管理》課件-5.初探定時器_第3頁
《嵌入式項目開發(fā)與管理》課件-5.初探定時器_第4頁
《嵌入式項目開發(fā)與管理》課件-5.初探定時器_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

初探定時器介紹SQLite數(shù)據(jù)庫初探定時器初探定時器課程導(dǎo)入精確控制計時實現(xiàn)周期性操作定時器承擔(dān)的任務(wù):初探定時器課程導(dǎo)入嵌入式應(yīng)用中:系統(tǒng)調(diào)度實時響應(yīng)精確控制外設(shè)目錄CONTENT定時器簡介計數(shù)功能定時器簡介初探定時器定時器簡介功能豐富性能穩(wěn)定應(yīng)用范圍廣32系列407型號芯片定時器:該型號芯片最多擁有14個的定時器。每個定時器的性能,精度,能耗都

各具特點,適用于不同的應(yīng)用場景。初探定時器定時器簡介定時器種類位數(shù)計數(shù)器模式產(chǎn)生DMA請求捕獲/比較通道互補輸出特殊應(yīng)用場景初探定時器定時器簡介定時器種類位數(shù)計數(shù)器模式產(chǎn)生DMA請求捕獲/比較通道互補輸出特殊應(yīng)用場景基本定時器(TIM6,TIM7)16向上,向下,向上/下可以0無主要應(yīng)用于驅(qū)動DAC初探定時器定時器簡介定時器種類位數(shù)計數(shù)器模式產(chǎn)生DMA請求捕獲/比較通道互補輸出特殊應(yīng)用場景基本定時器(TIM6,TIM7)16向上,向下,向上/下可以0無主要應(yīng)用于驅(qū)動DAC(低級)通用定時器(TIM9~TIM14)16向上沒有2無通用。定時計數(shù),PWM輸出,輸入捕獲,輸出比較初探定時器定時器簡介定時器種類位數(shù)計數(shù)器模式產(chǎn)生DMA請求捕獲/比較通道互補輸出特殊應(yīng)用場景基本定時器(TIM6,TIM7)16向上,向下,向上/下可以0無主要應(yīng)用于驅(qū)動DAC(低級)通用定時器(TIM9~TIM14)16向上沒有2無通用。定時計數(shù),PWM輸出,輸入捕獲,輸出比較(普通)通用定時器(TIM3,TIM4)16向上,向下,向上/下可以4無通用。定時計數(shù),PWM輸出,輸入捕獲,輸出比較初探定時器定時器簡介定時器種類位數(shù)計數(shù)器模式產(chǎn)生DMA請求捕獲/比較通道互補輸出特殊應(yīng)用場景基本定時器(TIM6,TIM7)16向上,向下,向上/下可以0無主要應(yīng)用于驅(qū)動DAC(低級)通用定時器(TIM9~TIM14)16向上沒有2無通用。定時計數(shù),PWM輸出,輸入捕獲,輸出比較(普通)通用定時器(TIM3,TIM4)16向上,向下,向上/下可以4無通用。定時計數(shù),PWM輸出,輸入捕獲,輸出比較(高級)通用定時器(TIM2,TIM5)32向上,向下,向上/下可以4無通用。定時計數(shù),PWM輸出,輸入捕獲,輸出比較初探定時器定時器簡介定時器種類位數(shù)計數(shù)器模式產(chǎn)生DMA請求捕獲/比較通道互補輸出特殊應(yīng)用場景基本定時器(TIM6,TIM7)16向上,向下,向上/下可以0無主要應(yīng)用于驅(qū)動DAC(低級)通用定時器(TIM9~TIM14)16向上沒有2無通用。定時計數(shù),PWM輸出,輸入捕獲,輸出比較(普通)通用定時器(TIM3,TIM4)16向上,向下,向上/下可以4無通用。定時計數(shù),PWM輸出,輸入捕獲,輸出比較(高級)通用定時器(TIM2,TIM5)32向上,向下,向上/下可以4無通用。定時計數(shù),PWM輸出,輸入捕獲,輸出比較特殊定時器(TIM1,TIM8)16向上,向下,向上/下可以4有帶可編程死區(qū)的互補輸出初探定時器定時器功能自動裝載計數(shù)功能(16/32位,向上/向下)外部獨立通道功能(輸入捕獲

、輸出比較等)計數(shù)功能初探定時器計數(shù)功能

具體稱為“自動裝載計數(shù)”,需要我們先為計數(shù)器設(shè)置一個初始值,隨后定時器開始從這一初始值進(jìn)行加法操作。當(dāng)計數(shù)值達(dá)到最大值時,自動裝載計數(shù)器會立即重新加載之前設(shè)定的初始值,然后定時器繼續(xù)從這個新加載的值開始計數(shù),形成一個循環(huán)。時間計數(shù)值初探定時器計數(shù)功能計數(shù)器初始值:0計數(shù)器最大值:2中斷中斷中斷02中斷01計數(shù)器當(dāng)前值:定時器向上計數(shù)過程初探定時器計數(shù)功能計數(shù)器初始值:0計數(shù)器最大值:2時間計數(shù)值中斷中斷中斷中斷0計數(shù)器當(dāng)前值:高度由什么決定?單元格的時間長度?兩次重裝載間的時間間隔是多少?單位時間*

累加次數(shù)課程小結(jié)初探定時器定時器工作頻率計數(shù)器設(shè)置的初始值重裝載值初探定時器計數(shù)功能定時器工作頻率。中斷觸發(fā)的時間間隔計數(shù)器設(shè)置的初始值。最大值(重裝載值)。初探定時器計數(shù)功能重裝載寄存器計數(shù)器定時器工作頻率分頻系數(shù)定時器參考頻率課程小結(jié)

請仔細(xì)閱讀“用戶手冊”中定時器章節(jié)的介紹,并參與課程討論。初探定時器實踐計數(shù)功能配置介紹SQLite數(shù)據(jù)庫實踐計數(shù)功能配置目錄CONTENT計時功能參數(shù)以及計算計數(shù)功能寄存器設(shè)置計時功能參數(shù)以及計算實踐計數(shù)功能配置計時功能參數(shù)以及計算

計數(shù)器能夠持續(xù)產(chǎn)生定時的中斷,這種定時的中斷有什么作用呢?實踐計數(shù)功能配置計時功能參數(shù)以及計算時間計數(shù)值cnt:1cnt:2cnt:3cnt:4變量cnt實踐計數(shù)功能配置計時功能參數(shù)以及計算工作頻率(Fcnt):計數(shù)器累加速度參考頻率(Fr):內(nèi)核提供時鐘源分頻系數(shù)(PSC):調(diào)控工作頻率Fcnt=Fr÷PSC實踐計數(shù)功能配置計時功能參數(shù)以及計算100Hz=500Hz÷5Fcnt=Fr÷PSC

如果參考頻率是500hz,分頻系數(shù)是5,那么工作頻率就是100hz。100hz表示計數(shù)器可以在一秒內(nèi)做100次累加操作。實踐計數(shù)功能配置計時功能參數(shù)以及計算Tgap:計數(shù)器中斷間隔AR:重裝載值(計數(shù)器最大值)Tgap=(AR-0)÷Fcnt實踐計數(shù)功能配置計時功能參數(shù)以及計算Tgap=(AR-0)÷FcntTgap=1000次÷100次/秒

AR值為1000,那就是說計數(shù)器從0開始需要累加1000次才能觸發(fā)重裝載。若現(xiàn)在工作頻率是100hz,即每秒鐘可以累加100次,現(xiàn)在求多長時間觸發(fā)一次重裝載呢?實踐計數(shù)功能配置計時功能參數(shù)以及計算Fcnt=Fr÷PSCTgap=(AR-0)÷FcntTgap=AR*PSC÷Fr實踐計數(shù)功能配置計時功能參數(shù)以及計算Fcnt=Fr÷PSCTgap=(AR-0)÷FcntTgap=AR*PSC÷Fr

現(xiàn)在參考頻率Fr分頻系數(shù)PSC是固定的,需要我們實現(xiàn)一個某級別的時間戳定時器。AR=Tgap*Fr÷PSC實踐計數(shù)功能配置寄存器設(shè)置目標(biāo):定時器2(Timer2)時鐘使能:定時器2的參考頻率是APB1頻率。實踐計數(shù)功能配置寄存器設(shè)置設(shè)置分頻系數(shù)PSC:實踐計數(shù)功能配置寄存器設(shè)置自動重裝載寄存器ARR:實踐計數(shù)功能配置寄存器設(shè)置定時器更新中斷使能:實踐計數(shù)功能配置寄存器設(shè)置定時器啟動:開關(guān)就在定時器控制寄存器的第0位上課程小結(jié)定時器設(shè)置的關(guān)鍵過程。核心參數(shù)重裝載值和分頻系數(shù)的配比關(guān)系。實踐計數(shù)功能配置移動應(yīng)用開發(fā)實踐秒級時間戳定時器結(jié)合前課實踐內(nèi)容,制作一個秒級時間戳定時器實踐秒級時間戳定時器實踐秒級時間戳定時器實踐秒級時間戳定時器實踐秒級時間戳定時器文字可替換目錄CONTENT秒級時間戳初始化中斷回調(diào)函數(shù)設(shè)計延時函數(shù)設(shè)計秒級時間戳初始化定時器實現(xiàn)秒級時間戳設(shè)計秒級延時邏輯驗證效果定時器選用Timer2APB1/2設(shè)備總線時鐘為84MHz項目目標(biāo)項目要求已知環(huán)境秒級時間戳初始化AR=Tgap*Fr÷PSC參考頻率(時鐘):APB1(84M)定時器參考頻率Fr=84MHz計數(shù)器中斷時隔Tgap=1S

AR*PSC=Tgap*FrAR*PSC=1s*84*106t/sAR*PSC=84*106t秒級時間戳初始化秒級時間戳初始化計數(shù)最大值:232-1分頻系數(shù)最大值:216AR*PSC=84*106

t秒級時間戳初始化AR*PSC=84*106tAR*PSC=84*106

t計數(shù)最大值:232-1分頻系數(shù)最大值:216秒級時間戳初始化PSC:1000AR:84000AR*PSC=84*106

t秒級時間戳初始化AR*PSC=84*106tPSC:1000AR:84000寄存器設(shè)置目標(biāo):定時器2(Timer2)時鐘使能RCC->APB1ENR

|=

1<<0;秒級時間戳初始化秒級時間戳初始化目標(biāo):定時器2(Timer2)時鐘使能RCC->APB1ENR

|=

1<<0;寄存器設(shè)置秒級時間戳初始化秒級時間戳初始化設(shè)置分頻系數(shù)PSCTIM2->PSC=1000-1;設(shè)置分頻系數(shù)PSCTIM2->PSC=1000-1;寄存器設(shè)置自動重裝載寄存器ARRTIM2->ARR=84000-1;秒級時間戳初始化秒級時間戳初始化自動重裝載寄存器ARRTIM2->ARR=84000-1;寄存器設(shè)置TIM2->DIER|=1<<0;定時器控制寄存器TIM2->CR1|=1<<0; 寄存器設(shè)置定時器更新中斷使能定時器更新中斷使能TIM2->DIER|=1<<0;定時器控制寄存器TIM2->CR1|=1<<0;中斷回調(diào)函數(shù)設(shè)計寄存器設(shè)置中斷回調(diào)函數(shù)設(shè)置voidTIM2_IRQHandler(void){

}中斷回調(diào)函數(shù)設(shè)計32芯片啟動文件定義新函數(shù)寄存器設(shè)置中斷回調(diào)函數(shù)設(shè)置voidTIM2_IRQHandler(void){

if(TIM2->SR&0x0001)//重裝載中斷發(fā)生 { TIM2->SR&=~(1<<0);//清中斷

Second++; }}中斷回調(diào)函數(shù)設(shè)計U32Second=0;U32Second=0;秒級時間戳紀(jì)錄秒值變量延時函數(shù)設(shè)計寄存器設(shè)置延時函數(shù)設(shè)計與測試voidMy_Delay_S(u32s){ u32tmp=Second; while(1) { if(Second-tmp>=s)

return; }}延時函數(shù)設(shè)計延時秒值寄存器設(shè)置延時函數(shù)設(shè)計與測試voidMy_Delay_S(u32s){ u32tmp=Second; while(1) { if(Second-tmp>=s)

return; }}延時函數(shù)設(shè)計保存到tmp寄存器設(shè)置延時函數(shù)設(shè)計與測試voidMy_Delay_S(u32s){ u32tmp=Second; while(1) { if(Second-tmp>=s)

return; }}延時函數(shù)設(shè)計執(zhí)行循環(huán)寄存器設(shè)置延時函數(shù)設(shè)計與測試while(1){ printf("Second:%d\n",Second); My_Delay_S(1);}延時函數(shù)設(shè)計實踐秒級時間戳定時器實踐秒級時間戳定時器課程小結(jié)秒級時間戳毫秒級時間戳微秒級時間戳移動應(yīng)用開發(fā)狀態(tài)機延時操作狀態(tài)機延時操作狀態(tài)機延時操作課程導(dǎo)入如何實現(xiàn)以下三個任務(wù):狀態(tài)機延時操作狀態(tài)機延時操作課程導(dǎo)入任務(wù)一、實現(xiàn)兩秒打印一個信息任務(wù)二、實現(xiàn)三秒打印一個信息任務(wù)三、一個程序?qū)崿F(xiàn)前兩項任務(wù)學(xué)習(xí)目標(biāo)狀態(tài)編程的原理和思路狀態(tài)編程實現(xiàn)課前任務(wù)狀態(tài)編程的原理和思路狀態(tài)編程的原理和思路while(1){ My_Delay_S(3); printf(“任務(wù)2\n");}while(1){ My_Delay_S(2); printf(“任務(wù)1\n");}狀態(tài)編程的原理和思路while(1){ My_Delay_S(3); printf(“任務(wù)2\n");}while(1){ My_Delay_S(2); printf(“任務(wù)1\n");}while(1){ My_Delay_S(2); printf(“任務(wù)1\n"); My_Delay_S(3); printf(“任務(wù)2\n");}時間軸任務(wù)1延時2秒任務(wù)2延時3秒任務(wù)1延時2秒任務(wù)2延時3秒任務(wù)2打印狀態(tài)編程的原理和思路任務(wù)1打印任務(wù)2打印任務(wù)1打印時間軸任務(wù)1延時2秒任務(wù)2延時3秒任務(wù)1延時2秒任務(wù)2延時3秒任務(wù)1打印任務(wù)2打印任務(wù)1打印voidMy_Delay_S(u32s){ u32tmp=Second; while(1) { if(Second-tmp>=s)

return; }}問題的關(guān)鍵:如何把CPU從一個耗時任務(wù)中解放出來?問題的關(guān)鍵:如何把CPU從一個耗時任務(wù)中解放出來?狀態(tài)編程的原理和思路延時函數(shù)平臺不帶任何系統(tǒng)延時函數(shù)延時函數(shù)平臺不帶任何系統(tǒng)狀態(tài)機延時操作狀態(tài)機延時操作課程導(dǎo)入問題的關(guān)鍵:如何把CPU從一個耗時任務(wù)中解放出來?狀態(tài)機延時操作狀態(tài)機延時操作課程導(dǎo)入解決方法:1、在適當(dāng)時間退出任務(wù)。2、執(zhí)行任務(wù)能進(jìn)入之前退出的位置。狀態(tài)機延時操作狀態(tài)機延時操作課程導(dǎo)入狀態(tài)編程:需要為任務(wù)設(shè)置有不同的狀態(tài)針對不同的狀態(tài)進(jìn)行操作編程狀態(tài)機延時操作狀態(tài)機延時操作依據(jù)什么來劃分階段?狀態(tài)編程實現(xiàn)課前任務(wù)while(1){ My_Delay_S(2); 等待階段 printf(“任務(wù)1\n”); 打印操作}快速操作耗時操作快速操作1狀態(tài)2狀態(tài)3狀態(tài)X點Y點狀態(tài)編程實現(xiàn)課前任務(wù)時間軸任務(wù)1延時2秒任務(wù)2延時3秒任務(wù)1延時2秒任務(wù)2延時3秒任務(wù)1打印任務(wù)2打印任務(wù)1打印while(1){ My_Delay_S(2); 等待階段 printf(“任務(wù)1\n”); 打印操作}while(1){ u32tmp=Second; while(1) { if(Second-tmp>=2) { return; } } printf(“任務(wù)1\n”); 打印操作}狀態(tài)編程實現(xiàn)課前任務(wù)X點Y點while(1){ My_Delay_S(2); 等待階段 printf(“任務(wù)1\n”); 打印操作}狀態(tài)編程實現(xiàn)課前任務(wù)X點Y點while(1){ u32tmp=Second; while(1) { if(Second-tmp>=2) { return; } } printf(“任務(wù)1\n”); 打印操作}while(1){ My_Delay_S(2); 等待階段 printf(“任務(wù)1\n”); 打印操作}狀態(tài)編程實現(xiàn)課前任務(wù)X點Y點while(1){ u32tmp=Second; while(1) { if(Second-tmp>=2) { return; } } printf(“任務(wù)1\n”); 打印操作}while(1){ My_Delay_S(2); 等待階段 printf(“任務(wù)1\n”); 打印操作}狀態(tài)編程實現(xiàn)課前任務(wù)X點Y點while(1){ u32tmp=Second; while(1) { if(Second-tmp>=2) { return; } } printf(“任務(wù)1\n”); 打印操作}狀態(tài)編程實現(xiàn)課前任務(wù)X點Y點while(1){ u32tmp=Second; while(1) { if(Second-tmp>=2) { return; } } printf(“任務(wù)1\n”); 打印操作}狀態(tài)1記錄延時前的時間戳狀態(tài)2無限循環(huán)并查詢時間間隔狀態(tài)3打印信息intState=1;u32tmp;while(1){ if(State==1)

狀態(tài)1 elseif(State==2)

狀態(tài)2 else

狀態(tài)3}狀態(tài)編程實現(xiàn)課前任務(wù)tmp=Second;State=2;intState=1;u32tmp;while(1){ if(State==1)

狀態(tài)1 elseif(State==2)

狀態(tài)2 else

狀態(tài)3}狀態(tài)編程實現(xiàn)課前任務(wù)if(Second–tmp>2) State=3;intState=1;u32tmp;while(1){ if(State==1)

狀態(tài)1 elseif(State==2)

狀態(tài)2 else

狀態(tài)3}狀態(tài)編程實現(xiàn)課前任務(wù)printf(“任務(wù)1\n”);Stat

溫馨提示

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

評論

0/150

提交評論