嵌入式系統(tǒng)導(dǎo)論(第2版) 課件 第9、10章 STM32的定時器接口、STM32的模擬接口_第1頁
嵌入式系統(tǒng)導(dǎo)論(第2版) 課件 第9、10章 STM32的定時器接口、STM32的模擬接口_第2頁
嵌入式系統(tǒng)導(dǎo)論(第2版) 課件 第9、10章 STM32的定時器接口、STM32的模擬接口_第3頁
嵌入式系統(tǒng)導(dǎo)論(第2版) 課件 第9、10章 STM32的定時器接口、STM32的模擬接口_第4頁
嵌入式系統(tǒng)導(dǎo)論(第2版) 課件 第9、10章 STM32的定時器接口、STM32的模擬接口_第5頁
已閱讀5頁,還剩68頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

嵌入式系統(tǒng)導(dǎo)論主講教師:第9章STM32的定時器接口本章內(nèi)容提要9.1系統(tǒng)時鐘(SysTick)9.2STM32看門狗9.3STM32定時器(TIMx)9.4STM32實時時鐘(RTC)定時器基于計數(shù)器電路實現(xiàn)STM32微控制器的定時器接口系統(tǒng)時鐘(SysTick)看門狗WatchDog獨立看門狗(IWDG)獨窗口看門狗(WWDG)通用定時器基本定時器(TIM6和TIM7)通用定時器(TIM2、TIM3、TIM4和TIM5)高級控制定時器(TIM1和TIM8)實時時鐘RTC9.1系統(tǒng)時鐘(SysTick)Corte-M3在內(nèi)核包含的簡單定時器該定時器的時鐘源可以來自CM3內(nèi)部時鐘(FCLK),或CM3外部時鐘(STCLK)在STM32微控制器中,SysTick的時鐘源可以是:“AHB時鐘”、或者“AHB時鐘/8”SysTick定時器是一個24位遞減計數(shù)器設(shè)置初值、允許計數(shù),每來一個時鐘,計數(shù)值減1計數(shù)值減為0,計數(shù)器被自動載入初值、繼續(xù)計數(shù)同時內(nèi)部標(biāo)志COUNTFLAG被置位、并觸發(fā)中斷SysTick中斷連接中斷控制器NVIC,異常號為15SysTick寄存器SysTick是CM3內(nèi)核的定時單元參閱“Cortex-M3一般用戶手冊”(不是“STM32參考手冊”)寄存器縮寫寄存器中文名稱SysTick_CTRL控制和狀態(tài)寄存器SysTick_LOAD重載值寄存器SysTick_VAL當(dāng)前值寄存器SysTick_CALIB校準(zhǔn)值寄存器控制和狀態(tài)寄存器(SysTick_CTRL)用于控制SysTick工作和獲取計數(shù)歸0的狀態(tài)名稱功能ENABLE計數(shù)器使能:0=禁止SysTick定時器,1=允許SysTick定時器TICKINTSysTick異常請求使能:0=不觸發(fā)異常請求,1=觸發(fā)異常請求(中斷)CLKSOURCE選擇時鐘源:0=外部時鐘,1=處理器時鐘COUNTFLAG計數(shù)狀態(tài):上次讀取后定時器計數(shù)到0,返回1SysTick寄存器編程(1)禁止SysTick定時器(因為SysTick可能已經(jīng)被允許了)

SysTick->CTRL=0;//關(guān)閉SysTick(2)寫入重載值

SysTick->LOAD=256-1;//假設(shè)計數(shù)值為256(3)清除當(dāng)前值為0(向當(dāng)前值寄存器SysTick_VAL寫入任何值)

SysTick->VAL=0;(4)允許SysTick定時器

SysTick->CTRL=5;//使用處理器時鐘SysTick結(jié)構(gòu)定義系統(tǒng)時鐘SysTick屬于Cortex內(nèi)核部件驅(qū)動程序定義在core_cm3.h(不是core_cm3.c)文件SysTick寄存器的結(jié)構(gòu)類型

typedef

struct {__IOuint32_tCTRL; __IOuint32_tLOAD; __IOuint32_tVAL; __Iuint32_tCALIB; }SysTick_Type;有關(guān)地址定義的語句如下:

