an2585_stm32f101xx和stm32f103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例_W_第1頁(yè)
an2585_stm32f101xx和stm32f103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例_W_第2頁(yè)
an2585_stm32f101xx和stm32f103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例_W_第3頁(yè)
an2585_stm32f101xx和stm32f103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例_W_第4頁(yè)
an2585_stm32f101xx和stm32f103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例_W_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例AN2585應(yīng)用筆記STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例介紹STM32F10xxx 以ARM公司為高級(jí)微控制器而設(shè)計(jì)的最新的Cortex-M3為內(nèi)核。它的特定的Thumb-2 指令集使用16位代碼密度,表現(xiàn)出32位的性能。STM32F10xxx 有三個(gè)低功耗模式,它們使用嵌入的 8 MHz RC振蕩器而具有快速啟動(dòng)能力。STM32F10xxx 同樣內(nèi)嵌一個(gè)實(shí)時(shí)時(shí)鐘,該實(shí)時(shí)時(shí)鐘參考一個(gè)內(nèi)部的32 KHz RC 或一個(gè)外部石英振蕩器。另外STM32F10xxx 擁有VBAT 功能,使它能夠?yàn)橐苿?dòng)應(yīng)用

2、和超低功耗應(yīng)用以電池為能源運(yùn)行。安全性也是STM32F10xxx 的關(guān)鍵特性,它有著內(nèi)嵌的復(fù)位電路,雙看門狗架構(gòu)(包含一個(gè)有自己的時(shí)鐘源的獨(dú)立的看門狗),一個(gè)備用時(shí)鐘以防主振蕩器故障,和防篡改及備份寄存器的功能。這份應(yīng)用筆記是為了提供上面列舉STM32F10xxx的不同特性的應(yīng)用示例。Cortex-M3 和許多外設(shè)被編址:NVIC,SysTick,DMA,RCC,EXTI,PWR,BKP,RTC,F(xiàn)lash 存儲(chǔ)器,IWDG和WWDG.這份文檔,它相關(guān)的固件,和其他類似的應(yīng)用筆記是和STM32F10xxx 固件庫(kù)相配套的。這些都可以從ST微電子的網(wǎng)站下載:.©20

3、07 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例1Cortex-M3 內(nèi)核61.1如何用Cortex-M3 位綁定(bit-band)存儲(chǔ)訪問(wèn)61.1.1綜述61.1.2固件描述71.2如 何 修 正 Cortex-M3 的線程模式 和 使用的堆棧81.2.1概述81.2.2固件描述82NVIC應(yīng)用示例92.1STM32F10xxx NVIC:搶占和子優(yōu)先級(jí)處理92.1.1硬件描述92.1.2固件描述102.2STM32F10xx

4、xs NVIC:IRQ通道中斷過(guò)程112.2.1硬件描述112.2.2固件描述122.3STM32F10XXX NVIC:系統(tǒng)中斷處理132.3.1硬件描述132.3.2固件描述132.4STM32F10xxx NVIC:WFE和WFI模型142.4.1硬件描述142.4.2固件描述15©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例STM32F10xxxNVIC:WFI模式下的DMA硬件描述1

5、82.5.2固件描述182.6STM32F10xxx NVIC:用偏移實(shí)現(xiàn)中斷向量表192.6.1硬件描述192.6.2固件描述203怎樣使用STM32F10xxx SysTick213.1硬件描述213.2固件描述214DMA應(yīng)用示例224.1STM32F10xxx 使用DMA從Flash到RAM數(shù)據(jù)傳輸224.1.1硬件描述224.1.2固件描述234.1.3總結(jié)234.2STM32F10xxx I2C-I2C使用DMA通訊234.2.1硬件描述234.2.2固件描述244.2.3總結(jié)244.3STM32F10xxx使用DMA進(jìn)行全雙工SPI-SPI通訊254.3.1硬件描述254.3.2

6、固件描述25©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例總結(jié)2STM32F10xxx中使用DMA進(jìn)行外設(shè)外設(shè)的數(shù)據(jù)傳輸264.4.1硬件描述264.4.2固件描述274.4.3總結(jié)275RCC 應(yīng)用示例285.1如何使用STM32F10xxx RCC285.1.1硬件描述285.1.2固件描述296怎樣使用STM32F10xxx EXTI 控制器306.1硬件描述306.2固件描述306.3總

7、結(jié)317PWR應(yīng)用示例317.1STM32F10xxx的停止模式317.1.1硬件描述327.1.2固件描述327.2STM32F10xxx 待機(jī)模式337.2.1硬件描述337.2.2固件描述348BKP 應(yīng)用示例35©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例如何 讀/寫 數(shù)據(jù) 從/到 備份數(shù)據(jù)寄存器3硬件描述358.1.2固件描述368.2如何 存儲(chǔ)用戶數(shù)據(jù) 到 備份數(shù)據(jù)寄存器378.2

8、.1硬件描述378.2.2固件描述379RTC應(yīng)用示例389.1STM32F10xxx RTC和備份域(backup domain或BKP domain)389.1.1硬件描述399.1.2固件描述3910Flash存儲(chǔ)器應(yīng)用示例4010.1怎樣對(duì)STM32F10xxx Flash存儲(chǔ)器編程4110.1.1固件描述4110.2如何使能和禁用STM32F10xxx Flash存儲(chǔ)器的寫保護(hù)4110.2.1固件描述4210.2.2使能寫保護(hù)4210.2.3禁止寫保護(hù)4211怎樣使用STM32F10xxx IWDG4311.1硬件描述4311.2固件描述4312怎樣使用STM32F10xxx WWD

