嵌入式單片機(jī)STM32應(yīng)用技術(shù)(課本)_第1頁
嵌入式單片機(jī)STM32應(yīng)用技術(shù)(課本)_第2頁
已閱讀5頁,還剩54頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 錄SAIU R20 1 6 第1頁第1章.初識STM32 11.1.課前預(yù)習(xí) 11.2.概述 11.3.什么是STM3211.4. STM32能做什么 21.5. STM32怎么選型 31.5.1. STM32分類 31.5.2. STM32命名法 41.5.3.選擇合適的MCU 41.5.4. PCB哪打樣61.6.總結(jié) 71.7.課后練習(xí) 7第2章. STM32的結(jié)構(gòu)和組成 82.1.課前預(yù)習(xí) 82.2.概述 82.3.什么是寄存器 82.4. STM 32長啥樣82.5.芯有什么102.5.1. ICode總線102.5.2.驅(qū)動(dòng)單元102.5.3.被動(dòng)單元112.6.存儲(chǔ)器映射132

2、.7.寄存器映射142.7.1. STM32的外設(shè)地址映射 152.7.2.總線基地址152.7.3.外設(shè)基地址152.7.4.外設(shè)寄存器162.8. C語對寄存器的封裝162.8.1.封裝總線和外設(shè)基地址 162.8.2.封裝寄存器列表 172.9.課后練習(xí) 20第3章.初識STM32 標(biāo)準(zhǔn)庫 213.1.課前預(yù)習(xí) 213.2.概述 213.3.庫錄、件簡介 213.4. STM32F10 x_StdPeriph_Driver 件夾243.5.庫各件間的關(guān)系 263.6.初識庫函數(shù)28錄第2頁SAIUR201 6陳德師編著3.7.課后練習(xí) 29第4章. GPIO的使 304.1.課前預(yù)習(xí) 3

3、04.2.概述 304.3. GPIO簡介304.4. GPIO框圖剖析 314.4.1.保護(hù)極管及上、下拉電阻 314.4.2. P-MOS管和N-MOS管 314.4.3.輸出數(shù)據(jù)寄存器 334.4.4.復(fù)功能輸出 344.4.5.輸數(shù)據(jù)寄存器 344.4.6.復(fù)功能輸 344.4.7.模擬輸輸出 344.5. GPIO作模式 354.5.1.輸模式模擬浮空上拉下拉) 354.5.2.輸出模式推挽開漏)354.5.3.復(fù)功能推挽開漏)354.6.點(diǎn)亮LED-硬件設(shè)計(jì) 374.7.點(diǎn)亮LED-編程要點(diǎn) 384.8.點(diǎn)亮LED-代碼分析 384.8.1. LED燈引腳宏定義384.8.2.控制

4、LED 燈亮滅狀態(tài)的宏定義 394.8.3. LED GPIO初始化函數(shù) 404.8.4.主函數(shù)414.9.點(diǎn)亮LED-下載驗(yàn)證 424.10.課后練習(xí)42第5章. STM32 RCC 時(shí)鐘系統(tǒng) 435.1.課前預(yù)習(xí) 435.2.概述 435.3. RCC主要作時(shí)鐘部分 435.4. RCC框圖剖析時(shí)鐘部分 435.5.系統(tǒng)時(shí)鐘 445.5.1. HSE速外部時(shí)鐘信號445.5.2. PLL時(shí)鐘源 455.5.3. PLL時(shí)鐘PLLCLK 455.5.4.系統(tǒng)時(shí)鐘SYSCLK 455.5.5. AHB總線時(shí)鐘HCLK 455.5.6. APB2總線時(shí)鐘HCLK245錄SAIU R20 1 6

5、第3頁5.5.7.總線時(shí)鐘HCLK1465.6.設(shè)置系統(tǒng)時(shí)鐘庫函數(shù) 465.7.其他時(shí)鐘 475.7.1. USB時(shí)鐘475.7.2. Cortex系統(tǒng)時(shí)鐘475.7.3. ADC時(shí)鐘 485.7.4. RTC時(shí)鐘、獨(dú)看門狗時(shí)鐘 485.7.5. MCO時(shí)鐘輸出 485.8.配置系統(tǒng)時(shí)鐘實(shí)驗(yàn) 485.8.1.使HSE485.8.2.使HSI 485.8.3.硬件設(shè)計(jì)495.8.4.軟件設(shè)計(jì)495.8.5.編程要點(diǎn)495.8.6.代碼分析495.8.7.下載驗(yàn)證54第6章. STM32中斷應(yīng)概覽 556.1.課前預(yù)習(xí) 556.2.概述 556.3.異常類型 556.4. NVIC簡介566.5.

6、 NVIC寄存器簡介566.6. NVIC中斷配置固件庫576.7.優(yōu)先級的定義 586.7.1.優(yōu)先級定義586.7.2.優(yōu)先級分組586.8.中斷編程 596.9.課后練習(xí) 60第7章. EXTI外部中斷事件控制器 617.1.課前預(yù)習(xí) 617.2.概述 617.3. EXTI簡介617.4. EXTI功能框圖 617.5.中斷事件線 637.6. EXTI初始化結(jié)構(gòu)體詳解 647.7.外部中斷控制實(shí)驗(yàn) 657.7.1.硬件設(shè)計(jì)657.7.2.軟件設(shè)計(jì)65錄第4頁SAIUR201 6陳德師編著7.7.3.編程要點(diǎn)657.7.4.代碼分析657.7.5.下載驗(yàn)證697.8.課后練習(xí) 69第8

7、章. SysTick系統(tǒng)定時(shí)器 708.1.課前預(yù)習(xí) 708.2.概述 708.3. SysTick簡介 708.4. SysTick寄存器介紹 708.5. SysTick定時(shí)實(shí)驗(yàn) 728.5.1.硬件設(shè)計(jì)728.5.2.軟件設(shè)計(jì)728.5.3.編程要點(diǎn)728.5.4.代碼分析738.6.課后練習(xí) 79第9章. USART串通訊 809.1.課前預(yù)習(xí) 809.2.概述 809.3.串通訊協(xié)議簡介 809.3.1.物理層809.3.2.協(xié)議層849.4. STM32的USART 簡介 859.5. USART 功能框圖859.6. USART 初始化結(jié)構(gòu)體詳解 909.7. USART1 接發(fā)

8、通信實(shí)驗(yàn)919.7.1.硬件設(shè)計(jì)929.7.2.軟件設(shè)計(jì)929.7.3.編程要點(diǎn)929.7.4.代碼分析939.7.5.下載驗(yàn)證979.8.課后練習(xí) 97第10章. DMA直接存儲(chǔ)區(qū)訪問 9810.1.課前預(yù)習(xí)9810.2.概述9810.3. DMA簡介9810.4. DMA功能框圖 9810.5. DMA數(shù)據(jù)配置10010.6. DMA初始化結(jié)構(gòu)體詳解 101錄SAIU R20 1 6 第5頁10.7. DMA存儲(chǔ)器到存儲(chǔ)器模式實(shí)驗(yàn)10310.7.1.硬件設(shè)計(jì)10310.7.2.軟件設(shè)計(jì)10310.7.3.編程要點(diǎn)10310.7.4.代碼分析10410.7.5.下載驗(yàn)證10710.8.課后練