#defineSCS_BASE(0xE000E000) #defineSysTick_BASE(SCS_BASE+0x0010) #defineSysTick((SysTick_Type*)SysTick_BASE)SysTick配置函數(shù)_STATIC__INLINEuint32_tSysTick_Config(uint32_tticks){if((ticks-1UL)>SysTick_LOAD_RELOAD_Msk){return(1UL); }

SysTick->LOAD=(uint32_t)(ticks-1UL);NVIC_SetPriority(SysTick_IRQn,(1UL<<__NVIC_PRIO_BITS)-1UL);

SysTick->VAL=0UL;

SysTick->CTRL=SysTick_CTRL_CLKSOURCE_Msk|

SysTick_CTRL_TICKINT_Msk|

SysTick_CTRL_ENABLE_Msk;return(0UL);}初始化、并啟動SysTick計數(shù)器和中斷設(shè)置每隔ticks脈沖引起一次中斷配置成功返回0值,不成功則返回1值SysTick_Config函數(shù)-11、將ticks參數(shù)作為重載值賦給重載值寄存器(SysTick_LOAD)定時時間T是:T=ticks×(1/f)秒f是時鐘源的時鐘頻率2、使用NVIC_SetPriority函數(shù) 配置系統(tǒng)時鐘中斷(SysTickIRQ)為15如果要改變SysTick中斷的優(yōu)先級,使用

NVIC_SetPriority(SysTick_IRQn,...)(定義在core_cm3.h文件)SysTick_Config函數(shù)-23、復(fù)位SysTick計數(shù)器(清零)4、設(shè)置控制和狀態(tài)寄存器(SysTick_CTRL)允許計數(shù)和中斷選擇處理器時鐘源(STM32是“AHB時鐘”)如果使用STM32的“AHB時鐘/8”直接編程控制和狀態(tài)寄存器(SysTick_CTRL) 設(shè)置CLKSOURCE(D2位)為0使用STM32庫的SysTick_CLKSourceConfig函數(shù)(在misc.c文件中)SysTick應(yīng)用示例:精確定時SysTick可服務(wù)于操作系統(tǒng)也可用于精確定時、時間測量等系統(tǒng)時鐘72MHz,最小的計時單位(時鐘周期)(1/72)×10-6秒、即72分之一的微秒結(jié)合GPIO控制LED燈的示例【例9-1】使用SysTick精確的硬件定時主程序需要對SysTick進(jìn)行初始化例如配置1ms產(chǎn)生一次中斷SysTick初始化主程序SysTick_Config函數(shù)配置1ms產(chǎn)生一次中斷

if(SysTick_Config(SystemCoreClock/1000)){while(1);/*沒有初始化成功,死循環(huán)*/}

SysTick->CTRL&=~1;/*關(guān)閉SysTick定時器*/SystemCoreClock常量表示系統(tǒng)主時鐘頻率開發(fā)板的時鐘頻率是最高72MHz定時時間(SystemCoreClock與f相同):

T=(SystemCoreClock/1000)×(1/f)秒

=10-3

秒=1毫秒=1ms硬件定時的延時函數(shù)定義TimingDelay為靜態(tài)變量每次進(jìn)入函數(shù)時,讓其保持上次退出的數(shù)值 這個變量的改變是在中斷服務(wù)程序中static__IOuint32_tTimingDelay=0;voidDelay_ms(__IOuint32_tnTime){TimingDelay=nTime;/*

nTime是延時時間

*/

SysTick->CTRL|=1;/*

啟動SysTick定時器*/

while(TimingDelay!=0);}