9、G44©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例硬件描述4512.112.2固件描述4513結(jié)論4614修訂記錄4615版權(quán)聲明:481 Cortex-M3內(nèi)核這一部分提供了關(guān)于怎樣使用Cortex-M3 內(nèi)核的一些特性的實(shí)踐信息。如何用Cortex-M3 位綁定(bit-band)存儲(chǔ)訪問(wèn)綜述The Cortex-M3 內(nèi)存映射包括兩個(gè)bit-band區(qū)域。這些區(qū)域把別名區(qū)中每個(gè)字映射為bi

10、t-banding區(qū)的1位。在別名區(qū)中寫一個(gè)字跟在bit-banding存儲(chǔ)區(qū)對(duì)目標(biāo) 位進(jìn)行一次讀/修改/寫操作有同樣的效果。在STM32F 10XXX中,外設(shè)寄存器和SRAM 被映射到一個(gè)bit-band區(qū)。這樣就可以進(jìn)行原子的bit-band讀和寫操作。下面這個(gè)公式 顯示了如何 通過(guò) bit-band區(qū)的相應(yīng)位獲得別名區(qū)的每個(gè)字 :bit_word_addr =bit_band_base + ( byte_offset * 32 ) + ( bit_number * 4 )其中:©2007 MXCHIP Corporation. All rights reserved.www.m

11、xchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例bit_word_addr 是別名區(qū)中 映射到 目標(biāo)位 的 字 的地址。bit_band_base 是別名區(qū)的起始地址byte_offset 是 包含目標(biāo)位 的bit-band區(qū) 的字節(jié)數(shù)bit_number 是 目標(biāo)位 的位置( 0 31 )下面的示例說(shuō)明了如何將SRAM中的bit-band區(qū)ox20000300 的字節(jié)的第2位映射到別名區(qū)。0x2200 6008 = 0x2200 0000 + (0x300 32) + (2 4)向地址0x2200 6008 進(jìn)行 寫 操作

12、 跟 向SRAM的別名區(qū) 地址為0x2000 0300 的字節(jié)的bit 2進(jìn)行讀/修改/寫操作有同樣的效果。讀地址0x2200 6008 返回在SRAM 地址0x2000 0300 的這一字節(jié)的第2位的值(0x01: 位置位;0x00: 位復(fù)位).1.1.2固件描述下面的示例顯示了如何用Cortex-M3 bit-band 訪問(wèn) 對(duì)SRAM上的一變量進(jìn)行原子的read-modify-write操作。相關(guān)程序聲明了3個(gè) 宏來(lái)操作這個(gè)可變位,使用bit-band訪問(wèn)重置,設(shè)置,讀一個(gè)特定位#define RAM_BASE 0x20000000#define RAM_BB_BASE 0x220000

13、00#define Var_ResetBit_BB(VarAddr, BitNumber) (*(vu32 *) (RAM_BB_BASE | (VarAddr - RAM_BASE) 5) | RAM_BB_BASE |(BitNumber) 2) = 0)©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例#define Var_SetBit_BB(VarAddr, BitNumber) (*(vu32 *) (R

14、AM_BB_BASE | (VarAddr - RAM_BASE) 5) | RAM_BB_BASE |(BitNumber) 2) = 1)#define Var_GetBit_BB(VarAddr, BitNumber) (*(vu32 *) (RAM_BB_BASE | (VarAddr - RAM_BASE) 5) | RAM_BB_BASE |(BitNumber) 2)作為一個(gè)示例,我們聲明一個(gè)變量,它的值通過(guò)上面定義的宏 改變了。這個(gè)固件在STM32F 10XXX固件庫(kù)中被作為 Cortex-M3 示例1,可從ST微電子公司微控制器的網(wǎng)站獲取。如何 修正 Cortex-M3 的線

15、程模式 和 使用的堆棧概述這個(gè)示例 顯示了如何 修正 Cortex-M3 的線程模式的訪問(wèn)和堆棧。1.2.2固件描述Cortex-M3 線程模式 在復(fù)位時(shí)進(jìn)入,在異常返回時(shí)也可以進(jìn)入。相關(guān)程序被用來(lái):將線程模式堆棧 由主棧轉(zhuǎn)換到進(jìn)程堆棧。將線程模式 由轉(zhuǎn)換到非。©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例將轉(zhuǎn)線程模式 由非轉(zhuǎn)回到。為了監(jiān)視線程模式中堆棧的使用和代碼的/非訪問(wèn)級(jí)別,在程序中一個(gè)變量

16、集是可用的。也可以使用調(diào)試器的 Cortex寄存器 窗口。此固件 在STM32F 10XXX固件庫(kù)中被作為 Cortex-M3 示例2,可從ST微電子公司微控制器的網(wǎng)站獲取。2 NVIC應(yīng)用示例這一部分提供了STM32F10xxx NVIC外設(shè)的應(yīng)用實(shí)踐程序示例2.1STM32F10xxx NVIC:搶占和子優(yōu)先級(jí)處理介紹如何使用NVIC(嵌套向量中斷控制器)固件庫(kù)來(lái)演示Cortex-M3優(yōu)先級(jí)機(jī)制(搶占優(yōu)先級(jí)和子優(yōu)先級(jí))。給出的一個(gè)示例使用了NVIC驅(qū)動(dòng)的一些功能 :使能,設(shè)置優(yōu)先級(jí),獲得活動(dòng)IRQ狀態(tài),清除IRQ掛起位等。2.1.1硬件描述下圖展示了示例程序使用的硬件連接©200