9、習(xí)107第11章. TIM基本定時(shí)器 10811.1.課前預(yù)習(xí)10811.2.概述10811.3.定時(shí)器分類 10811.4.基本定時(shí)器功能框圖講解10911.5.定時(shí)器初始化結(jié)構(gòu)體詳解11011.6.基本定時(shí)器定時(shí)實(shí)驗(yàn)11111.6.1.硬件設(shè)計(jì)11111.6.2.軟件設(shè)計(jì)11111.6.3.編程要點(diǎn)11111.6.4.軟件分析11111.6.5.下載驗(yàn)證11411.7.課后練習(xí)114第12章. TIM級定時(shí)器 11512.1.課前預(yù)習(xí)11512.2.概述11512.3.級控制定時(shí)器 11512.4.級控制定時(shí)器功能框圖11612.4.1.時(shí)鐘源11712.4.2.外部時(shí)鐘模式1 11712

10、.4.3.外部時(shí)鐘模式2 11812.4.4.內(nèi)部觸發(fā)輸 11912.4.5.輸捕獲12112.4.6.輸出較12212.4.7.斷路功能12512.5.輸捕獲應(yīng)12512.5.1.測量頻率12612.5.2.測量脈寬12612.6. PWM輸模式12612.7.輸出較應(yīng)12812.7.1. PWM輸出模式128錄第6頁SAIUR201 6陳德師編著12.7.2. PWM邊沿對齊模式12812.7.3. PWM中對齊模式12912.8.定時(shí)器初始化結(jié)構(gòu)體詳解12912.8.1. TIM_TimeBaseInitTypeDef13012.8.2. TIM_OCInitTypeDef13012.8

11、.3. TIM_ICInitTypeDef 13112.8.4. TIM_BDTRInitTypeDef13212.9. PWM互補(bǔ)輸出實(shí)驗(yàn) 13312.9.1.硬件設(shè)計(jì)13312.9.2.軟件設(shè)計(jì)13312.9.3.編程要點(diǎn)13312.9.4.軟件分析13412.9.5.下載驗(yàn)證136第13章. I2C通訊 13813.1.課前預(yù)習(xí)13813.2.概述13813.3. I2C協(xié)議簡介13813.3.1. I2C物理層 13913.3.2.協(xié)議層14013.3.3.通訊的起始和停信號 14113.4. STM32的I2C特性及架構(gòu) 14413.4.1. STM32的I2C外設(shè)簡介 14413.

12、4.2. STM32的I2C架構(gòu)剖析 14513.4.3.通訊過程14713.5. I2C初始化結(jié)構(gòu)體詳解 14913.6. 讀寫EEPROM 實(shí)驗(yàn)15013.6.1.硬件設(shè)計(jì)15013.6.2.軟件設(shè)計(jì)15113.6.3.編程要點(diǎn)15113.6.4.代碼分析15213.6.5.下載驗(yàn)證16713.7.課后練習(xí)168第14章. SPI通訊 16914.1.課前預(yù)習(xí)16914.2.概述16914.3. SPI協(xié)議簡介16914.3.1. SPI物理層16914.3.2.協(xié)議層171錄SAIU R20 1 6 第7頁14.4. STM32的SPI特性及架構(gòu) 17314.4.1. STM32的SPI

13、外設(shè)簡介 17314.4.2. TM32的SPI架構(gòu)剖析 17414.4.3.通訊過程17514.5. SPI初始化結(jié)構(gòu)體詳解 17714.6. 讀寫串FLASH 實(shí)驗(yàn) 17814.6.1.硬件設(shè)計(jì)17914.6.2.軟件設(shè)計(jì)17914.6.3.編程要點(diǎn)18014.6.4.代碼分析18014.6.5.下載驗(yàn)證19814.7.課后練習(xí)198第15章.陀螺儀姿態(tài)檢測 19915.1.課前預(yù)習(xí)19915.2.概述19915.3.姿態(tài)檢測19915.3.1.基本認(rèn)識19915.3.2.坐標(biāo)系20015.4.利陀螺儀檢測度20115.5.利加速度計(jì)檢測度 20215.6.利磁場檢測度 20315.7.利

14、GPS檢測度 20415.8.姿態(tài)融合與四元數(shù) 20415.9. MPU6050模塊簡介 20415.9.1. MPU6050模塊功能及外觀20415.9.2. MPU6050模塊的引腳功能說明 20515.9.3. MPU6050模塊的硬件原理圖20515.10. MPU6050模塊的特性參數(shù)20615.11. MPU6050獲取原始數(shù)據(jù)實(shí)驗(yàn) 20715.11.1.硬件設(shè)計(jì) 20715.11.2.配套程序簡介 20815.11.3.軟件設(shè)計(jì) 20915.11.4.程序設(shè)計(jì)要點(diǎn) 20915.11.5.代碼分析 20915.11.6.下載驗(yàn)證 21515.12. MPU6050利DMP 進(jìn)姿態(tài)解

15、算21615.12.1.硬件設(shè)計(jì) 21615.12.2.軟件設(shè)計(jì) 21615.12.3.程序設(shè)計(jì)要點(diǎn) 216錄第8頁SAIUR201 6陳德師編著15.12.4.代碼分析 21615.12.5.下載驗(yàn)證 22615.13. MPU6050使第三上位機(jī) 22715.13.1.硬件設(shè)計(jì) 22715.13.2.軟件設(shè)計(jì) 22715.13.3.程序設(shè)計(jì)要點(diǎn) 22715.13.4.代碼分析 22715.13.5.下載驗(yàn)證 231第1章初識STM32SAIU R20 1 6 第1頁第1章.初識STM321.1.課前預(yù)習(xí)在書上找到答案。1.什么是STM32。2. STM32能做什么什么?1.2.概述本章所講

16、內(nèi)容:(1)STM32 簡介(2)STM32 功能介紹1.3.什么是STM32STM32,從字上來理解,ST 是意法半導(dǎo)體,M是Microelectronics 的縮寫,32表32位,合起來理解,STM32 就是指ST 公司開發(fā)的32位微控制器。在如今的32位控制器當(dāng)中,STM32 可以說是最璀璨的新星,它受寵若嬌,受程師和市場的青睞,芯能出其右。51是嵌式學(xué)習(xí)中款門級的精典MCU,因其結(jié)構(gòu)簡單,易于教學(xué),且可以通過串編程不需要額外的仿真器,所以在教學(xué)時(shí)被量采,今很多學(xué)在嵌式教學(xué)中的還是51。51誕于70年代,屬于傳統(tǒng)的8位單機(jī),如今,久經(jīng)歲的洗禮,既有其輝煌有其不。現(xiàn)在的市場產(chǎn)品競爭越來越激

17、烈,對成本極其敏感,相應(yīng)地對MCU 的性能要求也更苛刻:更多功能,更低功耗,易界和多任務(wù)。對這些要求,51現(xiàn)有的資源就顯得得抓襟見肘。所以論是校教學(xué)還是市場需求,都急需款新的MCU 來為這個(gè)領(lǐng)域注新的活。基于這樣的市場需求,ARM公司推出了其全新的基于ARMv7 架構(gòu)的32位Cortex-M3微控制器內(nèi)核。緊隨其后,ST(意法半導(dǎo)體)公司就推出了基于Cortex-M3內(nèi)核的MCU STM32。STM32 憑借其產(chǎn)品線的多樣化、極的性價(jià)、簡單易的庫開發(fā)式,迅速在眾多Cortex-M3 MCU中脫穎出,成為最閃亮的顆新星。STM32 上市就迅速占領(lǐng)了中低端MCU 市場,受到了市場和程師的青睞,頗有

