版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、STM32學(xué)前班教程之一:選擇他的理由 經(jīng)過(guò)幾天的學(xué)習(xí),基本掌握了STM32的調(diào)試環(huán)境和一些基本知識(shí)。想拿出來(lái)與大家共享,笨教程本著最大限度簡(jiǎn)化刪減STM32入門的過(guò)程的思想,會(huì)把我的整個(gè)入門前的工作推薦給大家。就算是給網(wǎng)上的眾多教程、筆記的一種補(bǔ)充吧,所以叫學(xué)前班教程。其中涉及產(chǎn)品一律隱去來(lái)源和品牌,以防廣告之嫌。全部漢字內(nèi)容為個(gè)人筆記。所有相關(guān)參考資料也全部列出。:lol 教程會(huì)分幾篇,因?yàn)樘L(zhǎng)啦。今天先來(lái)說(shuō)說(shuō)為什么是它我選擇STM32的原因。 我對(duì)未來(lái)的規(guī)劃是以功能性為主的,在功能和面積之間做以平衡是我的首要選擇,而把運(yùn)算
2、放在第二位,這根我的專業(yè)有關(guān)系。里面的運(yùn)算其實(shí)并不復(fù)雜,在入門階段想盡量減少所接觸的東西。 不過(guò)說(shuō)實(shí)話,對(duì)DSP的外設(shè)并和開(kāi)發(fā)環(huán)境不滿意,這是為什么STM32一出就轉(zhuǎn)向的原因。下面是我自己做過(guò)的兩塊DSP28的全功能最小系統(tǒng)板,在做這兩塊板子的過(guò)程中發(fā)現(xiàn)要想盡力縮小DSP的面積實(shí)在不容易(目前只能達(dá)到50mm×45mm,這還是沒(méi)有其他器件的情況下),尤其是雙電源的供電方式和1.9V的電源讓人很頭疼。 后來(lái)因?yàn)橐粋€(gè)項(xiàng)目,接觸了LPC2148并做了一塊板子,發(fā)現(xiàn)小型的ARM7在外設(shè)夠用的情況下其實(shí)很不錯(cuò),于是開(kāi)始搜集相關(guān)芯片資料,也同時(shí)對(duì)小面積的AVR和51都進(jìn)行了大
3、致的比較,這個(gè)時(shí)候發(fā)現(xiàn)了CortexM3的STM32,比2148擁有更豐富和靈活的外設(shè),性能幾乎是2148兩倍(按照MIPS值計(jì)算)。正好2148我還沒(méi)上手,就直接轉(zhuǎn)了這款STM32F103。 與2811相比較(核心1.8V供電情況下),135MHz×1MIPS?,F(xiàn)在用STM32F103,72MHz×1.25MIPS,性能是DSP的66%,STM32F103R型(64管腳)芯片面積只有2811的51%,STM32F103C型(48管腳)面積是2811的25%,最大功耗是DSP的20%,單片價(jià)格是DSP的30%。且有更多的串口,CAP和PWM,這是有用的。高端型號(hào)有
4、SDIO,理論上比SPI速度快。 由以上比較,準(zhǔn)備將未來(lái)的擁有操作系統(tǒng)的高端應(yīng)用交給DSP的新型浮點(diǎn)型單片機(jī)28335,而將所有緊湊型小型、微型應(yīng)用交給STM32。
5、60; STM32學(xué)前班教程:怎么開(kāi)發(fā) sw笨笨的STM32學(xué)前班教程之二:怎么開(kāi)發(fā)目前手頭的入門階段使用的開(kāi)發(fā)器概述 該產(chǎn)品為簡(jiǎn)易STM32調(diào)試器和DEMO板一體化的調(diào)試學(xué)習(xí)設(shè)備,價(jià)格在一百多塊。 2、硬件配置 仿真部分:USB口,reset,指示燈,JTAG DEMO部分:4按鍵(IO),4LED(IO),一個(gè)串口,啟動(dòng)方式跳線,所有引腳的焊盤(可自行焊接插針進(jìn)行擴(kuò)
6、展) DEMO芯片:STM32F103C8T6(程序空間64K) 參數(shù)和擴(kuò)展: 注:學(xué)習(xí)的目標(biāo)芯片是STM32F103CBT6(7×7mm,128K flash,16K RAM)以及STM32F103RET6(10×10mm,512K flash,64K RAM)。 STM32-SK的硬件連接方法(用板載調(diào)試器調(diào)試板載DEMO): JP3、JP5 須全部短接 USB通過(guò)電纜連接至PC的USB 串口連接至PC的串口或者通過(guò)USB轉(zhuǎn)串口電纜連接(力特Z-TEC
7、,USB2.0與RS232轉(zhuǎn)接電纜) WindowsXP自動(dòng)安裝驅(qū)動(dòng) 安裝完成后如果DEMO板里面有程序就會(huì)自動(dòng)運(yùn)行了。這是ST-Link-II的通用連接方法 以上是學(xué)習(xí)階段比較方便的仿真器,進(jìn)入工程階段后準(zhǔn)備換J-Link V7的仿真器進(jìn)行開(kāi)發(fā)。目前比較滿意的產(chǎn)品:JLink v7+USB轉(zhuǎn)串口: 購(gòu)買后所需的改造:打開(kāi)殼體,將USB的+5V供電跟JTAG20針的第二腳Vsupply飛線,提供目標(biāo)板5V500mA的供電。看中的特點(diǎn):集成串口,擁有20針JTAG可以改造Vspply為供電接口,小巧好帶,便宜。&
8、#160;常見(jiàn)的用于STM32單片機(jī)的仿真器分類 a) Ulink2:之前常用的仿真器。Keil公司產(chǎn)品,之前專用于ARM7,現(xiàn)擴(kuò)展到CortexM3,調(diào)試接口支持JTAG和SWD,連接到PC主機(jī)的USB?,F(xiàn)在這種調(diào)試器已經(jīng)用的越來(lái)越少了。 b) ST-Link-II:ST公司的仿真接口,支持IAR EWARM,USB 1.1全速,USB電源供電,自適應(yīng)目標(biāo)系統(tǒng)JTAG電平3.3V-5V,可向目標(biāo)系統(tǒng)提供不大于5V/200mA電源。這種調(diào)試器不多見(jiàn),但是許多調(diào)試器與目標(biāo)板一體設(shè)計(jì)的學(xué)習(xí)板上常見(jiàn)。 c) J-Link
9、 V6/V7:SEGGER公司產(chǎn)品,調(diào)試接口支持JTAG和SWV(V7速度是V6的12倍),USB 2.0接口,通過(guò)USB供電,下載速度達(dá)到720k byte/s, 與IAR WEARM無(wú)縫集成,寬目標(biāo)板電壓范圍:1.2V-3.3V(V7支持5V),多核調(diào)試,給目標(biāo)板提供3.3V50mA電源。這種調(diào)試器現(xiàn)在出現(xiàn)的越來(lái)越多,兼容性比較好(主要是指能夠與IAR WEARM無(wú)縫集成這點(diǎn)),國(guó)內(nèi)山寨貨和各種變種也很多。 6、目標(biāo)板主要分為一體化設(shè)計(jì)(與調(diào)試器、供電整合)和單獨(dú)設(shè)計(jì)兩類,詳細(xì)產(chǎn)品比較見(jiàn)豆皮的如何選擇STM32開(kāi)發(fā)板。&
10、#160; S
11、TM32學(xué)前班教程之三:讓PC工作 開(kāi)發(fā)軟件的選擇 1、 軟件與版本的選擇 需求:支持STLink2或未來(lái)的Jlink V7調(diào)試接口(因?yàn)镾TM32-SK使用這個(gè)接口),能夠找到去除軟件限制的方法,最好具有中文版幫助和界面,最好帶有純軟件仿真 選擇:RealView MDK 3.23RPC或者IAR EWARM 4.42A(5版本觀望一下)。 2、 RealView MDK 3.23RPC(中國(guó)版)安裝與去除限制 第一步:執(zhí)行安裝程序
12、完成基本安裝,最后選項(xiàng)選擇加入虛擬硬件,便于純軟件調(diào)試。 第二步:執(zhí)行軟件,點(diǎn)擊File->Licence Manager,復(fù)制CID的數(shù)據(jù)到破解器的CID,其他選項(xiàng)如下圖,然后點(diǎn)擊Generate。 第三步:復(fù)制LIC0的數(shù)據(jù)到軟件的LIC框里面,點(diǎn)擊Add LIC。注意添加序列號(hào)后Licence Manager會(huì)算出這個(gè)號(hào)對(duì)應(yīng)的有效期,如果到期會(huì)顯示為紅色,需要重新點(diǎn)擊破解軟件的Generate,再算一個(gè)填進(jìn)去就行了。 第四步:將ST-LINKII-KEIL Driver所需的文件(兩個(gè)DLL)拷貝到KeilARM
13、BIN下,替換原有文件。 第五步:打開(kāi)Keil安裝目錄下的TOOLS.INI文件,在ARM、ARMADS、KARM項(xiàng)目下添加TDRV7=BINST-LINKII-KEIL.dll("ST LinkII Debugger")行,并保存修改。 第六步:打開(kāi)MDK,在項(xiàng)目的options設(shè)置的Debug選項(xiàng)中選擇ST LINKII Debugger,同時(shí)在Utilities的選項(xiàng)中選擇ST LINKII Debugger。 完成以上步驟,就完成了ST-LINKII的相關(guān)配置,可以作為調(diào)試器開(kāi)
14、始使用。注意:目前ST-LINKII不支持Flash菜單中的Download和Erase命令,程序在使用Start/Stop Debug Session時(shí)自動(dòng)載入flash中供調(diào)試。 3、 IAR EWARM 4.42A安裝與破解 第一步:開(kāi)始/運(yùn)行/CMD顯示DOS界面,執(zhí)行iarid.exe>>ID.TXT得到本機(jī)ID碼,復(fù)制這個(gè)ID碼,再執(zhí)行iarkg.exe ID碼>>Lic422A.TXT,得到一組注冊(cè)碼。 第二步:使用EWARM-EV-WEB-442A.exe(30天限
15、制版,其他版本無(wú)法使用第一步中的注冊(cè)碼),執(zhí)行安裝程序完成基本安裝,過(guò)程中需要添入第一步里面算出來(lái)的注冊(cè)碼,可以取消時(shí)間限制,但是那一組當(dāng)中只有一個(gè)有效,需要實(shí)驗(yàn)。 4、 鏈接硬件調(diào)試程序 RealView MDK:找到一個(gè)STM32-SK的基礎(chǔ)程序,最好是只關(guān)于IO的且與當(dāng)前板子程序不同,這樣在板上就可以看到結(jié)果,點(diǎn)擊Project/open project。例如GPIO、TIMER(另兩個(gè)例程是關(guān)于串口的,需要連接串口才能夠看到運(yùn)行結(jié)果)。 使用“Open Project”打開(kāi),然后設(shè)置Option里面的linker和U
16、tilities里面的項(xiàng)目為“ST LinkII Debuger”。 編譯程序,再使用“Start/Stop Debug Session”來(lái)寫入程序。 IAR EWARM:與以上相同,找到一個(gè)符合條件的例程。打開(kāi)一個(gè)eww工程文件,右鍵選取Option,在Debuger里面選擇“Third-Party Driver”,在“Third-Party Driver”里面添上“$PROJ_DIR$.ddlSTM32Driver.dll”。 使用“Make”或“Rebuild All”來(lái)編譯程序
17、,點(diǎn)“Debug”就燒寫進(jìn)Flash。使用調(diào)試欄里面的“go”等等運(yùn)行程序。 注:由于目前版本MDK與我手頭的ST-LINK-II編程器不兼容,所以后面的所有工作均改用IAR。 STM32學(xué)前班教程之四:打好
18、基礎(chǔ)建立模板 1、 新建目錄Project_IAR4,按照自己的順序重新組織dll(驅(qū)動(dòng));inc、src函數(shù)庫(kù);settings,其他所有文件全部放這個(gè)新建的目錄下。 2、 雙擊打開(kāi)Project.eww,繼續(xù)更改內(nèi)部設(shè)置。 3、 需更改的內(nèi)容列表: 位置和項(xiàng)目 目標(biāo) 說(shuō)明 ProjectEdir confignations 新建基于STM3210B的配置 編譯目標(biāo)和過(guò)程文件存放 P
19、rojectOptionGeneral OptionTarget ST STM32F10x 選擇芯片類型 ProjectOption C/C+ CompilerPreprocessorAdditional include directories $PROJ_DIR$ $PROJ_DIR$inc 頭文件相對(duì)位置,需要包括“map/lib/type”的位置 ProjectOption C/C+ CompilerPr
20、eprocessorDefined symbols 空 空白是在Flash里面調(diào)試程序,VECT_TAB_RAM是在RAM里調(diào)試程序 ProjectOption C/C+ CompilerOptimizationsSize 最終編譯一般選擇High 調(diào)試可選None None,Low,Medium,High是不同的代碼優(yōu)化等級(jí) ProjectOption LinkerOutput 去掉Overrride default
21、 輸出格式使用默認(rèn) ProjectOption LinkerExtra Output 打開(kāi)General Extra Output去掉Overrride default 廠家要求 ProjectOption LinkerConfig 打開(kāi)Overrride default $PROJ_DIR$lnkarm_flash.xcl 使用Flash調(diào)試程序,如果需要使用RAM調(diào)試則改為lnkarm_RAM.xcl
22、60; ProjectOption DebuggerSetupDriver Third-Party Driver 使用第三方驅(qū)動(dòng)連接單片機(jī) ProjectOption Debugger Download Use flash loader 下載到flash所需的設(shè)置 ProjectOption Debugger Third-Party Driver Third-Party Drive
23、rIAR debugger driver $PROJ_DIR$ddlSTM32Driver.dll 驅(qū)動(dòng)文件路徑 注1:所有跟路徑相關(guān)的設(shè)置需要根據(jù)實(shí)際情況編寫,相對(duì)路徑的編寫“$PROJ_DIR$”代表eww文件所在文件夾,“.”代表向上一層。 注2:其他設(shè)置使用庫(kù)函數(shù)里面的工程文件的默認(rèn)選項(xiàng)即可,初學(xué)不用了解太多。 4、 需要重新刪除并重新添加Project下“FWLib”和“User”的所有文件,為了刪減外設(shè)模塊方便需要在“USER”額外添加“stm32f10x_conf.
24、h”(不添加也可以,需要展開(kāi)main.c找到它)。然后執(zhí)行ProjectRebuid All,通過(guò)則設(shè)置完畢。 5、 完成以上步驟,第一個(gè)自己習(xí)慣的程序庫(kù)就建立完畢了,以后可以從“stm32f10x_conf.h”中刪減各種庫(kù)文件,從“stm32f10x_it.c”編輯中斷,從“main.c”編寫得到自己的程序。最后需要將這個(gè)庫(kù)打包封存,每次解壓縮并修改主目錄名稱即可。 6、 我的程序庫(kù)特點(diǎn): a) 默認(rèn)兼容ST-LINK-II,IAR EWARM 4.42A,F(xiàn)las
25、h調(diào)試,其他有可能需要更改設(shè)置 b) 為操作方便減少了目錄的層次 c) 為學(xué)習(xí)方便使用網(wǎng)友漢化版固件,主要是庫(kù)函數(shù)中c代碼的注釋。 后面隨著學(xué)習(xí)深入將在我的模板里面加入如下內(nèi)容: d) 加入必用的flash(讀取優(yōu)化),lib(debug),nvic(中斷位置判斷、開(kāi)中斷模板),rcc(時(shí)鐘管理模板,開(kāi)啟外設(shè)時(shí)鐘模板),gpio(管腳定義模板)的初始化代碼,所有模板代碼用到的時(shí)候只要去掉前面的注釋“/”,根據(jù)需求填入相應(yīng)值就可以了。 e) 因?yàn)樽?/p>
26、己記性不好,所以main函數(shù)中的代碼做到每行注釋,便于自己以后使用。 f) 集成Print_U函數(shù)簡(jiǎn)單串口收發(fā)函數(shù)代碼,便于調(diào)試,改變使用Printf函數(shù)的調(diào)試習(xí)慣。 g) 集成使用systick的精確延時(shí)函數(shù)delay。 h) 集成時(shí)鐘故障處理代碼。 i) 集成電壓監(jiān)控代碼。 j) 集成片上溫度檢測(cè)代碼。 k) 逐步加入所有外設(shè)的初始化模塊 一、編寫程序所需的步驟 1、解
27、壓縮,改目錄名稱,和eww文件名,以便跟其他程序區(qū)分。 2、更改設(shè)置:在“stm32f10x_conf.h”關(guān)閉不用的外設(shè)(在其聲明函數(shù)前面加注釋符號(hào)“/”)。并根據(jù)外部晶振速度更改其中“HSE_Value”的數(shù)值,其單位是Hz。 3、完成各種頭文件的包含(#include "xxx.h"),公共變量的聲明(static 數(shù)據(jù)類型 變量名稱;),子程序聲明(void 函數(shù)名稱(參數(shù));)C語(yǔ)言必須的前置工作。 4、改寫我的程序庫(kù)里面所預(yù)設(shè)的模板,再進(jìn)行其他模塊的初始化子程序代碼的編寫,并在程序代碼的開(kāi)始部
28、分調(diào)用。注意:必須記住所有外設(shè)的使用需要考慮4個(gè)問(wèn)題: a) 開(kāi)時(shí)鐘RCC(在RCC初始化中); b) 自身初始化; c) 相關(guān)管腳配置(在GPIO初始化中); d) 是否使用中斷(在NVIC初始化中) 5、編寫main.c中的主要代碼和各種子函數(shù)。 6、在“stm32f10x_it.c”填寫各種中斷所需的
29、執(zhí)行代碼,如果用不到中斷的簡(jiǎn)單程序則不用編寫此文件。 7、編譯生成 “bin”的方法:ProjectOption LinkerOutputFormat,里面選擇“Other”,在下面的“Output”選 “raw-binary”生成bin。 8、編譯生成“hex”的方法:ProjectOption LinkerOutputFormat,里面選擇“Other”,在下面的“Output”選“intel-extended”,生成a79直接改名成為hex或者選中上面的“Output Flie”在“Overrride def
30、ault”項(xiàng)目里面改擴(kuò)展名為hex。 使用軟件界面的Debug燒寫并按鈕調(diào)試程序。注意,ST-Link-II是直接將程序燒寫進(jìn)Flash進(jìn)行調(diào)試,而不是使用RAM的方式。 STM32學(xué)前班教程之五:給等待入門的人一點(diǎn)點(diǎn)建議 入門必須閱讀的相關(guān)文檔 1、 幾個(gè)重要官方文檔的功能: a)
31、160;Datasheet芯片基本數(shù)據(jù),功能參數(shù)封裝管腳定義和性能規(guī)范。 b) 固件函數(shù)庫(kù)用戶手冊(cè)函數(shù)庫(kù)功能,庫(kù)函數(shù)的定義、功能和用法。 c) 參考手冊(cè)各種功能的具體描述,使用方法,原理,相關(guān)寄存器。 d) STM32F10xxx硬件開(kāi)發(fā):使用入門相關(guān)基礎(chǔ)硬件設(shè)計(jì) e) STM32F10XXX的使用限制:芯片內(nèi)部未解決的硬件設(shè)計(jì)bug,開(kāi)發(fā)需要注意繞開(kāi)。 f) 一本簡(jiǎn)單的C語(yǔ)言書,相信我,不用太復(fù)雜。 2、 其他的有用文檔,對(duì)初學(xué)幫助很大 a) 如何使用S
32、TM32的軟件庫(kù)在IAR的EWARM下進(jìn)行應(yīng)用開(kāi)發(fā)IAR基礎(chǔ)設(shè)置。 b) 輕松進(jìn)入STM32+Cortex-M3世界.ppt開(kāi)發(fā)板和最小系統(tǒng)設(shè)計(jì)需求。 c) 如何選擇STM32開(kāi)發(fā)板.pdf各種開(kāi)發(fā)板介紹和功能比較。 d) MXCHIP的系列視頻教程全部芯片基礎(chǔ)及其外設(shè)的教程,使用函數(shù)庫(kù)編程的話就不用看每個(gè)視頻后半段的關(guān)于寄存器的介紹了。 e) STM32_Technical_Slide(常見(jiàn)問(wèn)題)一些優(yōu)化設(shè)計(jì)方案。 3、 關(guān)于參考書,買了兩本但是基本對(duì)學(xué)習(xí)沒(méi)什么幫助,如果湊齊以上資料,建議慎重
33、買書,不如留著那n個(gè)幾十塊錢,攢到一起買開(kāi)發(fā)板。 我自己的學(xué)習(xí)過(guò)程 1、 一共24個(gè)庫(kù),不可能都學(xué),都學(xué)也沒(méi)用。按照我的工作需求必須學(xué)的有16個(gè),這16個(gè)也不是全學(xué)。主要學(xué)習(xí)來(lái)源是各種例程代碼、“固件函數(shù)庫(kù)用戶手冊(cè)”和“參考手冊(cè)”。 具體學(xué)習(xí)方法是通讀不同來(lái)源的程序,在程序中找到相關(guān)的函數(shù)庫(kù)的應(yīng)用,然后再閱讀相關(guān)文檔,有條件的實(shí)驗(yàn)。對(duì)于內(nèi)容的選擇方面,根據(jù)入門內(nèi)容和未來(lái)應(yīng)用,將所涉及的范圍精簡(jiǎn)到最低,但是對(duì)所選擇的部分的學(xué)習(xí)則力求明確。以下是我按照自己的需求對(duì)程序庫(kù)函數(shù)排列的學(xué)習(xí)順序: a) 絕大部分程序都要涉及到的庫(kù)flash,li
34、b,nvic,rcc,只學(xué)基礎(chǔ)的跟最簡(jiǎn)單應(yīng)用相關(guān)必用的部分,其他部分后期再返回頭學(xué)。 b) 各種程序通用但不必用的庫(kù)exti,MDA,systic,只通讀理解其作用。 c) DEMO板擁有的外設(shè)庫(kù)gpio,usart,編寫代碼實(shí)驗(yàn)。 d) 未來(lái)需要用到的外設(shè)的庫(kù)tim,tim1,adc,i2c,spi,先理解等待有條件后實(shí)驗(yàn)。 e) 開(kāi)發(fā)可靠性相關(guān)庫(kù)bkp,iwdg,wwdg,pwr,參考其他例程的做法。 f) 其他,根據(jù)興趣來(lái)學(xué)。
35、160; STM32學(xué)前班教程之六:這些代碼大家都用得到 2、 閱讀flash: 芯片內(nèi)部存儲(chǔ)器flash操作函數(shù) 我的理解對(duì)芯片內(nèi)部flash進(jìn)行操作的函數(shù),包括讀取,狀態(tài),擦除,寫入等等,可以允許程序去操作flash上的數(shù)據(jù)。
36、0;基礎(chǔ)應(yīng)用1,F(xiàn)LASH時(shí)序延遲幾個(gè)周期,等待總線同步操作。推薦按照單片機(jī)系統(tǒng)運(yùn)行頻率,024MHz時(shí),取Latency=0;2448MHz時(shí),取Latency=1;4872MHz時(shí),取Latency=2。所有程序中必須的 用法:FLASH_SetLatency(FLASH_Latency_2); 位置:RCC初始化子函數(shù)里面,時(shí)鐘起振之后。 基礎(chǔ)應(yīng)用2,開(kāi)啟FLASH預(yù)讀緩沖功能,加速FLASH的讀取。所有程序中必須的 用法:FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); 位置:R
37、CC初始化子函數(shù)里面,時(shí)鐘起振之后。 3、 閱讀lib:調(diào)試所有外設(shè)初始化的函數(shù)。 我的理解不理解,也不需要理解。只要知道所有外設(shè)在調(diào)試的時(shí)候,EWRAM需要從這個(gè)函數(shù)里面獲得調(diào)試所需信息的地址或者指針之類的信息。 基礎(chǔ)應(yīng)用1,只有一個(gè)函數(shù)debug。所有程序中必須的。 用法: #ifdef DEBUG debug(); #endif 位置:main函數(shù)開(kāi)頭,聲明變量之后。 4、 閱讀nvic:系統(tǒng)中斷管理。 我的理解
38、管理系統(tǒng)內(nèi)部的中斷,負(fù)責(zé)打開(kāi)和關(guān)閉中斷。 基礎(chǔ)應(yīng)用1,中斷的初始化函數(shù),包括設(shè)置中斷向量表位置,和開(kāi)啟所需的中斷兩部分。所有程序中必須的。 用法: void NVIC_Configuration(void) NVIC_InitTypeDef NVIC_InitStructure;/中斷管理恢復(fù)默認(rèn)參數(shù) #ifdef VECT_TAB_RAM /如果C/C+ CompilerPreprocessorDefined symbols中的定義了V
39、ECT_TAB_RAM(見(jiàn)程序庫(kù)更改內(nèi)容的表格) NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); /則在RAM調(diào)試 #else /如果沒(méi)有定義VECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);/則在Flash里調(diào)試 #endif /結(jié)束
40、判斷語(yǔ)句 /以下為中斷的開(kāi)啟過(guò)程,不是所有程序必須的。 /NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /設(shè)置NVIC優(yōu)先級(jí)分組,方式。 /注:一共16個(gè)優(yōu)先級(jí),分為搶占式和響應(yīng)式。兩種優(yōu)先級(jí)所占的數(shù)量由此代碼確定,NVIC_PriorityGroup_x可以是0、1、2、3、4,分別代表?yè)屨純?yōu)先級(jí)有1、2、4、8、16個(gè)和響應(yīng)優(yōu)先級(jí)有16、8、4、2、1個(gè)。規(guī)定兩種優(yōu)先級(jí)的數(shù)量后,所有的中斷級(jí)別必須在其中選擇,搶占級(jí)別高的會(huì)打斷其他中斷優(yōu)先執(zhí)行,而響應(yīng)級(jí)別高的會(huì)在其他中斷執(zhí)行完優(yōu)先執(zhí)行。
41、160;/NVIC_InitStructure.NVIC_IRQChannel = 中斷通道名; /開(kāi)中斷,中斷名稱見(jiàn)函數(shù)庫(kù) /NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; /搶占優(yōu)先級(jí) /NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /響應(yīng)優(yōu)先級(jí) /NVIC_InitStructure.NVIC_IRQChannelCmd =&
42、#160;ENABLE;/啟動(dòng)此通道的中斷 /NVIC_Init(&NVIC_InitStructure); /中斷初始化 5、 閱讀rcc:?jiǎn)纹瑱C(jī)時(shí)鐘管理。 我的理解管理外部、內(nèi)部和外設(shè)的時(shí)鐘,設(shè)置、打開(kāi)和關(guān)閉這些時(shí)鐘。 基礎(chǔ)應(yīng)用1:時(shí)鐘的初始化函數(shù)過(guò)程 用法:void RCC_Configuration(void) /時(shí)鐘初始化函數(shù) ErrorStatu
43、s HSEStartUpStatus; /等待時(shí)鐘的穩(wěn)定 RCC_DeInit(); /時(shí)鐘管理重置 RCC_HSEConfig(RCC_HSE_ON); /打開(kāi)外部晶振 HSEStartUpStatus = RCC_WaitForH
44、SEStartUp(); /等待外部晶振就緒 if (HSEStartUpStatus = SUCCESS) FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /flash讀取緩沖,加速 FLASH_SetLatency(FLASH_Latency_2); /flash操作的延時(shí) RC
45、C_HCLKConfig(RCC_SYSCLK_Div1); /AHB使用系統(tǒng)時(shí)鐘 RCC_PCLK2Config(RCC_HCLK_Div2); /APB2(高速)為HCLK的一半 RCC_PCLK1Config(RCC_HCLK_Div2); /APB1(低速)為HCLK的一半 /注:AHB主要負(fù)責(zé)外部存儲(chǔ)器時(shí)鐘。PB2負(fù)責(zé)AD,I/O,高級(jí)TIM,串口1。APB1負(fù)責(zé)DA,USB,SPI,I2C,CAN,串口2
46、345,普通TIM。 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /PLLCLK = 8MHz * 9 = 72 MHz RCC_PLLCmd(ENABLE); /啟動(dòng)PLL while (RC
47、C_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET) /等待PLL啟動(dòng) RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /將PLL設(shè)置為系統(tǒng)時(shí)鐘源 while (RCC_GetSYSCLKSource() != 0x08) /等待系統(tǒng)時(shí)鐘源的啟動(dòng)
48、60;/RCC_AHBPeriphClockCmd(ABP2設(shè)備1 | ABP2設(shè)備2 |, ENABLE); /啟動(dòng)AHP設(shè)備 /RCC_APB2PeriphClockCmd(ABP2設(shè)備1 | ABP2設(shè)備2 |, ENABLE); /啟動(dòng)ABP2設(shè)備 /RCC_APB1PeriphClockCmd(ABP2設(shè)備1 | ABP2設(shè)備2 |,
49、0;ENABLE); /啟動(dòng)ABP1設(shè)備 1、閱讀exti:外部設(shè)備中斷函數(shù) 我的理解外部設(shè)備通過(guò)引腳給出的硬件中斷,也可以產(chǎn)生軟件中斷,19個(gè)上升、下降或都觸發(fā)。EXTI0EXTI15連接到管腳,EXTI線16連接到PVD(VDD監(jiān)視),EXTI線17連接到RTC(鬧鐘),EXTI線18連接到USB(喚醒)。 基礎(chǔ)應(yīng)用1,設(shè)定外部中斷初始化函數(shù)。按需求,不是必須代碼。 用法: void EXT
50、I_Configuration(void) EXTI_InitTypeDef EXTI_InitStructure; /外部設(shè)備中斷恢復(fù)默認(rèn)參數(shù) EXTI_InitStructure.EXTI_Line = 通道1|通道2; /設(shè)定所需產(chǎn)生外部中斷的通道,一共19個(gè)。 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; /產(chǎn)生中斷 EXTI_InitStructure.EXTI_Trigger
51、0;= EXTI_Trigger_Falling; /上升下降沿都觸發(fā) EXTI_InitStructure.EXTI_LineCmd = ENABLE; /啟動(dòng)中斷的接收 EXTI_Init(&EXTI_InitStructure); /外部設(shè)備中斷啟動(dòng) 2、閱讀dma:通過(guò)總線而越
52、過(guò)CPU讀取外設(shè)數(shù)據(jù) 我的理解通過(guò)DMA應(yīng)用可以加速單片機(jī)外設(shè)、存儲(chǔ)器之間的數(shù)據(jù)傳輸,并在傳輸期間不影響CPU進(jìn)行其他事情。這對(duì)于入門開(kāi)發(fā)基本功能來(lái)說(shuō)沒(méi)有太大必要,這個(gè)內(nèi)容先行跳過(guò)。 3、閱讀systic:系統(tǒng)定時(shí)器 我的理解可以輸出和利用系統(tǒng)時(shí)鐘的計(jì)數(shù)、狀態(tài)。 基礎(chǔ)應(yīng)用1,精確計(jì)時(shí)的延時(shí)子函數(shù)。推薦使用的代碼。 用法: static vu32 TimingDelay;/全局變量聲明 void SysTick_Config(void)/systic
53、k初始化函數(shù) SysTick_CounterCmd(SysTick_Counter_Disable);/停止系統(tǒng)定時(shí)器 SysTick_ITConfig(DISABLE); /停止systick中斷 SysTick_CLKS
54、ourceConfig(SysTick_CLKSource_HCLK_Div8); /systick使用HCLK作為時(shí)鐘源,頻率值除以8。 SysTick_SetReload(9000);/重置時(shí)間1毫秒(以72MHz為基礎(chǔ)計(jì)算) SysTick_ITConfig(ENABLE);/開(kāi)啟systic中斷 void Delay (u32 nTime) /延遲一毫秒
55、的函數(shù) SysTick_CounterCmd(SysTick_Counter_Enable); /systic開(kāi)始計(jì)時(shí) TimingDelay = nTime; /計(jì)時(shí)長(zhǎng)度賦值給遞減變量
56、60; while(TimingDelay != 0); /檢測(cè)是否計(jì)時(shí)完成 SysTick_CounterCmd(SysTick_Counter_Disable); /關(guān)閉計(jì)數(shù)器 SysTick_CounterCmd(SysTick_Counter_Clear);
57、 /清除計(jì)數(shù)值 void TimingDelay_Decrement(void) /遞減變量函數(shù),函數(shù)名由“stm32f10x_it.c”中的中斷響應(yīng)函數(shù)定義好了。 if (TimingDelay != 0x00) /檢測(cè)計(jì)數(shù)變量是否
58、達(dá)到0 TimingDelay-; /計(jì)數(shù)變量遞減 &
59、#160;注:建議熟練后使用,所涉及知識(shí)和設(shè)備太多,新手出錯(cuò)的可能性比較大。新手可用簡(jiǎn)化的延時(shí)函數(shù)代替: void Delay(vu32 nCount)/簡(jiǎn)單延時(shí)函數(shù) for(; nCount != 0; nCount-);(循環(huán)變量遞減計(jì)數(shù)) 當(dāng)延時(shí)較長(zhǎng),又不需要精確計(jì)時(shí)的時(shí)候可以使用嵌套循環(huán): void Delay(vu32 nCount) &
60、#160;/簡(jiǎn)單的長(zhǎng)時(shí)間延時(shí)函數(shù) int i; /聲明內(nèi)部遞減變量 for(; nCount != 0; nCount-) /遞減變量計(jì)數(shù) for (i=0;
61、0;i<0xffff; i+) /內(nèi)部循環(huán)遞減變量計(jì)數(shù) 4、閱讀gpio:I/O設(shè)置函數(shù) 我的理解所有輸入輸出管腳模式設(shè)置,可以是上下拉、浮空、開(kāi)漏、模擬、推挽模式,頻率特性為2M,10M,50M。也可以向該管腳直接寫入數(shù)據(jù)和讀取數(shù)據(jù)。 基礎(chǔ)應(yīng)用1,gpio初始化函數(shù)。所有程序必須。 用法:void GPIO_Configuration(void)
62、60; GPIO_InitTypeDef GPIO_InitStructure; /GPIO狀態(tài)恢復(fù)默認(rèn)參數(shù) GPIO_InitStructure.GPIO_Pin = GPIO_Pin_標(biāo)號(hào) | GPIO_Pin_標(biāo)號(hào) /管腳位置定義,標(biāo)號(hào)可以是NONE、ALL、0至15。 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;/輸出速度2MHz
63、160;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; /模擬輸入模式 GPIO_Init(GPIOC, &GPIO_InitStructure); /C組GPIO初始化 /注:以上四行代碼為一組,每組GPIO屬性必須相同,默認(rèn)的GPIO參數(shù)為:ALL,2MHz,F(xiàn)LATING。如果其中任意一行與前一組相應(yīng)設(shè)置相同,那么那一行可以省略,由此推論
64、如果前面已經(jīng)將此行參數(shù)設(shè)定為默認(rèn)參數(shù)(包括使用GPIO_InitTypeDef GPIO_InitStructure代碼),本組應(yīng)用也是默認(rèn)參數(shù)的話,那么也可以省略。以下重復(fù)這個(gè)過(guò)程直到所有應(yīng)用的管腳全部被定義完畢。 基礎(chǔ)應(yīng)用2,向管腳寫入0或1 用法:GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)0x01);/寫入1
65、0; STM32筆記之七:讓它跑起來(lái),基本硬件功能的建立 0、 實(shí)驗(yàn)之前的準(zhǔn)備 a) 接通串口轉(zhuǎn)接器 b) &
66、#160;下載IO與串口的原廠程序,編譯通過(guò)保證調(diào)試所需硬件正常。 1、 flash,lib,nvic,rcc和GPIO,基礎(chǔ)程序庫(kù)編寫 a) 這幾個(gè)庫(kù)函數(shù)中有一些函數(shù)是關(guān)于芯片的初始化的,每個(gè)程序中必用。為保障程序品質(zhì),初學(xué)階段要求嚴(yán)格遵守官方習(xí)慣。注意,官方程序庫(kù)例程中有個(gè)platform_config.h文件,是專門用來(lái)指定同類外設(shè)中第幾號(hào)外設(shè)被使用,就是說(shuō)在main.c里面所有外設(shè)
67、序號(hào)用x代替,比如USARTx,程序會(huì)到這個(gè)頭文件中去查找到底是用那些外設(shè),初學(xué)的時(shí)候參考例程別被這個(gè)所迷惑住。 b) 全部必用代碼取自庫(kù)函數(shù)所帶例程,并增加逐句注釋。 c) 習(xí)慣順序Lib(debug),RCC(包括Flash優(yōu)化),NVIC,GPIO d) 必用模塊初始化函數(shù)的定義:
68、 void RCC_Configuration(void); /定義時(shí)鐘初始化函數(shù) void GPIO_Configuration(void); /定義管腳初始化函數(shù) void NVIC_Configuration(void); /定義中斷管理初始化函數(shù)
69、160;void Delay(vu32 nCount); /定義延遲函數(shù) e) Main中的初始化函數(shù)調(diào)用: RCC_Configuration();
70、60; /時(shí)鐘初始化函數(shù)調(diào)用 NVIC_Configuration(); /中斷初始化函數(shù)調(diào)用 GPIO_Configuration(); /管腳初始化函數(shù)調(diào)用 f) &
71、#160; Lib注意事項(xiàng): 屬于Lib的Debug函數(shù)的調(diào)用,應(yīng)該放在main函數(shù)最開(kāi)始,不要改變其位置。 g) RCC注意事項(xiàng): Flash優(yōu)化處理可以不做,但是兩句也不難也不用改參數(shù) 根據(jù)需要開(kāi)啟設(shè)備時(shí)鐘可以節(jié)省電能 時(shí)鐘頻率需要根據(jù)實(shí)際情況設(shè)置參數(shù) h) NVIC注意事項(xiàng) 注意理解占先優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)的分組的
72、概念 i) GPIO注意事項(xiàng) 注意以后的過(guò)程中收集不同管腳應(yīng)用對(duì)應(yīng)的頻率和模式的設(shè)置。 作為高低電平的I/O,所需設(shè)置:RCC初始化里面打開(kāi)RCC_APB2 PeriphClockCmd(RCC_APB2Periph_GPIOA);GPIO里面管腳設(shè)定:IO輸出(50MHz,Out_PP);IO輸入(50MHz,IPU); j) GPIO應(yīng)用 GPI
73、O_WriteBit(GPIOB, GPIO_Pin_2, Bit_RESET);/重置 GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)0x01);/寫入1 GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)0x00);/寫入0 GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6) /讀入IO k)
74、 簡(jiǎn)單Delay函數(shù) void Delay(vu32 nCount)/簡(jiǎn)單延時(shí)函數(shù) for(; nCount != 0; nCount-); 實(shí)驗(yàn)步驟: RCC初始化函數(shù)里添加:RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE); 不用其他中斷,NVIC初始
75、化函數(shù)不用改 GPIO初始化代碼: /IO輸入,GPIOB的2、10、11腳輸出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 /管腳號(hào) GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /輸出速度 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out
76、_PP; /輸入輸出模式 GPIO_Init(GPIOB, &GPIO_InitStructure); /初始化 簡(jiǎn)單的延遲函數(shù): void Delay(vu32 nCount)
77、; /簡(jiǎn)單延時(shí)函數(shù) for (; nCount != 0; nCount-); /循環(huán)計(jì)數(shù)延時(shí) 完成之后再在main.c的while里面寫一段: GPIO_WriteBit(GPIOB, GPIO_Pi
78、n_2, (BitAction)0x01);/寫入1 Delay(0xffff); GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)0x00);/寫入0 Delay(0xffff); 就可以看到連接在PB2腳上的LED閃爍了,單片機(jī)就跑起來(lái)了。
79、60; STM32筆記之八:來(lái)跟PC打個(gè)招呼,基本串口通訊 a) 目的:在基礎(chǔ)實(shí)驗(yàn)成功的基礎(chǔ)上,對(duì)串口的調(diào)試方法進(jìn)行實(shí)踐。硬件代碼順利完成之后,對(duì)日后調(diào)試需要用到的printf重定義進(jìn)行調(diào)試,固定在自己的庫(kù)函數(shù)中。 b) 初始化函數(shù)定義: void USART_Configur
80、ation(void); /定義串口初始化函數(shù) c) 初始化函數(shù)調(diào)用: void UART_Configuration(void); /串口初始化函數(shù)調(diào)用 初始化代碼: void USART_Configuration(void)
81、160; /串口初始化函數(shù) /串口參數(shù)初始化 USART_InitTypeDef USART_InitStructure;
82、60; /串口設(shè)置恢復(fù)默認(rèn)參數(shù) /初始化參數(shù)設(shè)置 USART_InitStructure.USART_BaudRate = 9600;
83、0; /波特率9600 USART_InitStructure.USART_WordLength = USART_WordLength_8b; /字長(zhǎng)8位 USART_InitStructure.USART_StopBits = USART_StopBits_1;
84、160; /1位停止字節(jié) USART_InitStructure.USART_Parity = USART_Parity_No; /無(wú)奇偶校驗(yàn) USART_InitStructur
85、e.USART_HardwareFlowControl = USART_HardwareFlowControl_None;/無(wú)流控制 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;/打開(kāi)Rx接收和Tx發(fā)送功能 USART_Init(USART1, &USART_InitStructure);
86、; /初始化 USART_Cmd(USART1, ENABLE);
87、
88、 /啟動(dòng)串口 RCC中打開(kāi)相應(yīng)串口 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE); GPIO里面設(shè)定相應(yīng)串口管腳模式 /串口1的管腳初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
89、; /管腳9 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /復(fù)用推挽輸出 GPIO_Init(GPIOA, &GPIO_InitStructure);
90、0; /TX初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
91、 /管腳10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; /浮空輸入 GPIO_Init(GPIOA, &GPIO_InitStructure);
92、 /RX初始化 d) 簡(jiǎn)單應(yīng)用: 發(fā)送一位字符 USART_SendData(USART1, 數(shù)據(jù)); /發(fā)送一位數(shù)據(jù) while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) = RESET) &
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 詠雪課件教學(xué)課件
- 2024年度生物醫(yī)藥研發(fā)與生產(chǎn)合同
- 2024年建筑工程施工進(jìn)度保障協(xié)議
- 學(xué)校元旦課件教學(xué)課件
- 04設(shè)計(jì)定制專屬塔吊設(shè)計(jì)制造合同
- 2024專利申請(qǐng)權(quán)的轉(zhuǎn)讓合同書
- 2024年度技術(shù)開(kāi)發(fā)與委托生產(chǎn)合同
- 2024工礦產(chǎn)品的加工合同
- 2024年大型超市送貨員崗位職責(zé)合同
- 2024系統(tǒng)集成合同模板
- 美的電磁爐產(chǎn)品驗(yàn)收檢驗(yàn)指導(dǎo)書
- -天津市南開(kāi)區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期11月期中英語(yǔ)試題
- 早發(fā)性卵巢功能不全的臨床診療專家共識(shí)(2023版)
- 電梯井、集水井內(nèi)側(cè)模板施工工藝
- AOI直通率持續(xù)提升報(bào)告
- 職業(yè)生涯規(guī)劃-旅游管理
- 《融合新聞創(chuàng)作》教學(xué)課件-項(xiàng)目四 移動(dòng)直播新聞制作
- 第13課動(dòng)物與能量(教學(xué)課件)六年級(jí)科學(xué)上冊(cè)(冀人版)
- MCS-51單片機(jī)為核心的智能電導(dǎo)率測(cè)試儀
- 2022年創(chuàng)新創(chuàng)業(yè)教育報(bào)告
- 過(guò)敏診斷證明書模板
評(píng)論
0/150
提交評(píng)論