17、7 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例2.1.2固件描述提供的固件庫(kù)包括了NVIC驅(qū)動(dòng),該驅(qū)動(dòng)通過(guò)一系列的函數(shù)來(lái)支持所有的Cortex-M3異常和IRQ通道處理。給出的示例使用了大部分的功能。在這個(gè)示例程序中,使用了2根EXTI(外部中斷)線(Line0&Line9)和SysTick中斷處理。在EXTI線的每一個(gè)下降沿產(chǎn)生一個(gè)中斷。這些中斷配置如下:EXTI Line0:搶占優(yōu)先級(jí)=搶占優(yōu)先級(jí)值子優(yōu)先級(jí)=0EXTI Lin

18、e9:搶占優(yōu)先級(jí)=0子優(yōu)先級(jí)=1SysTickHandler:搶占優(yōu)先級(jí)=!搶占優(yōu)先級(jí)值子優(yōu)先級(jí)=0首先,搶占優(yōu)先級(jí)值等于0,EXTI Line0擁有的搶占優(yōu)先級(jí)比SysTick Handler高。在EXTI Line9中斷處理程序,將EXTI Line0和SysTick搶占優(yōu)先級(jí)翻轉(zhuǎn)(優(yōu)先級(jí)1的變0,優(yōu)先級(jí)0©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例的變1)。在EXTI Line0中斷處理程序,設(shè)置SysT

19、ick中斷掛起位。僅當(dāng)SysTick的優(yōu)先級(jí)比EXTI Line0高的時(shí)候SysTick ISR搶占EXTI Line0 ISR。1 EXTI Line9第一次發(fā)生中斷時(shí),SysTick的搶占優(yōu)先級(jí)比EXTI Line0高,所以當(dāng)EXTI Line0發(fā)生中斷時(shí),SysTick ISR執(zhí)行,PreemptionOccured變量為TRUE,同時(shí)連接到PC6,PC7,PC8 PC9的led燈翻轉(zhuǎn)。2 當(dāng)下一次EXTI Line9發(fā)生時(shí),由于在前面一次EXTI Line9的中斷處理程序?qū)XTI Line0和SysTick的優(yōu)先級(jí)翻轉(zhuǎn),現(xiàn)在SysTick搶占優(yōu)先級(jí)比EXTI Line0低,當(dāng)EXTI

20、 Line0中斷發(fā)生時(shí),PreemptionOccured變量為false,同時(shí)連接到PC6,PC7,PC8 PC9的led停止翻轉(zhuǎn)。以上的1和2在一個(gè)無(wú)限循環(huán)中重復(fù)進(jìn)行。可參見NVIC示例程序一(STMicroelectronics 微控制器的網(wǎng)站)。2.2STM32F10xxxs NVIC:IRQ通道中斷過(guò)程介紹了如何使用NVIC固件庫(kù)來(lái)實(shí)現(xiàn)幾個(gè)不同優(yōu)先級(jí)的IRQ通道。2.2.1硬件描述示例程序硬件連接如下©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和

21、STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例2.2.2固件描述提供的固件庫(kù)包括了NVIC驅(qū)動(dòng),它通過(guò)一系列的函數(shù)來(lái)支持所有的Cortex-M3異常和IRQ通道處理。給出的示例使用了大部分的功能。在這個(gè)示例中,使用了三個(gè)IRQ通道:TIM2,TIM3和TIM4中斷。這三個(gè)定時(shí)器配置為在每次定時(shí)器更新發(fā)生時(shí)產(chǎn)生一個(gè)中斷。IRQ通道的IRQ搶占優(yōu)先級(jí)是遞增的,即TIM2搶占優(yōu)先級(jí)為0TIM4搶占優(yōu)先級(jí)為2。在每個(gè)中斷處理程序:TIM2的中斷處理程序每1s一次將連接到PC6的led燈翻轉(zhuǎn)(亮變暗或暗變亮)TIM3的中斷處理程序每2s一次將連接到PC7的led燈翻轉(zhuǎn)(亮變暗或暗變亮)TIM4的中斷處理程

22、序每3s一次將連接到PC8的led燈翻轉(zhuǎn)(亮變暗或暗變亮)可參見NVIC示例程序2(STMicroelectronics 微控制器的網(wǎng)站)。©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例2.3STM32F10XXX NVIC:系統(tǒng)中斷處理介紹了如何使用NVIC固件庫(kù)來(lái)實(shí)現(xiàn)幾個(gè)不同優(yōu)先級(jí)的系統(tǒng)中斷處理2.3.1硬件描述硬件連接如下2.3.2固件描述提供的固件庫(kù)包括了NVIC驅(qū)動(dòng),它通過(guò)一系列的函數(shù)來(lái)支持所有的Cor