18、星燎原之勢。作為名合格的嵌式程師,對新出現(xiàn)的技術(shù),我們不是充不聞,是要盡快吻合市場的需要,跟上技術(shù)的潮流。第1章初識STM32第2頁SAIUR201 6圖1-2 STM32F103 搭建的系統(tǒng)界如今STM32 的出現(xiàn)就是種趨勢,種潮流,我們要做的就是搭上這趟快車,讓的技術(shù)更有競爭。1.4. STM32能做什么STM32 屬于個(gè)微控制器,帶了各種常通信接,如USART、I2C、SPI等,可接常多的傳感器,可以控制很多的設(shè)備。現(xiàn)實(shí)活中,我們接觸到的很多電器產(chǎn)品都有STM32 的影,如智能環(huán),微型四軸飛器,平衡車、移動(dòng)POST 機(jī),智能電飯鍋,3D 打印機(jī)等等。下我們以最近最為爆的兩個(gè)產(chǎn)品來講解下,

19、個(gè)是環(huán),個(gè)是飛器。圖1-1三星GearFit智能環(huán)紅圈:STM32F439ZIY6S 處理器,2048KB FLASH ,256KB RAM ,WLCSP143 封裝。橙圈:MacronixMX69V28F64 16 MB 閃存,基于MCP 封裝的存儲(chǔ)器,是種包含了NOR 和SRAM 的閃存,這在環(huán)機(jī)這種移動(dòng)設(shè)備中經(jīng)常使,優(yōu)點(diǎn)是體積,可以減PCB 的尺。這個(gè)閃存的439的FSMC 接驅(qū)動(dòng)。黃圈:InvenSense MPU-6500 陀螺儀加速度計(jì),439的I2C接驅(qū)動(dòng)。綠圈:博通BCM4334WKUBG 芯,持802.11n,藍(lán)4.0+HS以及FM接收芯,439的SDIO或者SPI接驅(qū)動(dòng)。顯

20、:1.84可彎曲屏幕(SuperAMOLED),432 x 128像素。觸摸部分439的I2C接驅(qū)動(dòng),OLED 顯部分LTDC 接驅(qū)動(dòng)。除了這個(gè)重要資源的對,我們的霸道開發(fā)板上還集成了以太,頻,CAN, 485, 232, USB 轉(zhuǎn)串,蜂鳴器, LED , 電容按鍵等外設(shè)資源,可以充分的學(xué)習(xí)STM32F103ZET6 這個(gè)芯。在板上,還可以跑系統(tǒng)ucosiii,學(xué)習(xí)圖形界emwin。如果功夫所,學(xué)完之后,都可以做個(gè)類似Gear Fit這樣的環(huán)。可很多會(huì)說,Gear Fit涉及硬件和軟件,整個(gè)系統(tǒng)這么復(fù)雜,并不是個(gè)可以完成的。說的沒錯(cuò),我們可以做不了,但是我們第1章初識STM32SAIU R2

21、0 1 6 第3頁的能可以限接近,多學(xué)點(diǎn),技多不壓嘛。現(xiàn)在機(jī)常熱,端的機(jī)STM32 做不來,但是型的四軸飛器STM32 還是綽綽有余的。如圖1-3所飛器的基本都可以STM32 搞定。圖1-3四軸飛器1.5. STM32怎么選型1.5.1. STM32分類STM32 有很多系列,可以滿市場的各種需求,從內(nèi)核上分有Cortex-M0、M3、M4和M7這種,每個(gè)內(nèi)核概分為主流、性能和低功耗。具體的見表格1-1。表格1-2 STM8和STM32 分類單純從學(xué)習(xí)的度出發(fā),可以選擇F1和F4,F(xiàn)1代表了基礎(chǔ)型,基于Cortex-M3內(nèi)核,主頻為72MHZ,F(xiàn)4代表了性能,基于Cortex-M4內(nèi)核,主頻1

22、80M。之于F1,F(xiàn)4(429系列以上)除了內(nèi)核不同和主頻的提升外,升級的明顯特就是帶了LCD 控制器和攝像頭接,持SDRAM,這個(gè)區(qū)別在項(xiàng)選型上會(huì)被優(yōu)先考慮。但是從學(xué)教學(xué)和戶初學(xué)來說,還是選F1系列,前在市場上資料最多,產(chǎn)品占有量最多的就是F1系列的STM32。第1章初識STM32第4頁SAIUR201 61.5.2. STM32命名法這我們以STM32F103ZET6 來講解下STM32 的命名法。表1-3 STM32F103ZET6 命名解釋有關(guān)更詳細(xì)的命名法見圖1-4。圖1-4 STM8和STM32 命名法1.5.3.選擇合適的MCU了解了STM32 的分類和命名法之后,就可以根據(jù)項(xiàng)的

23、具體需求先概選擇哪類內(nèi)核的MCU,普通應(yīng),不需要接屏幕的般選擇Cortex-M3內(nèi)核的F1系列,如果要追求性能,需要量的數(shù)據(jù)運(yùn)算,且需要外接RGB屏幕的則選擇Cortex-M4內(nèi)核的F429 系列。明確了向之后,接下來就是細(xì)分選型,先確定引腳,引腳多的功能就多,價(jià)格也貴,具體得根據(jù)實(shí)際項(xiàng)中需要使到什么功能,夠就好。確定好了引腳數(shù)之后再選擇FLASH ,相同引腳數(shù)的MCU 會(huì)有不同的FLASH 可供選擇,這個(gè)也是根據(jù)實(shí)際需要選擇,程序的就選擇點(diǎn)的FLASH,要是產(chǎn)品量產(chǎn),這些省下來的都是錢啊。有些出貨量以KK(百萬數(shù)量級)為單位的產(chǎn)品,不僅是MCU,連電第1章初識STM32SAIU R20 1

24、6 第5頁阻電容能少就少,更甚者連PCB 的過孔的多少都有講究。項(xiàng)中的元器件的選型的深的很,很多學(xué)問。如何分配原理圖IO在畫原理圖之前,般的做法是先把引腳分類好,然后才開始畫原理圖,引腳分類具體見表格1-5。表格1-5畫原理圖時(shí)的引腳分類要想根據(jù)功能來分配,那就得先知道每個(gè)IO的功能說明,這個(gè)我們可以從官的數(shù)據(jù)冊找到。在學(xué)習(xí)的時(shí)候,有兩個(gè)官資料我們會(huì)經(jīng)常到,個(gè)是參考冊(英叫Reference manual),另外個(gè)是數(shù)據(jù)冊(英叫Data Sheet)。兩者的具體區(qū)別見表格1-6。表格1-6參考冊和數(shù)據(jù)冊的內(nèi)容區(qū)別句話概括:數(shù)據(jù)冊主要于芯選型和設(shè)計(jì)原理圖時(shí)參考,參考冊主要于在編程的時(shí)候查閱。官的