voidDecrement(void){if(TimingDelay!=0)TimingDelay--;}中斷服務(wù)程序voidSysTick_Handler(void){Decrement(); //每次中斷,TimingDelay減1}延時500ms的延時函數(shù)調(diào)用

Delay_ms(500);9.2STM32看門狗WatchDog看門狗是嵌入式應(yīng)用系統(tǒng)的一個安全機(jī)制常用于防止程序失去控制,避免系統(tǒng)導(dǎo)致嚴(yán)重后果各種干擾可能影響程序的正常執(zhí)行,導(dǎo)致“跑飛”如果系統(tǒng)在規(guī)定的時間內(nèi)沒有執(zhí)行特定的“喂狗”程序,看門狗就會報警,系統(tǒng)可以及時糾正錯誤看門狗機(jī)制的實質(zhì)是定時器,當(dāng)計數(shù)器達(dá)到給定的超時值時,觸發(fā)一個中斷或產(chǎn)生系統(tǒng)復(fù)位STM32微控制器支持兩個看門狗獨立看門狗(IWDG)窗口看門狗(WWDG)9.2.1獨立看門狗(IWDG)由專門的低速時鐘(LSI)驅(qū)動即使系統(tǒng)主時鐘發(fā)生故障也仍然有效適合看門狗作為獨立于主程序之外的處理進(jìn)程、對時間精度要求不高的應(yīng)用場合一個獨立運行的12位減量計數(shù)器啟動后,當(dāng)計數(shù)值減量為0,導(dǎo)致系統(tǒng)復(fù)位Independentwatchdog獨立看門狗結(jié)構(gòu)寄存器縮寫寄存器英文名稱寄存器中文名稱IWDG_KRKeyRegister關(guān)鍵寄存器IWDG_PRPrescalerRegister預(yù)分頻寄存器IWDG_RLRReloadRegister重載寄存器IWDG_SRStatusRegister狀態(tài)寄存器獨立看門狗的啟動和重載啟動獨立看門狗向關(guān)鍵寄存器(IWDG_KR)寫入數(shù)值0xCCCC計數(shù)器從復(fù)位值0xFFF開始減量計數(shù)當(dāng)計數(shù)值減至結(jié)束值0x000時,觸發(fā)復(fù)位沒有及時“喂狗”導(dǎo)致系統(tǒng)復(fù)位、進(jìn)入初始狀態(tài)重載獨立看門狗(喂狗)向關(guān)鍵寄存器(IWDG_KR)寫入關(guān)鍵值0xAAAA重載寄存器(IWDG_RLR)內(nèi)的數(shù)值被重新加載到計數(shù)器,這樣就防止了看門狗復(fù)位及時進(jìn)行了“喂狗”,系統(tǒng)可以正常運行IWDG寄存器關(guān)鍵寄存器(IWDG_KR)在待機(jī)模式被復(fù)位為0只能寫入0xCCCC(啟動看門狗)、0xAAAA(重載計數(shù)值)和0x5555(允許訪問預(yù)分頻和重載寄存器)預(yù)分頻寄存器(IWDG_PR)表示8種分頻系數(shù)(4/8/16/32/64/128/256)重載寄存器(IWDG_RLR)用于寫入重載的計數(shù)初值(12位計數(shù)器)可寫入編碼0x000~0xFFF依次表示1~4096計數(shù)值待機(jī)模式會將其復(fù)位為最大值0xFFFIWDG寄存器寄存器縮寫寄存器英文名稱寄存器中文名稱IWDG_KRKeyRegister關(guān)鍵寄存器IWDG_PRPrescalerRegister預(yù)分頻寄存器IWDG_RLRReloadRegister重載寄存器IWDG_SRStatusRegister狀態(tài)寄存器IWDG定時時間分頻系數(shù)最小定時(ms)最大定時(ms)40.1409.680.2819.2160.41638.4320.83276.8641.66553.61283.213107.22566.426214.4LSI=40KHzIWDG函數(shù)設(shè)置重載寄存器值voidIWDG_SetReload(uint16_tReload)

設(shè)置預(yù)分頻系數(shù)voidIWDG_SetPrescaler(uint8_tIWDG_Prescaler)將重載寄存器的值重新裝載給IWDG計數(shù)器voidIWDG_ReloadCounter(void)允許或禁止對重載寄存器和重載寄存器寫入voidIWDG_WriteAccessCmd(uint16_tIWDG_WriteAccess)允許IWDG(寫入重載寄存器和重載寄存器被禁止)voidIWDG_Enable(void)檢測IWDG標(biāo)志置位與否FlagStatus

IWDG_GetFlagStatus(uint16_tIWDG_FLAG)RCC標(biāo)志檢測和清除函數(shù)RCC_GetFlagStatus函數(shù)獲得系統(tǒng)復(fù)位原因

FlagStatus

RCC_GetFlagStatus(uint8_tRCC_FLAG)參數(shù)RCC_FLAG表示要檢測的標(biāo)志,例如復(fù)位標(biāo)志有RCC_FLAG_PINRST(引腳復(fù)位)RCC_FLAG_PORRST(電源開/電源關(guān)復(fù)位)RCC_FLAG_SFTRST(軟件復(fù)位)RCC_FLAG_IWDGRST(IWDG復(fù)位)RCC_FLAG_WWDGRST(WWDG復(fù)位)RCC_FLAG_LPWRRST(低電源電壓復(fù)位)FlagStatus返回置位(SET),表示發(fā)生了檢測的復(fù)位返回復(fù)位(RESET),表示沒有發(fā)生檢測的復(fù)位RCC_ClearFlag函數(shù)清除(復(fù)位)上述所有復(fù)位標(biāo)志

voidRCC_ClearFlag(void)【例9-2】IWDG應(yīng)用示例:IWDG復(fù)位啟用獨立看門狗,設(shè)置約10秒的喂狗間隔用戶在10秒內(nèi)按下KEY1按鍵(需要每隔10秒內(nèi),連續(xù)按下)、讓系統(tǒng)進(jìn)行喂狗如果在10s內(nèi)“喂狗”、LED3燈常亮,表示正常用戶(連續(xù))按下KEY1間隔超過10s程序沒有及時“喂狗”,系統(tǒng)將復(fù)位復(fù)位后,系統(tǒng)重新執(zhí)行程序檢測到是由于IWDG導(dǎo)致的復(fù)位,LED2指示燈亮如果是其他原因?qū)е碌膹?fù)位,LED1指示燈亮IWDG初始化配置voidIWDG_Config(void){//允許看門狗寄存器寫入IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//時鐘分頻系數(shù)256IWDG_SetPrescaler(IWDG_Prescaler_256);//喂狗時間10s,設(shè)置計數(shù)值1562.5IWDG_SetReload(1563);//寫入計數(shù)值(喂狗)IWDG_ReloadCounter();//允許IWDG看門狗IWDG_Enable();}IWDG主程序-1int

main(void){KEY_Config();

LED_Config();IWDG_Config();LED_ON_all();Delay(0x990000);//LED等亮一會表示系統(tǒng)復(fù)位

LED_OFF_all();//LED燈全滅IWDG主程序-2//

如果上次復(fù)位是IWDG復(fù)位,LED2亮if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST)==SET)