23、tex-M3異常和IRQ通道處理。給出的示例使用了大部分的功能。在這個(gè)示例中,使用了四個(gè)系統(tǒng)處理程序:NMI,PSV,SVCall和SysTick處理程序。這些中斷處理程序從SysTick處理程序中級(jí)聯(lián)調(diào)用。中斷處理優(yōu)先級(jí)配置如下:NMI搶占優(yōu)先級(jí)為-1(固定優(yōu)先級(jí))PSV為0©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例SVCall 為 1SysTick為2SysTick定時(shí)器配置為每秒產(chǎn)生一個(gè)中斷。在SysT

24、ick中斷處理程序中,連接到PC6的燈每秒點(diǎn)亮一次并執(zhí)行SVC指令。它激活SVCall中斷處理程序并搶占當(dāng)前指令流。在SVCall中斷處理程序中,連接到PC7的LED燈翻轉(zhuǎn)(亮變暗或暗變亮) ,軟件置位PSV中斷掛起位。由于PSV擁有高的優(yōu)先級(jí),它搶占SVCall中斷處理程序并將連接到PC8的LED翻轉(zhuǎn)(亮變暗或暗變亮),在PSV中斷處理程序中, 又將NMI中斷掛起位置位,激活NMI中斷,導(dǎo)致連接到PC9的LED翻轉(zhuǎn)(亮變暗或暗變亮)??蓞⒁奛VIC示例3(STMicroelectronics 微控制器的網(wǎng)站)。2.4STM32F10xxx NVIC:WFE和WFI模型介紹了如何使用NVIC固

25、件庫(kù)來(lái)演示Cortex-M3低功耗模式:WFE(等待)和WFI(等待中斷)2.4.1硬件描述下圖是硬件連接©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例2.4.2固件描述給出的固件庫(kù)包含了NVIC驅(qū)動(dòng),它通過(guò)一系列的函數(shù)支持所有的Cortex-M3異常和IRQ通道處理。給出的示例使用了大部分的功能。在這個(gè)示例程序中,使用了三個(gè)EXTI Lines(Line0,Line9和Line13)。在每個(gè)下降沿產(chǎn)生一個(gè)中斷或

26、。EXTI Line0和Line13配置為中斷模式而EXTI Line9配置為模式。用戶必須通過(guò)在主代碼中已定義的五條語(yǔ)句來(lái)選擇執(zhí)行哪個(gè)低功耗模式。Wait For Interrupt(WFI)Sleep On Exit:在這種情況下,Cortex-M3在異常返回時(shí)自動(dòng)進(jìn)入WFI模式,并不需要WFI指令。如果異常擁有足夠高的優(yōu)先級(jí),那么它將被執(zhí)行,Cortex-M3返回到WFI模式。為了獲得這些行為,可按如下步驟:選擇#WFISLEEPONEXIT定義的狀態(tài),而把其它的狀態(tài)注釋掉運(yùn)行示例程序©2007 MXCHIP Corporation. All rights reserved.w

27、ww.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例第一次發(fā)生時(shí), Cortex-M3 SLEEPONEXIT位被置位。在異常返回后系統(tǒng)進(jìn)在EXTI Line13入WFI模式。EXTI Line0每次發(fā)生,連接到PC8的LED翻轉(zhuǎn)(亮變暗或暗變亮)。任何EXTI LINE0和Line13的下降沿都將執(zhí)行EXTI中斷。從ISR退出后,Cortex-M3將進(jìn)入WFI模式。只要EXTI Line0拉低,Cortex-M3將退出WFI模式,連接到PC8的LED燈將點(diǎn)亮Cortex-M3將返回到WFI模式。以上動(dòng)作在一個(gè)無(wú)限循環(huán)中

28、重復(fù)。Wait For Interupt(WFI)Sleep Now:在這個(gè)模式下WFI指令直接執(zhí)行。為了獲得這些行為,可按如下步驟:選擇#WFISLEEPNOW定義的狀態(tài),而把其它的狀態(tài)注釋掉運(yùn)行示例程序在EXTI Line13的中斷處理程序,連接到PC6的LED燈翻轉(zhuǎn),Cortex-M3進(jìn)入WFI模式使用連接到EXTI Line0的按鍵將Cortex-M3從中喚醒,這將連接到PC8的LED翻轉(zhuǎn)。以上行為在一個(gè)無(wú)限循環(huán)中重復(fù)出現(xiàn)。Wait For Event(WFE)SEV ON PEND:在這個(gè)模式下,WFE指令之際執(zhí)行,主執(zhí)行代碼由PRIMASK(main priority=0)來(lái)加速。

29、步驟如下:選擇#WFESEVONPEND定義的狀態(tài)而把其他的狀態(tài)注釋掉運(yùn)行示例程序在EXTI Line13中斷服務(wù)程序中,執(zhí)行的優(yōu)先級(jí)上升到0(一旦優(yōu)先級(jí)提升,沒有其他的中斷執(zhí)行),連接到PC6的LED燈翻轉(zhuǎn),Cortex-M3進(jìn)入WFE模式©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例使用連接到EXTI Line0的按鍵把Cortex-M3喚醒。它不會(huì)將連接到PC8的LED翻轉(zhuǎn)但會(huì)把系統(tǒng)從WFE(SEV ON