25、這兩個(gè)檔可以從官址下載:/document/list/index/category-150在數(shù)據(jù)冊中,有關(guān)引腳定義的部分在Pinouts and pin description 這個(gè)節(jié)中,具體定義見表格1-7。第1章初識STM32第6頁SAIUR201 6表格1-7數(shù)據(jù)冊中對引腳定義表格1-8對引腳定義的解讀開始分配原理圖IO如MCU 型號是STM32F103ZET6,封裝為LQFP144,我們在數(shù)據(jù)冊中找到這個(gè)封裝的引腳定義,然后根據(jù)引腳序號,個(gè)個(gè)復(fù)制出來,整理成excel 表。具體整理法按照表格5-4畫原理圖時(shí)的引腳分類即可。分配好之后就開始畫原理圖。1.5.4. PCB哪打樣設(shè)計(jì)好原理圖

26、,畫好PCB 之后,需要把板做出來,進(jìn)軟硬件聯(lián)調(diào)。先得PCB 打樣,可以在上找到些專業(yè)的公司幫忙做,如果你夠懶,不想焊接電阻電容三極管什么的,還可以幫你把PCB 樣板上的阻容貼好給你,打樣貼條龍。第1章初識STM32SAIU R20 1 6 第7頁1.6.總結(jié)本章介紹了STM32 的基本概念、應(yīng)領(lǐng)域和芯的選型法。主要對STM32 芯有個(gè)較清晰的認(rèn)識,后續(xù)章節(jié)將會(huì)詳細(xì)介紹這個(gè)芯的各個(gè)模塊和功能。1.7.課后練習(xí)1.查看實(shí)訓(xùn)室的機(jī)和機(jī)器使的芯是哪個(gè)?哪些使的是STM32?第2章.STM32的結(jié)構(gòu)和組成第8頁SAIUR201 6陳德師編著第2章. STM32的結(jié)構(gòu)和組成2.1.課前預(yù)習(xí)在書上找到答案

27、。1. STM32有什么?2. STM32的開發(fā)式和51單機(jī)有什么區(qū)別?2.2.概述本章所講內(nèi)容:(1)STM32 芯結(jié)構(gòu)(2)寄存器映射2.3.什么是寄存器我們經(jīng)常說寄存器,那么什么是寄存器?這是我們本章需要講解的內(nèi)容,在學(xué)習(xí)的過程中,家?guī)е@個(gè)疑問好好思考下,到最后看看家能否句話給寄存器下個(gè)定義。2.4. STM 32長啥樣STM32 的基本結(jié)構(gòu)我們開發(fā)板中使的芯是144pin 的STM32F103ZET6,具體見圖6-1。這個(gè)就是我們接下來要學(xué)習(xí)的STM32,它將帶領(lǐng)我們進(jìn)嵌式的殿堂。芯正是絲印,ARM 應(yīng)該是表該芯使的是ARM 的內(nèi)核,STM32F103ZET6 是芯型號,后的字應(yīng)該是

28、跟產(chǎn)批次相關(guān),最上的是ST 的。芯四周是引腳,左下的圓點(diǎn)表1腳,然后從1腳起按照逆時(shí)針的順序排列(所有芯的引腳順序都是逆時(shí)針排列的)。開發(fā)板中把芯的引腳引出來,連接到各種傳感器上,然后在STM32 上編程(實(shí)際就是通過程序控制這些引腳輸出電平或者低電平)來控制各種傳感器作,通過做實(shí)驗(yàn)的式來學(xué)習(xí)STM32 芯的各個(gè)資源。開發(fā)板是種評估板,板載資源常豐富,引腳復(fù)較多,求在個(gè)板上驗(yàn)證芯的全部功能。圖2-1 STM32F103ZET6 實(shí)物圖(紅框中部分)第2章.STM32的結(jié)構(gòu)和組成SAIU R20 1 6 第9頁圖2-1 STM32F103ZET6 實(shí)物圖圖2-2 STM32F103ZET6 正引

29、腳圖第2章.STM32的結(jié)構(gòu)和組成第10頁SAIUR2016陳德師編著2.5.芯有什么我們看到的STM32 芯是已經(jīng)封裝好的成品,主要由內(nèi)核和上外設(shè)組成。若與電腦類,內(nèi)核與外設(shè)就如同電腦上的CPU 與主板、內(nèi)存、顯卡、硬盤的關(guān)系。STM32F103 采的是Cortex-M3內(nèi)核,內(nèi)核即CPU,由ARM 公司設(shè)計(jì)。ARM 公司并不產(chǎn)芯,是出售其芯技術(shù)授權(quán)。芯產(chǎn)商(SOC)如ST、TI、Freescale,負(fù)責(zé)在內(nèi)核之外設(shè)計(jì)部件并產(chǎn)整個(gè)芯,這些內(nèi)核之外的部件被稱為核外外設(shè)或上外設(shè)。如、USART(串)、I2C、SPI等都叫做上外設(shè)。具體見圖2-3。圖2-3 STM32芯架構(gòu)簡圖芯(這指內(nèi)核,或者叫

30、CPU)和外設(shè)之間通過各種總線連接,其中驅(qū)動(dòng)單元有4個(gè),被動(dòng)單元也有4個(gè),具體見圖2-4。為了便理解,我們都可以把驅(qū)動(dòng)單元理解成是CPU 部分,被動(dòng)單元都理解成外設(shè)。下我們簡單介紹下驅(qū)動(dòng)單元和被動(dòng)單元的各個(gè)部件。2.5.1. ICode總線ICode中的I表Instruction,即指令。我們寫好的程序編譯之后都是條條指令,存放在FLASH 中,內(nèi)核要讀取這些指令來執(zhí)程序就必須通過ICode總線,它乎每時(shí)每刻都需要被使,它是專門來取指的。2.5.2.驅(qū)動(dòng)單元DCode 總線第2章.STM32的結(jié)構(gòu)和組成SAIUR201 6 第11頁DCode 中的D 表Data,即數(shù)據(jù),那說明這條總線是來取數(shù)

31、的。我們在寫程序的時(shí)候,數(shù)據(jù)有常量和變量兩種,常量就是固定不變的,C 語中的const關(guān)鍵字修飾,是放到內(nèi)部的FLASH 當(dāng)中的,變量是可變的,不管是全局變量還是局部變量都放在內(nèi)部的SRAM。因?yàn)閿?shù)據(jù)可以被Dcode 總線和DMA 總線訪問,所以為了避免訪問沖突,在取數(shù)的時(shí)候需要經(jīng)過個(gè)總線矩陣來仲裁,決定哪個(gè)總線在取數(shù)。系統(tǒng)總線系統(tǒng)總線主要是訪問外設(shè)的寄存器,我們通常說的寄存器編程,即讀寫寄存器都是通過這根系統(tǒng)總線來完成的。DMA 總線DMA 總線也主要是來傳輸數(shù)據(jù),這個(gè)數(shù)據(jù)可以是在某個(gè)外設(shè)的數(shù)據(jù)寄存器,可以在SRAM,可以在內(nèi)部的FLASH。因?yàn)閿?shù)據(jù)可以被Dcode 總線和DMA 總線訪問,