{LED_ON(2);

Delay(0x990000); //延時,讓用戶觀察到

LED_OFF(2);

RCC_ClearFlag();

}//如果上次復(fù)位是不是IWDG復(fù)位,LED1亮else

{LED_ON(1); Delay(0x990000); //延時,讓用戶觀察到

LED_OFF(1); }IWDG主程序-3//檢測按鍵,適時喂狗while(1)

{if(KEY_scan(1)==

0){while(KEY_scan(1)==0);

IWDG_ReloadCounter();

LED_ON(3); Delay(0x990000); LED_OFF(3);

}}}9.2.3窗口看門狗(WWDG)時鐘由APB1時鐘分頻后得到具有可配置的時間窗口用于檢測應(yīng)用程序過遲或過早的非正常操作適合在精確計時窗口起作用的應(yīng)用程序一個獨立運行的可編程減量計數(shù)器啟動后,就設(shè)置了一個刷新時間間隔(窗口)在這個時間窗口內(nèi)寫入計數(shù)值,才保證系統(tǒng)不復(fù)位“喂狗”時間既不能太早、也不能太晚(或不喂)Windowwatchdog窗口看門狗結(jié)構(gòu)窗口看門狗的定時時間【例9-3】WWDG應(yīng)用示例:適時喂狗啟用WWDG,設(shè)置約43~58ms的喂狗時間窗口系統(tǒng)如果在刷新時間窗口內(nèi)“喂狗”LED2燈閃爍,表示正常工作使用按鍵KEY1按下模擬“喂狗”時間“喂狗”時間太早或時間太晚系統(tǒng)會復(fù)位讓LED1燈閃爍啟用提前喚醒中斷EWI當(dāng)喂狗時間太晚進(jìn)入EWI中斷服務(wù)程序讓LED3燈閃爍WWDG初始化函數(shù)voidWWDG_Config(void){RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);WWDG_SetPrescaler(WWDG_Prescaler_8);WWDG_SetWindowValue(0x50);WWDG_Enable(0x7F);WWDG_ClearFlag();WWDG_EnableIT();}0x50=0x7F–0x2F啟用WWDG提前喚醒中斷NVIC初始化函數(shù)

……NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn; ……WWDG中斷程序voidWWDG_IRQHandler(void){LED_On(3);//LED3燈閃爍1次

Delay(0xffff);LED_Off(3); WWDG_ClearFlag();//清除WWDG中斷標(biāo)志位

}WWDG應(yīng)用的主程序

WWDG_Config();//配置WWDGwhile(1){if(KEY_scan(1)==0){while(KEY_scan(1)==0); //等待按鍵結(jié)束

WWDG_SetCounter(0x7F);LED_On(2);

//喂狗時間合適時,LED2燈閃爍1次

Delay(0xffff);LED_Off(2); }}9.3STM32定時器2個基本定時器(TIM6、TIM7)主要用于產(chǎn)生數(shù)字模擬轉(zhuǎn)換器(DAC)的觸發(fā)信號也可用于普通的16位時基計數(shù)器4個普通定時器(TIM2-TIM5)能夠測量輸入信號的脈沖長度(輸入捕獲功能)產(chǎn)生需要的輸出波形(輸出比較、脈沖寬度調(diào)制PWM脈沖和單脈沖輸出等)2個高級控制定時器(TIM1、TIM8)能夠產(chǎn)生3對PWM互補輸出的高級定時器常用于三相電機(jī)的驅(qū)動基本定時器(TIM6和TIM7)結(jié)構(gòu)基本定時器(TIM6和TIM7)工作原理分頻系數(shù)為2,計數(shù)值36基本定時器應(yīng)用示例:周期性定時中斷【例9-4】周期性定時中斷,控制LED燈閃爍利用基本定時器(TIM6)的基本定時功能產(chǎn)生周期性定時中斷控制LED燈每隔1秒閃爍一次定時時間=(計數(shù)值+1)×(預(yù)分頻值+1)÷定時器時鐘1s=2000×36000÷72M基本定時器的初始化配置voidTIM6_Config(void){TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);TIM_TimeBaseStructure.TIM_Prescaler=36000-1;TIM_TimeBaseStructure.TIM_Period=2000-1;TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseStructure.TIM_RepetitionCounter=0;

TIM_TimeBaseInit(TIM6,&TIM_TimeBaseStructure);

TIM_UpdateRequestConfig(TIM6,TIM_UpdateSource_Regular);

TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);TIM_Cmd(TIM6,ENABLE);}基本定時器的中斷服務(wù)程序voidTIM6_IRQHandler(void){if(TIM_GetITStatus(TIM6,TIM_IT_Update)==SET){TIM_ClearITPendingBit(TIM6,TIM_FLAG_Update);GPIOB->ODR^=GPIO_Pin_0; //LED1燈反轉(zhuǎn)

GPIOF->ODR^=GPIO_Pin_7; //LED2燈反轉(zhuǎn)

GPIOF->ODR^=GPIO_Pin_8; //LED3燈反轉(zhuǎn)

}}9.4STM32實時時鐘可以依靠后備電池供電、維持運行的定時器提供日歷、時鐘以及數(shù)據(jù)存儲等功能可用于重新設(shè)置系統(tǒng)當(dāng)前的時間和日期RTC核心和時鐘配置處于微控制器的備份區(qū)域?qū)崟r時鐘RTC(RealTimeCounter)RTC的簡化結(jié)構(gòu)RTC可屏蔽中斷秒中斷(RTC_Second)RTC預(yù)分頻器用于生成RTC的時基(TR_CLK)這個時基可以編程為1秒每個TR_CLK周期,允許時可以產(chǎn)生一個秒中斷鬧鐘中斷(RTC_Alarm)系統(tǒng)時間以時基(TR_CLK)為單位增量可與保存在鬧鐘寄存器的可編程日期相比較用來產(chǎn)生鬧鐘中斷溢出事件(RTC_Overflow)32位計數(shù)值溢出可以記錄4294967296秒,約136年【例9-5】RTC應(yīng)用示例:鬧鐘RTC秒中斷控制LED1燈閃爍利用RTC的秒中斷讓LED1燈每0.5秒改變亮滅狀態(tài)實現(xiàn)閃爍效果鬧鐘中斷點亮LED2燈設(shè)置3s后產(chǎn)生鬧鐘中斷用鬧鐘中斷點亮LED2燈RTC初始化配置函數(shù)-1voidRTC_Config(void){RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE);PWR_BackupAccessCmd(ENABLE);if(BKP_ReadBackupRegister(BKP_DR1)!=0x5555){BKP_DeInit(); RCC_LSEConfig(RCC_LSE_ON);while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET);RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);RCC_RTCCLKCmd(ENABLE);RTC_WaitForSynchro();RTC_WaitForLastTask();RTC初始化配置函數(shù)-2RTC_ITConfig(RTC_IT_SEC,ENABLE);RTC_WaitForLastTask();RTC_ITConfig(RTC_IT_ALR,ENABLE); RTC_WaitForLastTask();RTC_EnterConfigMode();//進(jìn)入RTC配置模式

RTC_SetPrescaler(16383);RTC_WaitForLastTask();RTC_SetCounter(10);RTC_WaitForLastTask();RTC_SetAlarm(16);RTC_ExitConfigMode(); //退出RTC配置模式

BKP_WriteBackupRegister(BKP_DR1,0x5555);}RTC初始化配置函數(shù)-3else{/*允許RTC秒中斷和鬧鐘中斷*/

RTC_WaitForSynchro();RTC_WaitForLastTask();RTC_ITConfig(RTC_IT_SEC,ENABLE);RTC_WaitForLastTask();RTC_ITConfig(RTC_IT_ALR,ENABLE);RTC_ClearFlag(RTC_FLAG_SEC|RTC_FLAG_ALR);}}RTC中斷函數(shù)voidRTC_IRQHandler(void){if(RTC_GetITStatus(RTC_IT_SEC)){ GPIOB->ODR^=GPIO_Pin_0;RTC_WaitForLastTask(); RTC_ClearITPendingBit(RTC_IT_SEC);}if(RTC_GetITStatus(RTC_IT_ALR)){ LED_On(2);RTC_WaitForLastTask(); RTC_ClearITPendingBit(RTC_IT_ALR); } }嵌入式系統(tǒng)導(dǎo)論主講教師:第10章

STM32的模擬接口本章內(nèi)容提要10.1STM32的ADC接口10.2STM32的DAC接口模擬量——連續(xù)變化的物理量模擬/數(shù)字轉(zhuǎn)換器ADCDAC數(shù)字/模擬轉(zhuǎn)換器數(shù)字量——時間和數(shù)值上都離散的量10.1STM32的ADC接口擁有1~3個12位ADC每個ADC具有16個模擬輸入通道可以測量16個外部信號源主ADC1還可以測量2個內(nèi)部信號源各個通道可以采用單次、連續(xù)、掃描或間斷模式將模擬量轉(zhuǎn)換為數(shù)字量12位轉(zhuǎn)換結(jié)果保存于16位數(shù)據(jù)寄存器中可以選擇左對齊或右對齊方式存儲ADC相關(guān)引腳引腳名稱信號類型說明VREF+輸入,模擬參考正極使用的高端/正極參考電壓,2.4V≤VREF+≤VDDAVDDA