30、PEND)喚醒。EXTI Line0中斷從非掛起狀態(tài)轉(zhuǎn)換為掛起狀態(tài),因此系統(tǒng)會(huì)從WFE喚醒(EXTI Line0中斷沒有足夠的優(yōu)先級(jí)來(lái)運(yùn)行,因?yàn)橹鲌?zhí)行優(yōu)先級(jí)使用PRIMASK寄存器提升為0)連接到EXTI Line9的按鍵配置為模式,它也能用來(lái)喚醒Cortex-M3。如果#RTC-Alarm-WFEWakeUp定義的狀態(tài)使能,RTC 警告將在6秒后喚醒Cortex-M3(如果在這段時(shí)間內(nèi)EXTI Line0和EXTI Line9都沒有用來(lái)喚醒Cortex-M3的話)。Wait For Event(WFE)SEV ON EVENT:在這個(gè)模式下,WFE執(zhí)行直接執(zhí)行。步驟如下:選擇#WFESEVO

31、NEVENT定義的狀態(tài)而把其他得狀態(tài)注釋掉運(yùn)行示例程序在EXTI Line13中斷處理程序,連接到PC6的LED翻轉(zhuǎn),Cortex-M3進(jìn)入WFE模式使用連接到EXTI Line0的按鍵把Cortex-M3喚醒,它將連接到PC8的LED翻轉(zhuǎn)。連接到EXTI Line9的按鍵配置為模式,它也能用來(lái)喚醒Cortex-M3。如果#RTC-Alarm-WFEWakeUp定義的狀態(tài)使能,RTC alarm將在6秒后喚醒Cortex-m3(如果在這段時(shí)間內(nèi)EXTI Line0和EXTI Line9都沒有用來(lái)喚醒Cortex-M3)。這一系列動(dòng)作將在一個(gè)無(wú)限循環(huán)中重復(fù)連接到PC9的LED翻轉(zhuǎn)表示Cortex

32、-M3處于運(yùn)行模式而非低功耗模式??蓞⒁奛VIC示例程序4(STMicroelectronics 微控制器的網(wǎng)站)。©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例2.5STM32F10xxxNVIC:WFI模式下的DMA介紹了DMA傳輸使能下如何進(jìn)入WFI模式,DMA傳輸結(jié)束中斷把系統(tǒng)從這個(gè)模式下喚醒。2.5.1硬件描述Figure 5顯示了四個(gè)LED連接到STM32F10xxx,USART1信號(hào)使用RS232收

33、發(fā)器連接到DB9連接器。然后再用一個(gè)空調(diào)制/RS232線將PC串口也連接到DB9連接器的另一端。2.5.2固件描述提供的固件庫(kù)包含能通過(guò)一套函數(shù)支持所有Cortex-M3異常和IRQ通道處理程序的NVIC驅(qū)動(dòng)。在相關(guān)的固件中,系統(tǒng)時(shí)鐘為72MHz,DMA通道5配置為從USART1數(shù)據(jù)寄存器傳輸10塊數(shù)據(jù)到預(yù)定義的緩沖區(qū)DST-Buffer,然后在傳輸完成后產(chǎn)生一個(gè)中斷。USART1從超級(jí)終端上接受數(shù)據(jù)連接到PC6的LED以一定的頻率翻轉(zhuǎn),這個(gè)頻率依賴與系統(tǒng)時(shí)鐘,它用來(lái)顯示MCU是處于WFI還©2007 MXCHIP Corporation. All rights reserved.w

34、ww.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例是RUN模式。EXTI Line9下降沿將導(dǎo)致Cortex-M3進(jìn)入WFI模式,連接到PC6的LED停止翻轉(zhuǎn)。為了將Cortex-M3從WFI模式中喚醒,從超級(jí)終端中發(fā)送一系列的數(shù):0,1,2,3,4,5,6,7,8,9到USART1,這些數(shù)據(jù)通過(guò)DMA傳輸?shù)筋A(yù)定義的緩沖區(qū)中。產(chǎn)生一個(gè)中斷,然后系統(tǒng)從WFI模式退出。連接到PC6的LED再次開始翻轉(zhuǎn),如果緩沖區(qū)的數(shù)據(jù)正確接收,則連接到PC7的LED翻轉(zhuǎn),否則連接到PC8的LED翻轉(zhuǎn)。可參見NVIC示例程序5(STMicr

35、oelectronics 微控制器的網(wǎng)站)。2.6STM32F10xxx NVIC:用偏移實(shí)現(xiàn)中斷向量表介紹了如何使用NVIC固件庫(kù)將Cortex-M3向量表重定位到一個(gè)特殊的地址,而不是缺省的地址。2.6.1硬件描述下圖為示例硬件連接©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例2.6.2固件描述給出的固件庫(kù)介紹了如何使用NVIC固件庫(kù)重定位向量表到一個(gè)特殊的地址。這可以用來(lái)編譯一個(gè)程序,該程序?qū)⑼ㄟ^(guò)Flash

36、存儲(chǔ)器的段0中預(yù)先編寫好的應(yīng)用程序裝載入Flash存儲(chǔ)器。這樣的應(yīng)用程序能夠在應(yīng)用中編程(IAP、通過(guò)USART)或者是設(shè)備固件提升(DFU,通過(guò)USB)。他們可以在ST的網(wǎng)站上下載。相關(guān)的程序?yàn)榛赟ysTick計(jì)數(shù)到終點(diǎn)中斷實(shí)現(xiàn)一個(gè)延時(shí)功能。定時(shí)翻轉(zhuǎn)連接到PC6,PC7,PC8,PC9四個(gè)LED,定時(shí)時(shí)間有Delay函數(shù)定義。當(dāng)使用IAP加載程序時(shí),向量表必須位于0X08002000地址使用DFU加載程序時(shí), 向量比必須位于0X08003000地址可參見NVIC示例程序6(STMicroelectronics 微控制器的網(wǎng)站)。©2007 MXCHIP Corporation.