32、所以為了避免訪問沖突,在取數(shù)的時(shí)候需要經(jīng)過個(gè)總線矩陣來仲裁,決定哪個(gè)總線在取數(shù)。2.5.3.被動(dòng)單元內(nèi)部的閃存存儲(chǔ)器內(nèi)部的閃存存儲(chǔ)器即FLASH,我們編寫好的程序就放在這個(gè)地。內(nèi)核通過ICode總線來取的指令。內(nèi)部的SRAM內(nèi)部的SRAM,即我們通常說的RAM,程序的變量,堆棧等的開銷都是基于內(nèi)部的SRAM。內(nèi)核通過DCode 總線來訪問它。FSMCFSMC 的英全稱是Flexible static memory controller,叫靈活的靜態(tài)的存儲(chǔ)器控制器,是STM32F10 xx 中個(gè)很有特的外設(shè),通過FSMC,我們可以擴(kuò)展內(nèi)存,如外部的SRAM,NANDFLASH和NORFLASH。

33、但有點(diǎn)我們要注意的是,F(xiàn)SMC 只能擴(kuò)展靜態(tài)的內(nèi)存,即名稱的S:static,不能是動(dòng)態(tài)的內(nèi)存,如SDRAM 就不能擴(kuò)展。第2章.STM32的結(jié)構(gòu)和組成第12頁SAIUR2016陳德師編著AHB 到APB 的橋從AHB 總線延伸出來的兩條APB2 和APB1 總線,上掛載著STM32 各種各樣的特外設(shè)。我們經(jīng)常說的、串、I2C、SPI這些外設(shè)就掛載在這兩條總線上,這個(gè)是我們學(xué)習(xí)STM32的重點(diǎn),就是要學(xué)會(huì)編程這些外設(shè)去驅(qū)動(dòng)外部的各種設(shè)備。圖2-4 STM32F10 xx系統(tǒng)框圖(不包括互聯(lián)型)第2章.STM32的結(jié)構(gòu)和組成SAIUR201 6 第13頁2.6.存儲(chǔ)器映射在圖2-4中,被控單元的

34、FLASH,RAM,F(xiàn)SMC 和AHB 到APB 的橋(即上外設(shè)),這些功能部件共同排列在個(gè)4GB的地址空間內(nèi)。我們在編程的時(shí)候,可以通過他們的地址找到他們,然后來操作他們(通過C 語對它們進(jìn)數(shù)據(jù)的讀和寫)。存儲(chǔ)器本不具有地址信息,它的地址是由芯商或戶分配,給存儲(chǔ)器分配地址的過程就稱為存儲(chǔ)器映射,具體見圖2-5。如果給存儲(chǔ)器再分配個(gè)地址就叫存儲(chǔ)器重映射。圖2-5存儲(chǔ)器映射第2章.STM32的結(jié)構(gòu)和組成第14頁SAIUR2016陳德師編著在這4GB的地址空間中,ARM 已經(jīng)粗線條的平均分成了8個(gè)塊,每塊512MB,每個(gè)塊也都規(guī)定了途,具體分類見表格6-1。每個(gè)塊的都有512MB,顯然這是常的,芯

35、商在每個(gè)塊的范圍內(nèi)設(shè)計(jì)各具特的外設(shè)時(shí)并不定都得完,都是只了其中的部分已。表格2-1存儲(chǔ)器功能分類在這8個(gè)Block ,有3個(gè)塊常重要,也是我們最關(guān)的三個(gè)塊。Block0 來設(shè)計(jì)成內(nèi)部FLASH,Block1 來設(shè)計(jì)成內(nèi)部RAM,Block2 來設(shè)計(jì)成上的外設(shè),下我們簡單的介紹下這三個(gè)Block 的具體區(qū)域的功能劃分。存儲(chǔ)器Block0 內(nèi)部區(qū)域功能劃分Block0 主要于設(shè)計(jì)內(nèi)的FLASH , 我們使的STM32F103ZET6 的FLASH 是512KB,屬于容量。要在芯內(nèi)部集成更的FLASH 或者SRAM 都意味著芯成本的增加,往往內(nèi)集成的FLASH 都不會(huì)太,ST 能在追求性價(jià)的同時(shí)做到

36、512KB,實(shí)乃良之舉。2.7.寄存器映射我們知道,存儲(chǔ)器本沒有地址,給存儲(chǔ)器分配地址的過程叫存儲(chǔ)器映射,那什么叫寄存器映射?寄存器到底是什么?在存儲(chǔ)器Block2 這塊區(qū)域,設(shè)計(jì)的是上外設(shè),它們以四個(gè)字節(jié)為個(gè)單元,共32bit,每個(gè)單元對應(yīng)不同的功能,當(dāng)我們控制這些單元時(shí)就可以驅(qū)動(dòng)外設(shè)作。我們可以找到每個(gè)單元的起始地址,然后通過C 語指針的操作式來訪問這些單元,如果每次都是通過這種地址的式來訪問,不僅不好記憶還容易出錯(cuò),這時(shí)我們可以根據(jù)每個(gè)單元功能的不同,以功能為名給這個(gè)內(nèi)存單元取個(gè)別名,這個(gè)別名就是我們經(jīng)常說的寄存器,這個(gè)給已經(jīng)分配好地址的有特定功能的內(nèi)存單元取別名的過程就叫寄存器映射。如

37、,我們找到GPIOB端的輸出數(shù)據(jù)寄存器ODR 的地址是0 x4001 0C0C(于這個(gè)地址如何找到可以先跳過,后我們會(huì)有詳細(xì)的講解),ODR 寄存器是32bit,低16bit有效,對應(yīng)著16個(gè)外部,寫0/1對應(yīng)的的IO則輸出低電平。現(xiàn)在我們通過C語指針的操作式,讓GPIOB的16個(gè)IO都輸出電平,具體見代碼2-1。第2章.STM32的結(jié)構(gòu)和組成SAIUR201 6 第15頁代碼2-1通過絕對地址訪問內(nèi)存單元0 x4001 0C0C 在我們看來是GPIOB端ODR 的地址,但是在編譯器看來,這只是個(gè)普通的變量,是個(gè)即數(shù),要想讓編譯器也認(rèn)為是指針,我們得進(jìn)強(qiáng)制類型轉(zhuǎn)換,把它轉(zhuǎn)換成指針,即(unsi

38、gned int *)0 x4001 0C0C,然后再對這個(gè)指針進(jìn)*操作。剛剛我們說了,通過絕對地址訪問內(nèi)存單元不好記憶且容易出錯(cuò),我們可以通過寄存器的式來操作,具體見代碼2-2。代碼2-2通過寄存器別名式訪問內(nèi)存單元為了便操作,我們脆把指針操作也定義到寄存器別名,具體見代碼2-3。代碼2-3通過寄存器別名訪問內(nèi)存單元2.7.1. STM32的外設(shè)地址映射上外設(shè)區(qū)分為三條總線,根據(jù)外設(shè)速度的不同,不同總線掛載著不同的外設(shè),APB1 掛載低速外設(shè),APB2 和AHB 掛載速外設(shè)。相應(yīng)總線的最低地址我們稱為該總線的基地址,總線基地址也是掛載在該總線上的個(gè)外設(shè)的地址。其中APB1 總線的地址最低,外