輸入,模擬電源等效于VDD的模擬電源,2.4V≤VDDA≤VDD(3.6V)VREF-輸入,模擬參考負(fù)極ADC使用的低端/負(fù)極參考電壓,VREF-=VSSAVSSA輸入,模擬電源地等效于VSS的模擬電源地ADCx_IN[15:0]模擬輸入信號16個模擬輸入通道ADC通道選擇ADC共16個多路復(fù)用通道,可組織成兩組一個組由一系列轉(zhuǎn)換組成可以是在任何通道上、并以任何順序進(jìn)行規(guī)則組:由最多16個轉(zhuǎn)換組成注入組:由最多4個轉(zhuǎn)換組成存放ADC轉(zhuǎn)換出來的數(shù)據(jù)分為規(guī)則通道數(shù)據(jù)寄存器(1個)注入通道數(shù)據(jù)寄存器(4個)。注入通道的轉(zhuǎn)換可以打斷規(guī)則通道的轉(zhuǎn)換ADC觸發(fā)選擇ADC部件需要收到觸發(fā)信號才開始進(jìn)行轉(zhuǎn)換對于ADC1和ADC2,觸發(fā)信號可以來自外部(規(guī)則通道EXTI11,注入通道EXTI15)來自內(nèi)部定時器(TIM1~TIM4的有關(guān)事件)使用軟件觸發(fā)轉(zhuǎn)換ADC3觸發(fā)信號來自內(nèi)部定時器(TIM1~TIM4、TIM5和TIM8的有關(guān)事件)也可以是軟件觸發(fā)ADC轉(zhuǎn)換時間采樣時間(可變)+12.5個時鐘周期(固定)ADCCLK時鐘最大14MHzADC最小轉(zhuǎn)換時間=1.5+12.5=14個時鐘12位結(jié)果在16位寄存器的數(shù)據(jù)對齊ADC中斷中斷事件事件標(biāo)志允許控制位規(guī)則組轉(zhuǎn)換結(jié)束EOCEOCIE注入組轉(zhuǎn)換結(jié)束JEOCJEOCIE模擬看門狗狀態(tài)位置位AWDAWDIEADC的DMA請求規(guī)則組通道的轉(zhuǎn)換結(jié)果只有一個數(shù)據(jù)寄存器多個規(guī)則通道的轉(zhuǎn)換,有必要使用DMA方式處理數(shù)據(jù),以免數(shù)據(jù)溢出一個規(guī)則通道轉(zhuǎn)換結(jié)束,就可產(chǎn)生DMA請求將規(guī)則組數(shù)據(jù)寄存器ADC_DR的數(shù)據(jù)利用DMA方式 傳送到用戶事先選定的目的位置只有ADC1(和ADC3)能夠產(chǎn)生DMA請求ADC2可以在雙ADC模式中使用ADC1的DMA請求【例10-1】ADC應(yīng)用示例:數(shù)據(jù)采集一個20K滑動變阻器接在PC1上通過滑動變阻器提供的模擬輸入電壓經(jīng)A/D轉(zhuǎn)換獲得電壓的數(shù)字量采用DMA方式傳輸?shù)街鞔嬖儆芍鞔鎮(zhèn)魉偷酱陲@示

初始化ADC1-1voidADC1_Config(void){

ADC_InitTypeDefADC_InitStructure;/*(1)配置ADC1相關(guān)的外設(shè)*/

GPIOC_Config();DMA1_Config();/*(2)開啟ADC1時鐘

*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);初始化ADC1-2/*(3)配置ADC1工作模式*/

ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;

ADC_InitStructure.ADC_ScanConvMode=DISABLE;ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;

ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;

ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;

ADC_InitStructure.ADC_NbrOfChannel=1;ADC_Init(ADC1,&ADC_InitStructure);

初始化ADC1-3/*(4)配置ADC時鐘*/

RCC_ADCCLKConfig(RCC_PCLK2_Div8);//設(shè)置PCLK2分頻系數(shù)為8,即ADCCLK=72MHz/8

ADC_RegularChannelConfig(ADC1,ADC_Channel_11,1,ADC_SampleTime_55Cycles5); //*選擇ADC1的通道11為55.5個采樣周期,序列為1/*(5)允許ADC1的DMA*/

ADC_DMACmd(ADC1,ENABLE);/*(6)允許ADC1,開啟A/D轉(zhuǎn)換*/

ADC_Cmd(ADC1,ENABLE);初始化ADC1-4/*(7)ADC校準(zhǔn)*/

ADC_ResetCalibration(ADC1); //復(fù)位校準(zhǔn)寄存器

while(ADC_GetResetCalibrationSt

溫馨提示

  • 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

提交評論