37、All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例3 怎樣使用STM32F10xxx SysTick這部分描述了怎樣配置Cortex-M3 系統(tǒng)時(shí)鐘(SysTick)以生成一個(gè)時(shí)鐘基準(zhǔn)。將給出一個(gè)使用了SysTick大部分功能的示例。設(shè)置重裝值,使能和禁止計(jì)數(shù)器,使能中斷請(qǐng)求。3.1硬件描述硬件電路如下3.2固件描述提供的固件庫(kù)中包含有SysTick驅(qū)動(dòng),他通過(guò)一系列的函數(shù)來(lái)支持所有的SysTick的特性。并提供了一個(gè)使用了大部分該功能的示例這個(gè)示例展示了如何配置SysTick

38、來(lái)產(chǎn)生一個(gè)1ms的定時(shí)基準(zhǔn)。系統(tǒng)時(shí)鐘為72MHz,SysTick的時(shí)©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例鐘頻率為AHB時(shí)鐘除以8。延時(shí)功能就是基于SysTick 計(jì)時(shí)結(jié)束。四個(gè)LED連接到PC6 PC7 PC8 PC9 ,并且定時(shí)翻轉(zhuǎn)(定時(shí)時(shí)間由延時(shí)函數(shù)定義)可參見SysTick示例(STMicroelectronics 微控制器的網(wǎng)站)4 DMA應(yīng)用示例這一部分提供了STM32F10xxx DMA外設(shè)

39、使用示例STM32F10xxx 使用DMA從Flash到RAM數(shù)據(jù)傳輸4.1這一節(jié)介紹了如何使用DMA把數(shù)據(jù)緩沖區(qū)的內(nèi)容從Flash內(nèi)存中傳到RAM中。4.1.1硬件描述不需要硬件連接©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例4.1.2固件描述給出的固件庫(kù)中包含有DMA驅(qū)動(dòng),它通過(guò)一系列的函數(shù)來(lái)支持所有的DMA功能。DMA通道6配置用來(lái)將儲(chǔ)在FlashMemory中的32位字?jǐn)?shù)據(jù)傳輸?shù)蕉x在RAM中的接受緩沖

40、區(qū)。通過(guò)軟件觸發(fā)。DMA通道6的Memory-Memory傳輸使能。源端和目的端的地址增加也是使能的。通過(guò)設(shè)置DMA通道6的Channel Enable位來(lái)開始DMA傳輸。在傳輸結(jié)束后產(chǎn)生一個(gè)傳輸完成中斷,在中斷處理程序中,讀取還需要傳輸?shù)臄?shù)據(jù),直到剩下的數(shù)據(jù)個(gè)數(shù)為0。清除傳輸中斷掛起位。比較源緩沖區(qū)和目的緩沖區(qū)的數(shù)據(jù)來(lái)檢測(cè)是否所有的數(shù)據(jù)正確地傳輸。參見DMA示例一(STMicroelectronics 微控制器的網(wǎng)站)。4.1.3總結(jié)使用DMA從內(nèi)存到內(nèi)存?zhèn)鬏敂?shù)據(jù)可以較少代碼的大小和執(zhí)行時(shí)間。只需要使用一個(gè)DMA通道,在軟件觸發(fā)傳輸開始后,可以傳輸高達(dá)65536塊數(shù)據(jù)。4.2STM32F10

41、xxx I2C-I2C使用DMA通訊該節(jié)介紹如何使用DMA設(shè)置I2C-I2C數(shù)據(jù)通訊以實(shí)現(xiàn)傳輸和接收。4.2.1硬件描述下圖展示了STM32F10xxx I2C1和I2C2的典型連接。I2C1和I2C2的數(shù)據(jù)引腳(SDA)連接到一起,I2C1和I2C2的時(shí)鐘(SCL)連接到一起,兩根線都接上上拉電阻。©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例4.2.2固件描述提供的固件庫(kù)中包含有DMA和I2C的驅(qū)動(dòng),它通過(guò)一

42、系列的函數(shù)來(lái)支持所有的DMA功能和I2C通訊。I2C1設(shè)置為主傳輸這而I2C2則為從接收者。DMA通道5配置為將從I2C2中接收的數(shù)據(jù)存儲(chǔ)到I2C2Rx緩沖區(qū)(接收緩沖區(qū))。通道6把I2C1Tx緩沖區(qū)(發(fā)送緩沖區(qū))中的數(shù)據(jù)傳輸?shù)絀21DR寄存器以用來(lái)傳輸?shù)絀2C2。一旦開始后而且知道了從地址,I2C1和I2C2的DMA都被使能。一旦 I2C1_CR2 和I2C2_CR2 寄存器I2C DMAEN置位, I2C1 Tx 緩沖區(qū)數(shù)據(jù)就開始通過(guò)DMA通道5傳輸,同時(shí)I2C2通過(guò)DMA通道6接收數(shù)據(jù)到I2C2 Rx緩沖區(qū)。然后接收緩沖區(qū)和發(fā)送緩沖區(qū)的數(shù)據(jù)比較來(lái)檢測(cè)傳輸是否正確。參見DMA示例二(STM

43、icroelectronics 微控制器的網(wǎng)站)。4.2.3總結(jié)在沒有標(biāo)識(shí)檢測(cè)和DR寄存器訪問(wèn)的時(shí)候,在I2C通訊中使用DMA可以減少執(zhí)行時(shí)間和代碼大小。©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例4.3STM32F10xxx使用DMA進(jìn)行全雙工SPI-SPI通訊該節(jié)介紹了如何使用DMA設(shè)置SPI-SPI的全雙工通訊,通訊結(jié)尾DMA自動(dòng)產(chǎn)生一個(gè)CRC檢驗(yàn)。4.3.1硬件描述下圖為STM32F10xxxSPI1和