39、設(shè)從這開始,也叫外設(shè)基地址。2.7.2.總線基地址表格2-2總線基地址表格2-2的相對外設(shè)基地址偏移即該總線地址與上外設(shè)基地址0 x4000 0000 的差值。關(guān)于地址的偏移我們后還會(huì)講到。2.7.3.外設(shè)基地址總線上掛載著各種外設(shè),這些外設(shè)也有的地址范圍,特定外設(shè)的個(gè)地址稱為“XX 外設(shè)基地址,也叫XX 外設(shè)的邊界地址。具體有關(guān)STM32F10 xx 外設(shè)的邊界地址請參考STM32F10 xx 參考冊的2.3節(jié)的存儲(chǔ)器映射的表1:STM32F10 xx 寄存器邊界地址。這我們以GPIO這個(gè)外設(shè)來講解外設(shè)的基地址,GPIO屬于速的外設(shè),掛載到APB2 總線上,具體見表格2-3。第2章.STM3

40、2的結(jié)構(gòu)和組成第16頁SAIUR2016陳德師編著表格2-3外設(shè)GPIO基地址2.7.4.外設(shè)寄存器在XX 外設(shè)的地址范圍內(nèi),分布著的就是該外設(shè)的寄存器。以GPIO外設(shè)為例,GPIO是通輸輸出端的簡稱,簡單來說就是STM32 可控制的引腳,基本功能是控制引腳輸出電平或者低電平。最簡單的應(yīng)就是把GPIO的引腳連接到LED 燈的陰極,LED 燈的陽極接電源,然后通過STM32 控制該引腳的電平,從實(shí)現(xiàn)控制LED 燈的亮滅。GPIO有很多個(gè)寄存器,每個(gè)都有特定的功能。每個(gè)寄存器為32bit,占四個(gè)字節(jié),在該外設(shè)的基地址上按照順序排列,寄存器的位置都以相對該外設(shè)基地址的偏移地址來描述。2.8. C語對

41、寄存器的封裝以上所有的關(guān)于存儲(chǔ)器映射的內(nèi)容,最終都是為家更好地理解如何C 語控制讀寫外設(shè)寄存器做準(zhǔn)備,此處是本章的重點(diǎn)內(nèi)容。2.8.1.封裝總線和外設(shè)基地址在編程上為了便理解和記憶,我們把總線基地址和外設(shè)基地址都以相應(yīng)的宏定義起來,總線或者外設(shè)都以他們的名字作為宏名,具體見代碼2-4。第2章.STM32的結(jié)構(gòu)和組成SAIUR201 6 第17頁代碼2-4總線和外設(shè)基址宏定義代碼2-4先定義了上外設(shè)基地址PERIPH_BASE,接著在PERIPH_BASE 上加各個(gè)總線的地址偏移,得到APB1 、APB2 總線的地址APB1PERIPH_BASE 、APB2PERIPH_BASE,在其之上加外設(shè)

42、地址的偏移,得到GPIOA-G的外設(shè)地址,最后在外設(shè)地址上加各寄存器的地址偏移,得到特定寄存器的地址。旦有了具體地址,就可以指針讀寫,具體見代碼2-5。代碼2-5使指針控制BSRR 寄存器2.8.2.封裝寄存器列表上的法去定義地址,還是稍顯繁瑣,例如GPIOA-GPIOE都各有組功能相同的寄存器,如GPIOA_ODR/GPIOB_ODR/GPIOC_ODR等等,它們只是地址不樣,但卻要為每個(gè)寄存器都定義它的地址。為了更便地訪問寄存器,我們引C 語中的結(jié)構(gòu)體語法對寄存器進(jìn)封裝,具體見代碼2-6。第2章.STM32的結(jié)構(gòu)和組成第18頁SAIUR2016陳德師編著代碼2-6使結(jié)構(gòu)體對GPIO寄存器組

43、的封裝這段代碼typedef關(guān)鍵字聲明了名為GPIO_TypeDef的結(jié)構(gòu)體類型,結(jié)構(gòu)體內(nèi)有7個(gè)成員變量,變量名正好對應(yīng)寄存器的名字。C 語的語法規(guī)定,結(jié)構(gòu)體內(nèi)變量的存儲(chǔ)空間是連續(xù)的,其中32位的變量占4個(gè)字節(jié),16位的變量占2個(gè)字節(jié),具體見圖2-6。圖2-6 GPIO_TypeDef結(jié)構(gòu)體成員的地址偏移也就是說,我們定義的這個(gè)GPIO_TypeDef,假如這個(gè)結(jié)構(gòu)體的地址為0 x4001 0C00(這也是第個(gè)成員變量CRL 的地址),那么結(jié)構(gòu)體中第個(gè)成員變量CRH 的地址即為0 x4001 0C00+0 x04,加上的這個(gè)0 x04,正是代表CRL 所占的4個(gè)字節(jié)地址的偏移量,其它成員變量相

44、對于結(jié)構(gòu)體地址的偏移,在上述代碼右側(cè)注釋已給。這樣的地址偏移與STM32 GPIO外設(shè)定義的寄存器地址偏移對應(yīng),只要給結(jié)構(gòu)體設(shè)置好地址,就能把結(jié)構(gòu)體內(nèi)成員的地址確定下來,然后就能以結(jié)構(gòu)體的形式訪問寄存器,具體見代碼2-7。第2章.STM32的結(jié)構(gòu)和組成SAIUR201 6 第19頁代碼2-7通過結(jié)構(gòu)體指針訪問寄存器這段代碼先GPIO_TypeDef類型定義個(gè)結(jié)構(gòu)體指針GPIOx, 并讓指針指向地址GPIOB_BASE(0 x4001 0C00),使地址確定下來,然后根據(jù)C 語訪問結(jié)構(gòu)體的語法,GPIOx-ODR及GPIOx-IDR等式讀寫寄存器。最后,我們更進(jìn)步,直接使宏定義好GPIO_Typ

45、eDef類型的指針,且指針指向各個(gè)GPIO端的地址,使時(shí)我們直接該宏訪問寄存器即可,具體代碼2-8。代碼2-8定義好GPIO端地址址針這我們僅是以GPIO這個(gè)外設(shè)為例,給家講解了C 語對寄存器的封裝。以此類推,其他外設(shè)也同樣可以這種法來封裝。好消息是,這部分作都由固件庫幫我們完成了,這我們只是分析了下這個(gè)封裝的過程,讓家知其然,也只其所以然。第2章.STM32的結(jié)構(gòu)和組成第20頁SAIUR2016陳德師編著2.9.課后練習(xí)1、什么是存儲(chǔ)器映射?什么是存儲(chǔ)器重映射?2、什么是寄存器?第3章初識STM32 標(biāo)準(zhǔn)庫SAIUR201 6 第21頁第3章.初識STM32 標(biāo)準(zhǔn)庫3.1.課前預(yù)習(xí)在書上找到

46、答案。1.什么是STM32 標(biāo)準(zhǔn)庫。2. STM32使標(biāo)準(zhǔn)庫的開發(fā)式和以前學(xué)的寄存器式有什么不同3.2.概述本章所講內(nèi)容:(1)STM32 標(biāo)準(zhǔn)庫的簡介(2)STM32 標(biāo)準(zhǔn)庫的件夾和功能介紹在上章中,我們構(gòu)建了個(gè)控制GPIO外設(shè)的函數(shù),算是實(shí)現(xiàn)了函數(shù)庫的雛形,但GPIO還有很多功能函數(shù)我們沒有實(shí)現(xiàn),且STM32 芯不僅僅只有GPIO這個(gè)外設(shè)。如果我們想要親完成這個(gè)函數(shù)庫,作量常巨。ST 公司提供的標(biāo)準(zhǔn)軟件庫,包含了STM32 芯所有寄存器的控制操作,我們直接學(xué)習(xí)如何使ST 標(biāo)準(zhǔn)庫,會(huì)極地便控制STM32 芯。3.3.庫錄、件簡介STM32 標(biāo)準(zhǔn)庫可以從官獲得,也可以直接從本書的配套資料得到。

47、本書講解的例程全部采3.5.0庫件。以下內(nèi)容請家打開STM32 標(biāo)準(zhǔn)庫件配合閱讀。解壓庫件后進(jìn)其錄:“STM32F10 x_StdPeriph_Lib_V3.5.0”軟件庫各件夾的內(nèi)容說明見圖3-1。第3章初識STM32 標(biāo)準(zhǔn)庫第22頁SAIUR2016陳德師編著圖3-1 ST標(biāo)準(zhǔn)庫錄:STM32F10 x_StdPeriph_Lib_V3.5.01. Libraries:件夾下是驅(qū)動(dòng)庫的源代碼及啟動(dòng)件,這個(gè)常重要,我們要使的固件庫就在這個(gè)件夾。2. Project:件夾下是驅(qū)動(dòng)庫寫的例和程模板,其中那些為每個(gè)外設(shè)寫好的例程對我們常有,我們在學(xué)習(xí)的時(shí)候就可以參考這的例程,常全,簡直就是窮盡了外

48、設(shè)的所有功能。3. Utilities:包含了基于ST 官實(shí)驗(yàn)板的例程,不需要到,略過即可。4. stm32f10 x_stdperiph_lib_um.chm: 庫幫助檔,這個(gè)很有,不喜歡直接看源碼的可以在合理查詢每個(gè)外設(shè)的函數(shù)說明,常詳細(xì)。這是個(gè)已經(jīng)編譯好的HTML 件,主要講述如何使驅(qū)動(dòng)庫來編寫的應(yīng)程序。說得形象點(diǎn),這個(gè)HTML 就是告訴我們:ST 公司已經(jīng)為你寫好了每個(gè)外設(shè)的驅(qū)動(dòng)了,想知道如何運(yùn)這些例就來向我求救吧。不幸的是,這個(gè)幫助檔是英的,這對很多英不好的朋友來說是個(gè)很的障礙。但這要告訴家,英僅僅是種具,絕對不能讓它成為我們學(xué)習(xí)的障礙。其實(shí)這些英還是很簡單的,我們需要的是拿下它的勇

49、。在使庫開發(fā)時(shí),我們需要把libraries 錄下的庫函數(shù)件添加到程中,并查閱庫幫助檔來了解ST 提供的庫函數(shù),這個(gè)檔說明了每個(gè)庫函數(shù)的使法。進(jìn)Libraries 件夾看到,關(guān)于內(nèi)核與外設(shè)的庫件分別存放在CMSIS 和STM32F10 x_StdPeriph_Driver 件夾中。STM32F10 x_StdPeriph_Lib_V3.5.0LibrariesCMSIS件夾展開內(nèi)容見圖3-2。第3章初識STM32 標(biāo)準(zhǔn)庫SAIUR201 6 第23頁圖3-2 CMSIS件夾內(nèi)容錄:LibrariesCMSIS其中黃框框住的是我們需要到的內(nèi)容,下我們講解下這個(gè)件的作。內(nèi)核相關(guān)件在CoreSupp

50、ort件夾中有core_cm3.c和core_cm3.h兩個(gè)件。Core_cm3.h頭件實(shí)現(xiàn)了內(nèi)核的寄存器映射,對應(yīng)外設(shè)頭件stm32f10 x.h,區(qū)別就是個(gè)針對內(nèi)核的外設(shè),個(gè)針對上(內(nèi)核之外)的外設(shè)。core_cm3.c件實(shí)現(xiàn)了下操作內(nèi)核外設(shè)寄存器的函數(shù),的較少。我們還需要了解的是core_cm3.h頭件中包含了“stdint.h”這個(gè)頭件,這是個(gè)ANSIC 件,是獨(dú)于處理器之外的,就像我們熟知的C 語頭件“stdio.h”件樣。位于RVMDK 這個(gè)軟件的安裝錄下,主要作是提供些類型定義。見代碼清單3-1。代碼清單3-1:stdint.h件中的類型定義這些新類型定義屏蔽了在不同芯平臺時(shí),出

51、現(xiàn)的諸如int的是16位,還是32位的差異。所以在我們以后的程序中,都將使新類型如uint8_t、uint16_t等。在稍舊版的程序中還經(jīng)常會(huì)出現(xiàn)如u8、u16、u32這樣的類型,分別表的符號的8位、16位、32位整型。初學(xué)者碰到這樣的舊類型感覺頭霧,它們定義的位置在STM32f10 x.h件中。建議在以后的新程序中盡量使第3章初識STM32 標(biāo)準(zhǔn)庫第24頁SAIUR2016陳德師編著uint8_t、uint16_t類型的定義。啟動(dòng)件啟動(dòng)件放在startup/arm這個(gè)件夾下,這啟動(dòng)件有很多個(gè),不同型號的單機(jī)的啟動(dòng)件不樣,有關(guān)每個(gè)啟動(dòng)件的詳細(xì)說明見表我們開發(fā)板中的STM32F103VET6 或

52、者STM32F103ZET6 的FLASH 都是512K,屬于基本型的容量產(chǎn)品,啟動(dòng)件統(tǒng)選擇startup_stm32f10 x_hd.s。Stm32f10 x.h這個(gè)頭件實(shí)現(xiàn)了上外設(shè)的所以寄存器的映射,是個(gè)常重要的頭件,在內(nèi)核中與之想對應(yīng)的頭件是core_cm3.h。system_stm32f10 x.csystem_stm32f10 x.c件實(shí)現(xiàn)了STM32 的時(shí)鐘配置,操作的是上的RCC 這個(gè)外設(shè)。系統(tǒng)在上電之后,選會(huì)執(zhí)由匯編編寫的啟動(dòng)件,啟動(dòng)件中的復(fù)位函數(shù)中調(diào)的SystemInit函數(shù)就在這個(gè)件定義。調(diào)完之后,系統(tǒng)的時(shí)鐘就被初始化成72M。如果后我們需要重新配置系統(tǒng)時(shí)鐘,我們就可以參考

53、這個(gè)函數(shù)重寫。為了維持庫的完整性,我們不會(huì)直接在這個(gè)件修改時(shí)鐘配置函數(shù)。3.4. STM32F10 x_StdPeriph_Driver 件夾件錄: LibrariesSTM32F10 x_StdPeriph_Driver 進(jìn)libraries 錄下的STM32F10 x_StdPeriph_Driver 件夾,見圖3-3。圖3-3外設(shè)驅(qū)動(dòng)第3章初識STM32 標(biāo)準(zhǔn)庫SAIUR201 6 第25頁STM32F10 x_StdPeriph_Driver 件夾下有inc(include 的縮寫)跟src(source的簡寫)這兩個(gè)件夾,這的件屬于CMSIS 之外的的、芯上外設(shè)部分。src是每個(gè)設(shè)備