44、SPI2的典型連接,SPI1和SPI2的數(shù)據(jù)輸入MOSI連在一起,數(shù)據(jù)輸出MISO連在一起,SCK連接到一起。并且由于NSS管理,NSS引腳保持?jǐn)嚅_。4.3.2固件描述提供的固件庫(kù)包含有所有的DMA和SPI驅(qū)動(dòng),他通過(guò)一系列的函輸來(lái)支持所有的DMA特性和SPI通訊。NSS引腳由軟件配置,來(lái)設(shè)置SPI1 作為主設(shè)備, SPI2作為從設(shè)備。DMA 通道2 和通道4 被配置用來(lái)存儲(chǔ)由SPI1接收進(jìn)入SPI1 接收緩沖區(qū)的數(shù)據(jù),和由SPI2接收進(jìn)入SPI2接收緩沖區(qū)。DMA 通道3被配置用來(lái)傳送數(shù)據(jù),從SPI1 發(fā)送緩沖區(qū)到SPI1_DR 寄存器,以傳輸?shù)絊PI2。DMA 通道5被配©200

45、7 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例置用來(lái)傳送數(shù)據(jù),從SPI2 發(fā)送緩沖區(qū)到SPI2_DR 寄存器,以傳輸?shù)絊PI1。當(dāng)在SPI1_CR2 和 SPI2_CR2 寄存器中兩個(gè)SPI TxDMAEN 和RxDMAEN 被置位,DMA 通道3 和通道5開始分別將SPI1 和SPI2 發(fā)送緩沖區(qū)中的數(shù)據(jù)發(fā)送。 同時(shí),在SPI1 和SPI2 接收到的數(shù)據(jù)分別被DMA 通道2和通道4傳送到SPI1 和SPI2 接收緩沖區(qū)。此后系統(tǒng)

46、檢查被DMA通道接收和傳送的所有數(shù)據(jù)。在SPI1 和SPI2 上最后收到的數(shù)據(jù)是SPI2 和SPI1分別發(fā)送的CRC校驗(yàn)值。發(fā)送和接收緩沖區(qū)被比較,以檢查所有數(shù)據(jù)是否被正確傳送。這個(gè)固件作為DMA 示例3 在STM32F10xxx 固件庫(kù)中提供,可以從ST微電子公司微控制器網(wǎng)站下載。4.3.3總結(jié)SPI通訊中使用DMA可以減少執(zhí)行時(shí)間和代碼大小,而其沒有標(biāo)識(shí)檢測(cè)和沒有任何DR寄存的訪問(wèn)。使用DMA時(shí)在數(shù)據(jù)傳輸結(jié)束后自動(dòng)傳輸CRC。4.4STM32F10xxx中使用DMA進(jìn)行外設(shè)外設(shè)的數(shù)據(jù)傳輸該節(jié)介紹如何使用DMA在兩個(gè)外設(shè)間傳輸數(shù)據(jù):數(shù)據(jù)從ADC_DR傳輸?shù)絋IM1_CCR1寄存器。4.4.1

47、硬件描述下圖展示了分壓計(jì)和ADC_IN14的典型連接。TIM通道輸出引腳(TIM1_CH1)連接到示波器以©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例便顯示ADC_IN14模擬輸入信號(hào)的占空比。4.4.2固件描述給出的固件庫(kù)中包含了DMA,ADC和TIM1驅(qū)動(dòng),這些驅(qū)動(dòng)通過(guò)一系列的函數(shù)來(lái)支持所有的DMA,ADC,TIM1的所有功能。ADC_IN10配置為連續(xù)變化,TIM1-CH1配置為產(chǎn)生PWM信號(hào)。DMA通道

48、1用來(lái)將ADC_IN14產(chǎn)生的變化值從ADC1_DR循環(huán)的傳輸?shù)絋IM1_CCR1。這個(gè)有序的傳輸持續(xù)地將TIM1-CH1的占空比更新為ADC-IN14的變化值??蓞⒁奃MA示例四(STMicroelectronics 微控制器的網(wǎng)站)。4.4.3總結(jié)DMA可以用來(lái)從一個(gè)外設(shè)傳輸數(shù)據(jù)到另外一個(gè)外設(shè)去,只要兩個(gè)設(shè)備都支持DMA傳輸。這樣減少了代碼的大小和軟件的執(zhí)行時(shí)間,而且使得用戶可以容易的在外設(shè)間傳輸數(shù)據(jù)。DMA循環(huán)模式也允許在沒有人為干預(yù)的情況下持續(xù)傳輸數(shù)據(jù)。©2007 MXCHIP Corporation. All rights 02