54、外設(shè)的驅(qū)動(dòng)源程序,inc 則是相對應(yīng)的外設(shè)頭件。src及inc 件夾是ST 標(biāo)準(zhǔn)庫的主要內(nèi)容,甚不少直接認(rèn)為ST 標(biāo)準(zhǔn)庫就是指這些件,可見其重要性。在src和inc 件夾的就是ST 公司針對每個(gè)STM32 外設(shè)編寫的庫函數(shù)件,每個(gè)外設(shè)對應(yīng)個(gè).c和.h后綴的件。我們把這類外設(shè)件統(tǒng)稱為: stm32f10 x_ppp.c或stm32f10 x_ppp.h件,PPP 表外設(shè)名稱。如在上章中我們建的stm32f10 x_gpio.c及tm32f10 x_gpio.h件,就屬于這類。如針對模數(shù)轉(zhuǎn)換(ADC)外設(shè),在src件夾下有個(gè)stm32f10 x_adc.c源件,在inc 件夾下有個(gè)stm32f10

55、 x_adc.h頭件,若我們開發(fā)的程中到了STM32 內(nèi)部的ADC,則少要把這兩個(gè)件包含到程。見圖3-4。圖3-4驅(qū)動(dòng)的源件及頭件這兩個(gè)件夾中,還有個(gè)很特別的misc.c件,這個(gè)件提供了外設(shè)對內(nèi)核中的NVIC(中斷向量控制器)的訪問函數(shù),在配置中斷時(shí),我們必須把這個(gè)件添加到程中。stm32f10 x_it.c、stm32f10 x_conf.h和system_stm32f10 x.c件stm32f10 x_it.c:這個(gè)件是專門來編寫中斷服務(wù)函數(shù)的,在我們修改前,這個(gè)件已經(jīng)定義了些系統(tǒng)異常特殊中斷的接,其它普通中斷服務(wù)函數(shù)由我們添加。但是我們怎么知道這些中斷服務(wù)函數(shù)的接如何寫?是不是可以定義呢

56、?答案當(dāng)然不是,這些都可以在匯編啟動(dòng)件中找到,在學(xué)習(xí)中斷和啟動(dòng)件的時(shí)候我們會(huì)詳細(xì)介紹system_stm32f10 x.c:這個(gè)件包含了STM32 芯上電后初始化系統(tǒng)時(shí)鐘、擴(kuò)展外部存儲(chǔ)器的第3章初識STM32 標(biāo)準(zhǔn)庫第26頁SAIUR2016陳德師編著函數(shù),例如我們前兩章提到供啟動(dòng)件調(diào)的“SystemInit”函數(shù),于上電后初始化時(shí)鐘,該函數(shù)的定義就存儲(chǔ)在system_stm32f10 x.c件。STM32F103 系列的芯,調(diào)庫的這個(gè)SystemInit函數(shù)后,系統(tǒng)時(shí)鐘被初始化為72MHz,如有需要可以修改這個(gè)件的內(nèi)容,設(shè)置成所需的時(shí)鐘頻率,但鑒于保持庫的完整性,我們在做系統(tǒng)時(shí)鐘配置的時(shí)候會(huì)

57、另外重寫時(shí)鐘配置函數(shù)。stm32f10 x_conf.h:這個(gè)件被包含進(jìn)stm32f10 x.h件。當(dāng)我們使固件庫編程的時(shí)候,如果需要某個(gè)外設(shè)的驅(qū)動(dòng)庫,就需要包含該外設(shè)的頭件:stm32f10 x_ppp.h,包含個(gè)還好,如果是了多外設(shè),就需要包含多個(gè)頭件,這不僅影響代碼美觀也不好管理,現(xiàn)我們個(gè)頭件stm32f10 x_conf.h把這些外設(shè)的頭件都包含在,讓這個(gè)配置頭件統(tǒng)管理這些外設(shè)的頭件,我們在應(yīng)程序中只需要包含這個(gè)配置頭件即可,我們知道這個(gè)頭件在stm32f10 x.h的最后被包含,所以最終我們只需要包含stm32f10 x.h這個(gè)頭件即可,常便。Stm32f10 x_conf.h見代碼

58、清單3-2。默認(rèn)情況下是所以頭件都被包含,沒有被注釋掉。我們也可以把不要的都注釋掉,只留下需要使的即可。代碼清單3-2 stm32f10 x_conf.h件配置軟件庫3.5.庫各件間的關(guān)系前向家簡單介紹了各個(gè)庫件的作,庫件是直接包含進(jìn)程即可,絲毫不修改,有的件就要我們在使的時(shí)候根據(jù)具體的需要進(jìn)配置。接下來從整體上把握下各個(gè)件在庫程中的層次或關(guān)系,這些件對應(yīng)到CMSIS 標(biāo)準(zhǔn)架構(gòu)上。見圖3-5。第3章初識STM32 標(biāo)準(zhǔn)庫SAIUR201 6 第27頁圖3-5庫各件關(guān)系圖3-5描述了STM32 庫各件之間的調(diào)關(guān)系,在實(shí)際的使庫開發(fā)程的過程中,我們把位于CMSIS 層的件包含進(jìn)程,除了特殊系統(tǒng)時(shí)鐘

59、需要修改system_stm32f10 x.c,其它件絲毫不修改,也不建議修改。對于位于戶層的個(gè)件,就是我們在使庫的時(shí)候,針對不同的應(yīng)對庫件進(jìn)增刪(條件編譯的法增刪)和改動(dòng)的件。第3章初識STM32 標(biāo)準(zhǔn)庫第28頁SAIUR2016陳德師編著3.6.初識庫函數(shù)所謂庫函數(shù),就是STM32 的庫件中為我們編寫好驅(qū)動(dòng)外設(shè)的函數(shù)接,我們只要調(diào)這些庫函數(shù),就可以對STM32 進(jìn)配置,達(dá)到控制的。我們可以不知道庫函數(shù)是如何實(shí)現(xiàn)的,但我們調(diào)函數(shù)必須要知道函數(shù)的功能、可傳的參數(shù)及其意義、和函數(shù)的返回值。于是,有讀者就問那么多函數(shù)我怎么記呀?我的回答是:會(huì)查就了,哪個(gè)記得了那么多。所以我們學(xué)會(huì)查閱庫幫助檔是很有

60、必要的。打開庫幫助檔stm32f10 x_stdperiph_lib_um.chm見圖3-6圖3-6庫幫助檔層層打開檔的錄標(biāo)簽:標(biāo)簽錄:ModulesSTM32F10 x_StdPeriph_Driver可看到STM32F10 x_StdPeriph_Driver 標(biāo)簽下有很多外設(shè)驅(qū)動(dòng)件的名字MISC、ADC、BKP、CAN 等標(biāo)簽。我們試著查看GPIO的“位設(shè)置函數(shù)GPIO_SetBits”看看,打開標(biāo)簽:標(biāo)簽錄:ModulesSTM32F10 x_StdPeriph_DriverGPIOFunctionsGPIO_SetBits見圖3-7。第3章初識STM32 標(biāo)準(zhǔn)庫SAIUR201 6

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論