49、1-52655026/025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例5 RCC應(yīng)用示例這部分提供了關(guān)于STM32F10xxx的RCC外設(shè)的使用(復(fù)位和時(shí)鐘控制)的實(shí)際應(yīng)用示例5.1如何使用STM32F10xxx RCC介紹了如何配置系統(tǒng)時(shí)鐘源和AHB,APB2,APB1預(yù)分頻。給出了一個(gè)使用了大部分RCC驅(qū)動(dòng)功能的示例程序。5.1.1硬件描述下圖給出了硬件連接的示例©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103

50、xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例5.1.2固件描述給出的固件庫(kù)中包含了RCC驅(qū)動(dòng),它通過(guò)一系列的函數(shù)支持所有的RCC特性。給出的示例程序也使用到了大部分的功能。它展示了如何配置系統(tǒng)時(shí)鐘源和AHB,APB2,APB1預(yù)分頻。系統(tǒng)時(shí)鐘頻率通過(guò)使用了PLL(鎖頻環(huán))配置為72MHz,為了調(diào)試,示例程序給出了如何使用RCC_GetClocksFreq函數(shù)來(lái)重新獲得當(dāng)前的狀態(tài)和不同片上時(shí)鐘的頻率。RCC_ClockFreq結(jié)構(gòu)體包含不同的片上時(shí)鐘的頻率,能夠使用工具鏈調(diào)試器這個(gè)示例也演示了高速外部時(shí)鐘(HSE)錯(cuò)誤檢測(cè):當(dāng)HSE時(shí)鐘消失后(損壞或者是沒有連接到外部晶振),HSE時(shí)鐘和PLL被禁用(但PLL配置

51、沒有改變),HIS時(shí)鐘就選擇為系統(tǒng)的時(shí)鐘源并產(chǎn)生一個(gè)不可屏蔽中斷。在不可屏蔽中斷服務(wù)程序中(ISR),使能HSE和HSE可用中斷。當(dāng)HSE時(shí)鐘恢復(fù)后,HSERDY中斷產(chǎn)生,在RCC ISR中,系統(tǒng)時(shí)鐘配置恢復(fù)為原來(lái)的狀態(tài)(HSE時(shí)鐘沒有出現(xiàn)錯(cuò)誤前的狀態(tài)),HSE時(shí)鐘能夠通過(guò)MCO引腳(PA8)監(jiān)視。四個(gè)LED燈連接到PC6 PC7 PC8 PC9引腳,它們以一定的頻率翻轉(zhuǎn),這個(gè)頻率取決于系統(tǒng)時(shí)鐘??蓞⒁奟CC示例程序(STMicroelectronics 微控制器的網(wǎng)站)©2007 MXCHIP Corporation. All rights reserved.www.mxchip.

52、co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例6 怎樣使用STM32F10xxx EXTI控制器該節(jié)介紹了如何使用EXTI固件庫(kù)把GPIO引腳配置為一個(gè)外部中斷,如何翻轉(zhuǎn)一個(gè)LED燈。給出的示例程序使用了大部分EXTI驅(qū)動(dòng)的功能:配置,使能,軟件掛起位,獲得EXTI狀態(tài),清除掛起位。6.1硬件描述下圖顯示了如何將一個(gè)按鈕連接到EXTI線上,一個(gè)LED接到隨意的一個(gè)GPIO引腳。按鈕用作EXTI的邊沿觸發(fā)而LED用來(lái)指示燈。6.2固件描述提供的固件庫(kù)包括了EXTI驅(qū)動(dòng),它通過(guò)一系列的函數(shù)支持所有的EXTI特性。并給出了一個(gè)使用了大部分功

53、能的示例。在這個(gè)示例程序中,EXTI Line9配置為在下降沿產(chǎn)生中斷。在中斷處理程序中,連接到PC6的LED燈翻轉(zhuǎn),也就是說(shuō)在每次下降沿翻轉(zhuǎn)。©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例可參見EXTI示例程序(STMicroelectronics 微控制器的網(wǎng)站)。6.3總結(jié)使用EXTI控制器,我們所需要做的就是簡(jiǎn)單的硬件連接和簡(jiǎn)單的軟件配置。7 PWR應(yīng)用示例這部分提供了STM32F10xxx PWR外設(shè)的

54、實(shí)際應(yīng)用示例7.1STM32F10xxx的停止模式這節(jié)介紹了使用PWR固件庫(kù)如何使系統(tǒng)進(jìn)入停止模式,如何使用EXTI Line中斷喚醒系統(tǒng)。并給出了一個(gè)使用了大部分PWR驅(qū)動(dòng)功能的示例程序。©2007 MXCHIP Corporation. All rights reserved.www.mxchip.co025STM32F101xx和STM32F103xx內(nèi)核和系統(tǒng)外設(shè)應(yīng)用示例7.1.1硬件描述下圖給出的是示例程序使用的硬件連接7.1.2固件描述給出的固件庫(kù)包含有PWR驅(qū)動(dòng),它通過(guò)一系列的函數(shù)來(lái)支持所有PWR的特性。給出了一個(gè)使用了大部分功能的示例程序示例程序展示了系統(tǒng)如何進(jìn)入STOP模式,使用EXTI Line中斷從STOP模式喚醒。EXTI Line源為PB9和RTC定時(shí)器。EXTI line9(PB9)配置為在上升沿產(chǎn)生一個(gè)中斷,EXTI Line17(RTC Alarm)配置為

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論