版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
ARM微控制器與嵌入式系統(tǒng)
1課程概述課程概述認識ARM嵌入式系統(tǒng)基本概念軟件編程硬件使用接口應用玩轉(zhuǎn)ARM微控制器,能夠設計微控制器為核心的電子產(chǎn)品積累計算機、電路基礎知識編程知識模電、數(shù)電知識備戰(zhàn)全國大學生電子設計競賽ARM嵌入式系統(tǒng)嵌入式系統(tǒng)是以應用為中心、以計算機技術(shù)為基礎、軟硬件均可裁剪、適用對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統(tǒng)。其實我們現(xiàn)在說的嵌入式系統(tǒng)是狹義的即是基于某一款嵌入式微處理器(如ARM)所組成的嵌入到對象體中實現(xiàn)智能控制的系統(tǒng),而廣義的嵌入式系統(tǒng)面就比較廣了(如單片機系統(tǒng)、DSP系統(tǒng)等)。微控制器MCU嵌入式系統(tǒng)嵌入式微控制器(MCU)嵌入式微處理器(MPU)嵌入式信號處理器嵌入式片上系統(tǒng)微控制器(MCU,單片機)CPU全球物聯(lián)網(wǎng)市場發(fā)展趨勢01234520172018F2021F2022F物聯(lián)網(wǎng)新入網(wǎng)設備數(shù)量(單位:10億)2019F 2020FIoT
Connection22017-2022年復合年均增長率=14.8%來源:ICinsights2018物聯(lián)網(wǎng)發(fā)展推動MCU應用增長30123420172018F2019F2020F2021F2022F
物聯(lián)網(wǎng)MCU銷量(單位:10億) IoTMCU
(M)來源:ICinsights20182017-2022復合年均增長率=17%微控制器應用廣泛微控制器應用廣泛微控制器應用廣泛微控制器應用廣泛MCU種類51系列單片機(8位單片機)宏晶科技的STC12ATMEL公司的AT89C52恩智浦(NXP)系列華邦公司
Dallas公司MCU種類AVR單片機ATMEGA128L單片機AVR32位UC3微控制器MCU種類PIC單片機MCU種類飛思卡爾單片機(飛思卡爾,原摩托羅拉公司)MCU種類恩智浦(NXP)系列單片機MCU種類MSP430單片機STM32微控制器10STM32定位大眾市場MCU領導者:12大產(chǎn)品系列,超過50個產(chǎn)品線,千款型號,I/O兼容Cortex-M0Cortex-M0+Cortex-M3Cortex-M4Cortex-M7高性能系列主流系列超低功耗系列無線系列Note:Cortex-M0+Radio
Co-processor本學期的開發(fā)對象ARM-Cortex-M4架構(gòu)的微控制器意法半導體公司的STM32F407單片機預備知識英語閱讀能力C語言基礎數(shù)字電路和計算機的基礎知識預備知識英語閱讀能力C語言基礎數(shù)字電路和計算機的基礎知識預備知識英語閱讀能力C語言基礎數(shù)字電路和計算機的基礎知識課程概述讓我們一起進入微控制器和嵌入式的學習吧!LET’SSTART!ARM微控制器與嵌入式系統(tǒng)
2ARM概述主講人:景妮琴北京電子科技職業(yè)學院ARM歷史:起源ARM歷史:起源1980年,英國BBC電視臺策劃了一系列關于計算機的電視節(jié)目。但導演發(fā)現(xiàn)一個問題:怎么給沒見過電腦的觀眾畫餅?ARM歷史:起源此時美國蘋果公司已經(jīng)推出適于個人使用的微型電腦——Apple-II,個人電腦在美國風靡。ARM歷史:起源ARM歷史:起源迫于無奈之下,公司委任索菲·威爾森領導研發(fā)自己的處理器,因為Acorn公司資源掣肘,沒有能力開發(fā)CISC結(jié)構(gòu)的處理器,只能選擇開發(fā)晶體管數(shù)較少的RISC處理器。ARM歷史:起源
ARM的由來ARM歷史:起源ARM歷史:起源ARM歷史:蓬勃發(fā)展NewtonPDAARM歷史:蓬勃發(fā)展ARM歷史:蓬勃發(fā)展1998年4月17日,ARM公司同時在英國倫敦證交所和美國納斯達克上市。ARM歷史:蓬勃發(fā)展ARM歷史:蓬勃發(fā)展2007年底,ARM的雇員總數(shù)為1728人,持有專利700項,全球分支機構(gòu)31家,合作伙伴200家,年收入2.6億英鎊。賣身軟銀2014年7月18日,軟銀宣布將以243億英鎊(約合320億美元)收購ARM。ARM系列處理器ARM系列處理器ARM系列處理器
轉(zhuǎn)自:/article/13324.htmlARM系列處理器麒麟980處理器:Cortex-A76架構(gòu)Cortex-M處理器家族Cortex-M處理器家族Cortex-M處理器家族CMSIS-微控制器軟件接口標準用戶實時操作系統(tǒng)CMSIS層微控制器小結(jié)ARM發(fā)展史ARM系列處理器Cortex-M處理器家族CMSIS-微控制器軟件接口標準ARM微控制器與嵌入式系統(tǒng)
3STM32微控制器主講人:景妮琴北京電子科技職業(yè)學院STM32產(chǎn)品里程碑92018首批基于Cortex-M3通用MCU首批基于Cortex-M3超低功耗MCU首個高性能產(chǎn)品線首個高性能Cortex-M4入門級STM32F0Cortex-M0DSP+增強模擬外設Cortex-M4入門級超低功耗
Cortex-M0+首個基于Cortex-M7MCU超低功耗Cortex-M4#1
ULP273
ULPBench?2007
2009
2010
2011
2012
2013
2014
2015
2016-17最高性能MCU2020CoremarkCortex-M7?超低功耗+增強性能雙核內(nèi)置2.4GHzRF本學期的開發(fā)對象ARM-Cortex-M4架構(gòu)的意法半導體公司的微控制器STM32F407ZGTxSTM32微控制器什么是STM32ST—意法半導體,是一個公司名,即SOC廠商M—Microelectronics的縮寫,表示微控制器32—32bit的意思,表示這是一個32bit的微控制器ST公司微控制命名規(guī)范
ST公司微控制命名規(guī)范STM32能做什么7MeteringCar
audioApplianceSurveillanceeBike DockingSmart
wheelRoboticIoTWearable Drone Share
bike傳統(tǒng)應用:MCU作為主控使用新應用:MCU+RF+Sense+
Algorithm2007201320142018……
ST公司微控制器按應用及功能分為: 1.自動駕駛 2.無線射頻 3.低功耗 4.主流基礎型 5.高性能STM32能做什么STM32怎么選型ST(意法半導體)推出了以基于ARMCortex?-M4為內(nèi)核的STM32F4系列高性能微控制器,其采用了90納米的NVM工藝和ART。ART技術(shù)使得程序零等待執(zhí)行,提升了程序執(zhí)行的效率,將Cortext-M4的性能發(fā)揮到了極致,使得STM32F4系列可達到168MHz。自適應實時加速器能夠完全釋放Cortex-M4內(nèi)核的性能;當CPU工作于所允許的頻率(≤168MHz)時,在閃存中運行的程序,可以達到相當于零等待周期的性能。STM32F4系列微控制器集成了單周期DSP指令和FPU,提升了計算能力,可以進行一些復雜的計算和控制。STM32F4xx微控制器簡介STM32微控制器選型核心板處理器片上資源簡介ST公司微控制均可參考官方選型手冊來了解處理器的片上資源。對于STM32F407ZGT6而言片上資源如下:1、最大工作時鐘168MHz2、Cortex-M4內(nèi)核3、Flash(閃存)1024Kbytes、RAM(隨機存取存儲器)192Kbytes 4、144個引腳,LQFP的封裝,114個IO5、12個16Bit定時器、2個32Bit定時器6、3個ADC、24個ADC通道、2個DAC7、3個SPI、2個IIS、3個IIC、6個串口、2個CAN總線8、1個SDIO、1個FSMC、1個USBOTG-FS、1個USBOTG-HS9、1個DCMI、1個RNG注:STM32F4xx內(nèi)部框圖可參考STM32F4xx數(shù)據(jù)手冊STM32F407內(nèi)部框圖STM32最小系統(tǒng)STM32最小系統(tǒng)STM32最小系統(tǒng)電源電路復位電路時鐘電路程序下載電路啟動電路程序下載電路電源電路小結(jié)STM32產(chǎn)品里程碑STM32如何選型STM32F407的片上資源STM32F407的內(nèi)部框圖STM32最小系統(tǒng)ARM微控制器與嵌入式系統(tǒng)
4多文件編程主講人:景妮琴北京電子科技職業(yè)學院Cortex-M的開發(fā)方法程序的構(gòu)造過程模塊化編程(多文件編程)所謂模塊化編程,就是多文件(.c文件)編程,一個.c文件和一個.h文件可以被稱為一個模塊。多文件編程也就是指一個程序中包含了多個源文件(.C文件)以及頭文件(.h文件)。模塊化編程方法(多文件編程方法)庫函數(shù)的編寫源文件的編寫庫函數(shù)的調(diào)用主程序的編寫模塊化編程方法(多文件編程方法)模塊化編程方法(多文件編程方法)初級方案:3個函數(shù)的聲明和實現(xiàn)放到一個文件中,再在main函數(shù)中調(diào)用。在DEV-C++中編輯一個.h文件(這里可以命名為my.h)并保存。再編輯main.c文件(注意main.c文件要和我們的my.h文件放到同一個目錄下)這個方法要新建一個工程才能完成。模塊化編程方法(多文件編程方法)初級方案:模塊化編程方法(多文件編程方法)初級方案雖然實現(xiàn)了函數(shù)的聲明,但是模塊化的編程是提倡在.h文件中只包含一些聲明,我們卻放進了三個函數(shù)的實現(xiàn)。一般提倡把函數(shù)的時間放到另一個.c文件中。修改版:main.c文件:只放main函數(shù)myfile.h文件:放3個函數(shù)的聲明myfile.c文件:放3個函數(shù)的實現(xiàn)在Dev-C++下建一個工程(與初級方案相同),建好工程后在該目錄下加載main.c文件即可。模塊化編程方法(多文件編程方法)建工程的時候我們可以選擇空工程,也可以選擇典型的Helloworld工程,如果選擇后者,系統(tǒng)會自動建立一個Helloworld的main.c文件;如果選擇前者,后面我們需要建立一個main.c加載到工程中。模塊化編程方法(多文件編程方法)這時我們新建myfile.c文件,注意重命名時輸入myfile.c,并在文件中輸入3個函數(shù)的實現(xiàn)。模塊化編程方法(多文件編程方法)按照同樣的辦法這時我們新建myfile.h文件,注意重命名時輸入myfile.h,并在文件中輸入3個函數(shù)的聲明。模塊化編程方法(多文件編程方法)最后修改main.c中的代碼關于頭文件的內(nèi)容必須注意:1)頭文件中可以和C程序一樣引用其它頭文件,可以寫預處理塊,但不要寫具體的語句。2)可以聲明函數(shù),但不可以定義函數(shù)。3)可以聲明常量,但不可以定義變量。4)可以“定義”一個宏函數(shù)。注意:宏函數(shù)很象函數(shù),但卻不是函數(shù)。其實還是一個聲明。5)結(jié)構(gòu)的定義、自定義數(shù)據(jù)類型一般也放在頭文件中。6)多文件編程時,只能有一個文件包含main()函數(shù),因為一個工程只能有一個入口函數(shù)。我們把包含main()函數(shù)的文件稱為主文件。7)為了更好的組織各個文件,一般情況下一個.c文件對應一個.h文件,并且文件名要相同,例如fun.c和fun.h。8)頭文件可以多次包含相同的頭文件,但效果與只包含一次相同。9)防止重復包含的措施
#ifndefMY_INCLUDE_H#defineMY_INCLUDE_H//頭文件內(nèi)容
#endif
模塊化編程實例(多文件編程實例)多文件程序的編寫要求:C文件中實現(xiàn)求圓的面積,圓的周長,正方形的面積主函數(shù)實現(xiàn)調(diào)用函數(shù)模塊化編程實例(多文件編程實例)小結(jié)Cortex-M的開發(fā)方法程序的構(gòu)造過程模塊化編程方法(多文件編程方法)模塊化編程實例(多文件編程實例)ARM微控制器與嵌入式系統(tǒng)
5STM32微控制器開發(fā)環(huán)境主講人:景妮琴北京電子科技職業(yè)學院STM32微控制器開發(fā)環(huán)境開發(fā)工具安裝Keil5調(diào)試工具下載程序 1、IAR-EWARM是IAR公司推出 2、KEIL原屬于KEIL公司2005年被ARM收購 3、STM32CubeMx是有ST公司推出的一款
圖形化配置編程的軟件。
編程語言可以是C、C++、JAVA、Python 等。
STM32微控制器開發(fā)工具對與STM32微控制器編程使用的開發(fā)工具
STM32開發(fā)環(huán)境搭建-安裝Keil5獲取安裝包安裝Keil5安裝STM32芯片包(添加器件庫)獲取Keil5安裝包
到KEIL的官網(wǎng)下載:/download/product/。提供試用版給你,試用版使用時間是1個月,要長期使用還得買注冊版。
STM32開發(fā)環(huán)境搭建-安裝Keil52.安裝KEIL5雙擊KEIL5安裝包,開始安裝,next
STM32開發(fā)環(huán)境搭建-安裝Keil52.安裝KEIL5Agree,next
STM32開發(fā)環(huán)境搭建-安裝Keil52.安裝KEIL5選擇安裝路徑,路徑不能帶中文,next。
STM32開發(fā)環(huán)境搭建-安裝Keil52.安裝KEIL5填寫用戶信息,全部填空格(鍵盤的space鍵)即可,next。
STM32開發(fā)環(huán)境搭建-安裝Keil52.安裝KEIL5Finish,安裝完畢。
STM32開發(fā)環(huán)境搭建-安裝Keil53.安裝STM32芯片包(添加器件庫)直接去keil的官網(wǎng)下載:/dd2/。在官網(wǎng)中找到STM32F4系列的包下載到本地電腦即可。雙擊keil圖標,界面如下:點擊pack安裝。
STM32開發(fā)環(huán)境搭建-安裝Keil53.安裝STM32芯片包(添加器件庫)選擇ok,然后點擊file
import選擇pack的路徑進行安裝。
STM32開發(fā)環(huán)境搭建-安裝Keil53.安裝STM32芯片包(添加器件庫)安裝好以后就會發(fā)現(xiàn)pack中出現(xiàn)了器件STM32F407,這樣我們就可以進行微控制器的開發(fā)了。
STM32開發(fā)環(huán)境搭建-安裝Keil5調(diào)試工具調(diào)試協(xié)議JTAG協(xié)議SWD調(diào)試模式RDI接口調(diào)試工具JLink仿真器ULink仿真器ST-Link仿真器調(diào)試協(xié)議--JTAG協(xié)議JTAG(JointTestActionGroup,聯(lián)合測試行動小組)是一種國際標準測試協(xié)議(IEEE1149.1兼容),主要用于芯片內(nèi)部測試?,F(xiàn)在多數(shù)的高級器件都支持JTAG協(xié)議,如ARM、DSP、FPGA器件等。標準的JTAG接口是4線:TMS、TCK、TDI、TDO,分別為模式選擇、時鐘、數(shù)據(jù)輸入和數(shù)據(jù)輸出線。調(diào)試協(xié)議--SWD調(diào)試模式SWD接口:串行調(diào)試(SerialWireDebug),是一種和JTAG不同的調(diào)試模式,使用的調(diào)試協(xié)議也不一樣,最直接的體現(xiàn)在調(diào)試接口上,與JTAG的20個引腳相比,SWD只需要4個(或者5個)引腳,結(jié)構(gòu)簡單,但是使用范圍沒有JTAG廣泛,主流調(diào)試器上也是后來才加的SWD調(diào)試模式。 JTAGSWD
調(diào)試協(xié)議--SWD調(diào)試模式RDI接口:遠程調(diào)試接口(RemoteDebugInterface),是ARM公司提出的標準調(diào)試接口,主要用于ARM芯片的仿真,由于各個IDE廠商使用的調(diào)試接口各自獨立,硬件無法進行跨平臺的調(diào)試。現(xiàn)在眾多的IDE廠家都逐步采用標準RDI作為ARM仿真器的調(diào)試接口,因此使跨平臺的硬件調(diào)試成為可能。STM32調(diào)試工具—Jlink仿真器J-Link是德國SEGGER公司推出基于JTAG的仿真器。簡單地說,是給一個JTAG協(xié)議轉(zhuǎn)換盒,即一個小型USB到JTAG的轉(zhuǎn)換盒,其連接到計算機用的是USB接口,而到目標板內(nèi)部用的還是jtag協(xié)議。它完成了一個從軟件到硬件轉(zhuǎn)換的工作。JLINK是一個通用的開發(fā)工具,可以用于KEIL、IAR、ADS等平臺。速度,效率,功能都很好,據(jù)說是眾多仿真器里最強悍的。
STM32調(diào)試工具—Ulink仿真器ULINK是ARM/KEIL公司推出的仿真器,目前網(wǎng)上可找到的是其升級版本,ULINK2和ULINKPro仿真器。ULINK/ULINK2可以配合Keil軟件實現(xiàn)仿真功能,并且僅可以在Keil軟件上使用,增加了串行調(diào)試(SWD)支持,返回時鐘支持和實時代理等功能。STM32調(diào)試工具—STlink仿真器ST-LINK是專門針對意法半導體STM8和STM32系列芯片的仿真器。ST-LINK/V2指定的SWIM標準接口和JTAG/SWD標準接口,其主要功能有:編程功能仿真功能仿真性能編程性能STM32微控制器下載程序選擇調(diào)試工具,安裝驅(qū)動修改設置下載程序到目標板
STM32微控制器下載程序—安裝驅(qū)動安裝ST-Link的驅(qū)動STM32微控制器下載程序—修改設置打開工程,選擇options,單擊Debug選項卡,選擇ST-LinkDebugger,點擊Settings。STM32微控制器下載程序—修改設置單擊完Settings后,出現(xiàn)窗口,點擊確定就可以使用ST-Link下載程序了。如果仿真器連接了電腦則MDK會識別出仿真器仿真器連接了電腦和開發(fā)板,并且開發(fā)板已經(jīng)上電,則仿真器會識別出開發(fā)板的芯片并顯示出來
STM32微控制器下載程序如果前面步驟都成功了,接下來就可以把編譯好的程序下載到開發(fā)板上運行。下載程序不需要其他額外的軟件,直接點擊KEIL中的LOAD按鈕即可。程序下載后,如果沒有出現(xiàn)實驗現(xiàn)象,按復位鍵試試。 小結(jié)開發(fā)工具安裝Keil5調(diào)試工具下載程序ARM微控制器與嵌入式系統(tǒng)
6C語言基礎復習主講人:景妮琴北京電子科技職業(yè)學院C語言基礎復習位操作define宏定義ifdef條件編譯extern變量申明typedef變量別名結(jié)構(gòu)體符號
描述
運算規(guī)則&
按位與兩個位都為1時,結(jié)果才為1|
按位或
兩個位都為0時,結(jié)果才為0^
按位異或兩個位相同為0,相異為1~
取反0變1,1變0<<
左移各二進位全部左移若干位,高位丟棄,低位補0>>
右移各二進位全部右移若干位,對無符號數(shù),高位補0位操作位操作:就是對類型變量可以在位級別進行操作C語言支持下面6種位操作:位操作1.不改變其他位的情況下,對某幾位進行設值方法:對需要設置的位用“&”操作符進行清零操作,然后用“|”操作符設值。例:要改變GPIOA->BSRRL的狀態(tài),可以先對寄存器的值進行“&”清零操作,然后進行“|”或運算。GPIOA->BSRRL&=0xFF0F;//這是將第4-7位清0GPIOA->BSRRL|=0x0040;//設置相應位的值,不改變其他位的值位操作2.移位操作提高代碼的可讀性GPIOx->ODR=(((uint32_t)0x01)<<pinpos);這個操作就是將ODR寄存器的第pinpos位設置為1使用左移比設定一個固定的值要好看,并且重用性高。如:GPIOx->ODR=(((uint32_t)0x03)<<4);GPIOx->ODR=0x0030;這兩個代碼當然是前一句的重用性高一些。位操作3.取反操作技巧取反操作經(jīng)常與“&”操作一起使用,把變量的某位清零如:GPIOx->ODR&=~(((uint32_t)0x01)<<4);這個代碼就是把bit4位清零10011111000000010000010011111011位操作4.位操作實例
(1)把變量的某位清零:此處我們以變量a代表寄存器,并假設寄存器中本來已有數(shù)值,此時我們需要把變量a的某一位清零,且其它位不變。如下代碼清單:1//定義一個變量a=10011111b(二進制數(shù))2unsignedchara=0x9f;3//對bit2清零4a&=~(1<<2);
5//括號中的1左移兩位,(1<<2)得二進制數(shù):00000100b6//按位取反,~(1<<2)得11111011b7//假如a中原來的值為二進制數(shù):a=10011111b8//所得的數(shù)與a作”位與&”運算,a=(10011111b)&(11111011b),9//經(jīng)過運算后,a的值a=10011011b&10//a的bit2位被被零,而其它位不變。10011011
100000110000000100000100100000110000010010000111位操作4.位操作實例(2)對變量的某位進行賦值寄存器位通過“|=”可以對某位進行賦值。1//a=10000011b2a|=(1<<2);3//a=10000111b位操作4.位操作實例(3)對變量的某位取反我們需要對寄存器的某個位進行取反操作,即1變0,0變1,這可以直接用如下操作,其它位不變,見代碼清單。1//a=10010011b2//把bit6取反,其它位不變34a^=(1<<6);5//a=11010011bdefine宏定義define是C語言中的預處理命令,用于宏定義,可以提高源代碼的可讀性,方便編程。常見的格式:#define標識符字符串其中“標識符”是指:宏定義的宏名“字符串”可以是常數(shù)、表達式、格式串等例:#definePLL_M8定義PLL_M的值為8ifdef條件編譯單片機程序開發(fā)過程中,經(jīng)常會遇到一些情況:當滿足某條件時對一組語句進行編譯,而當條件不滿足時則編譯另一組語句。條件編譯命令的常見形式:#ifdef標識符程序段1#else程序段2#endif作用:當標識符已經(jīng)被定義過(一般使用#define命令定義),則對程序段1進行編譯,否則編譯程序段2。extern變量聲明C語言中extern可以置于變量或函數(shù)前,以表示變量或者函數(shù)的定義在別的文件中,提示編譯器遇到此變量和函數(shù)時在其他模塊中尋找其定義。注意,對于extern聲明變量可以多次,但定義只有一次。例:如果看到externu16USART_RX_STA,那么一定就有一個地方定義了u16USART_RX_STA還要注意:extern只能引用,不能賦值。typedef類型別名typedef用于為現(xiàn)有類型創(chuàng)建一個新的名字,或稱為類型別名,用來簡化變量的定義。typedefstruct{uint32_tGPIO_Pin;GPIOMode_TypeDefGPIO_ModeGPIOSpeed_TypeDefGPIO_SpeedGPIOOType_TypeDefGPIO_OType;GPIOPuPd_TypeDefGPIO_PuPd}GPIO_InitTypeDef;這個意思就是為結(jié)構(gòu)體定義了一個類型別名GPIO_InitTypeDef這樣就可以通過這個類型定義變量了:GPIO_InitTypeDefmy_GPIO;結(jié)構(gòu)體聲明結(jié)構(gòu)體類型:Struct結(jié)構(gòu)體名{成員列表;}變量名列表;StructU_TYPE{IntBaudRate;IntWordLength;}Usart1,Usart2;這個意思是定義了兩個結(jié)構(gòu)體類型的變量Usart1和Usart2。小結(jié)位操作define宏定義ifdef條件編譯extern變量申明typedef變量別名結(jié)構(gòu)體ARM微控制器與嵌入式系統(tǒng)
GPIO結(jié)構(gòu)主講人:景妮琴北京電子科技職業(yè)學院STM32寄存器開發(fā)步驟STM32微控制通過寄存器開發(fā)可參考STM32xxxx參考手冊(以STM32F4xx參考手冊為例)。1、新建工程2、了解STM32微控制時鐘框圖3、了解STM32微控制器GPIO內(nèi)部結(jié)構(gòu)4、了解寄存器使用方法5、配置GPIO6、點亮一盞LED燈STM32微控制器-GPIO工作模式STM32微控制器-GPIO工作模式輸入模式輸入浮空輸入上拉輸入下拉模擬功能輸出模式具有上拉或下拉功能的開漏輸出具有上拉或下拉功能的推挽輸出具有上拉或下拉功能的復用功能推挽具有上拉或下拉功能的復用功能開漏GPIO輸入浮空/上拉/下拉模式GPIO模擬模式GPIO開漏輸出模式GPIO推挽輸出模式GPIO開漏復用輸出模式GPIO推挽復用輸出模式推挽和開漏推挽輸出:可以輸出強高低電平,連接數(shù)字器件
推挽和開漏推挽輸出:可以輸出強高低電平,連接數(shù)字器件
推挽和開漏開集
如圖,開集的意思,就是集電極C一端什么都不接,直接作為輸出端口。如果要用這種電路帶一個負載,比如一個LED,必須接一個上拉電阻,就像這樣。當Vin沒有電流,Q5斷開時,LED亮。
當Vin流入電流,Q5導通時,LED滅。推挽和開漏開漏電路,就是把上圖中的三極管換成場效應管(MOSFET)。
N型場效應管各個端口的名稱:
推挽和開漏開漏輸出:只可以輸出強低電平,高電平得靠外部電阻拉高。輸出端相當于三極管的集電極.要得到高電平狀態(tài)需要上拉電阻才行.適合于做電流型的驅(qū)動,其吸收電流的能力相對強(一般20ma以內(nèi))STM32微控制器-GPIO(通用I/O)每個通用I/O端口包括:
4個32位配置寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR和GPIOx_PUPDR)2個32位數(shù)據(jù)寄存器(GPIOx_IDR和GPIOx_ODR)1個32位置位/復位寄存器(GPIOx_BSRR)1個32位鎖定寄存器(GPIOx_LCKR)2個32位復用功能選擇寄存器(GPIOx_AFRH和GPIOx_AFRL)ARM微控制器與嵌入式系統(tǒng)
時鐘樹主講人:景妮琴北京電子科技職業(yè)學院STM32寄存器開發(fā)步驟STM32微控制通過寄存器開發(fā)可參考STM32xxxx參考手冊(以STM32F4xx參考手冊為例)。1、新建工程2、了解STM32微控制時鐘框圖3、了解STM32微控制器GPIO內(nèi)部結(jié)構(gòu)4、了解寄存器使用方法5、配置GPIO6、點亮一盞LED燈STM32微控制器-系統(tǒng)時鐘注:時鐘框圖可參考STM324xx參考手冊STM32微控制器-系統(tǒng)時鐘系統(tǒng)時鐘分類:STM32F4有5個最重要的時鐘源,分別為:HSI,HSE,LSI,LSE,PLL。從時鐘頻率上分為:高速時鐘:HIS,HSE,PLL;低速時鐘:LSI,LSE從來源可以分為:外部時鐘源:HSE,LSE內(nèi)部時鐘源:HIS,LSI,PLLSTM32微控制器-系統(tǒng)時鐘1:LSI是低速內(nèi)部時鐘,RC振蕩器,頻率為32KHz左右,供獨立看門狗和自動喚醒單元使用2:LSE是低速外部時鐘,接頻率為32.768KHz的石英晶體。這個主要是RTC的時鐘源3:HSE是高速外部時鐘,可接石英/陶瓷諧振器或者接外部時鐘源,頻率范圍為4MHz~26MHz。我們的開發(fā)板接的是8MHz的晶振。HSE可以直接作為系統(tǒng)時鐘或者PLL輸入4:HSI是高速內(nèi)部時鐘,RC振蕩器頻率為16MHz,可以直接作為系統(tǒng)時鐘或者用于PLL輸入5:PLL為鎖相環(huán)倍頻輸出。STM32微控制器-系統(tǒng)時鐘5:PLL為鎖相環(huán)倍頻輸出。STM32F4有兩個PLL:主PLL由HSE或HIS提供時鐘信號,并具有兩個不同的輸出時鐘第一個輸出PLLP用于生成高速的系統(tǒng)時鐘(最高168MHz)第二個輸出PLLQ用于生成USBOTGFS的時鐘(48MHz),隨機數(shù)發(fā)生器的時鐘和SDIO的時鐘專用PLL(PLLI2S)用于生成精確時鐘,從而在I2S接口實現(xiàn)高品質(zhì)音頻性能STM32微控制器-系統(tǒng)時鐘主PLL輸出第一個高速時鐘PLLP的計算方法:時鐘源頻率/M*N/PPLLCLKSYSCLK如:外部晶振HSE為8MHz,設定M=8,N=336,P=28MHz/8*336/2=168MHz選擇HSE為PLL時鐘源,同時SYSCLK時鐘源為PLL,那么SYSCLK時鐘為168MHz。STM32微控制器-系統(tǒng)時鐘A.這里是看門狗時鐘輸入。從圖中可以看出,看門狗時鐘源只能是低速的LSI時鐘。B.這里是RTC時鐘源,從圖上可以看出,RTC的時鐘源可以選擇LSI,LSE,以及HSE分頻后的時鐘,HSE分頻系數(shù)為2~31。C.這里是STM32F4輸出時鐘MCO1和MCO2。MCO1是向芯片的PA8引腳輸出時鐘。它有四個時鐘來源分別為:HSI,LSE,HSE和PLL時鐘。MCO2是向芯片的PC9輸出時鐘,它同樣有四個時鐘來源分別為:HSE,PLL,SYSCLK以及PLLI2S時鐘。MCO輸出時鐘頻率最大不超過100MHz。D.這里是系統(tǒng)時鐘。SYSCLK系統(tǒng)時鐘來源有三個方面:HSI,HSE和PLL。在我們實際應用中,因為對時鐘速度要求都比較高我們才會選用STM32F4這種級別的處理器,所以一般情況下,都是采用PLL作為SYSCLK時鐘源。根據(jù)前面的計算公式,大家就可以算出你的系統(tǒng)的SYSCLK是多少。STM32微控制器-系統(tǒng)時鐘E.
這里我們指的是以太網(wǎng)PTP時鐘,AHB時鐘,APB2高速時鐘,APB1低速時鐘。這些時鐘都是來源于SYSCLK系統(tǒng)時鐘。其中以太網(wǎng)PTP時鐘是使用系統(tǒng)時鐘。AHB,APB2和APB1時鐘是經(jīng)過SYSCLK時鐘分頻得來。這里大家記住,AHB最大時鐘為168MHz,APB2高速時鐘最大頻率為84MHz,而APB1低速時鐘最大頻率為42MHz。B.這里是RTC時鐘源,從圖上可以看出,RTC的時鐘源可以選擇LSI,LSE,以及HSE分頻后的時鐘,HSE分頻系數(shù)為2~31。F.這里是指I2S時鐘源。I2S的時鐘源來源于PLLI2S或者映射到I2S_CKIN引腳的外部時鐘。I2S出于音質(zhì)的考慮,對時鐘精度要求很高。STM32F4開發(fā)板使用的是內(nèi)部PLLI2SCLK。STM32微控制器-系統(tǒng)時鐘G.這是STM32F4內(nèi)部以太網(wǎng)MAC時鐘的來源。對于MII接口來說,必須向外部PHY芯片提供25Mhz的時鐘,這個時鐘,可以由PHY芯片外接晶振,或者使用STM32F4的MCO輸出來提供。然后,PHY芯片再給STM32F4提供ETH_MII_TX_CLK和ETH_MII_RX_CLK時鐘。對于RMII接口來說,外部必須提供50Mhz的時鐘驅(qū)動PHY和STM32F4的ETH_RMII_REF_CLK,這個50Mhz時鐘可以來自PHY、有源晶振或者STM32F4的MCO。我們的開發(fā)板使用的是RMII接口,使用PHY芯片提供50Mhz時鐘驅(qū)動STM32F4
ETH_RMII_REF_CLK。H.這里是指外部PHY提供的USBOTGHS(60MHZ)時鐘。STM32微控制器-系統(tǒng)時鐘ARM微控制器與嵌入式系統(tǒng)
STM32寄存器開發(fā)-新建工程主講人:景妮琴北京電子科技職業(yè)學院STM32寄存器開發(fā)步驟STM32微控制通過寄存器開發(fā)可參考STM32xxxx參考手冊(以STM32F4xx參考手冊為例)。1、新建工程2、了解STM32微控制時鐘框圖3、了解STM32微控制器GPIO內(nèi)部結(jié)構(gòu)4、了解寄存器使用方法5、配置GPIO6、點亮一盞LED燈STM32寄存器開發(fā)-新建工程雙擊keil5的圖標,打開如下界面STM32寄存器開發(fā)-新建工程Project->NewProject命名為first_reg,保存在路徑下STM32寄存器開發(fā)-新建工程選擇器件->STM32F407ZGT6,點擊OKSTM32寄存器開發(fā)-新建工程勾選CMSIS中的CORE和Device中的Startup,點擊OKSTM32寄存器開發(fā)-新建工程建好工程后,加載一個C文件,右擊SourceGroup1,添加新建項目,選擇CFile(.c),命名為main.c,點擊Add。STM32寄存器開發(fā)-新建工程建好工程后,加載一個C文件,右擊SourceGroup1,添加新建項目,選擇CFile(.c),命名為main.c,點擊Add。STM32寄存器開發(fā)-新建工程然后在main.c中添加程序,進行編譯,出現(xiàn)下面無錯誤無警告就編譯完成,可以下載程序了。編譯無錯誤,無警告下載ARM微控制器與嵌入式系統(tǒng)
STM32寄存器開發(fā)-點亮led燈主講人:景妮琴北京電子科技職業(yè)學院STM32寄存器開發(fā)步驟STM32微控制通過寄存器開發(fā)可參考STM32xxxx參考手冊(以STM32F4xx參考手冊為例)。1、新建工程2、了解STM32微控制時鐘框圖3、了解STM32微控制器GPIO內(nèi)部結(jié)構(gòu)4、了解寄存器使用方法5、配置GPIO6、點亮一盞LED燈STM32微控制器-GPIO工作方式上電復位后,GPIO默認為浮空狀態(tài),部分特殊功能引腳為特定狀態(tài)。1.2GPIO相關配置寄存器每組GPIO端口的寄存器包括:一個端口模式寄存器(GPIOx_MODER)一個端口輸出類型寄存器(GPIOx_OTYPER)一個端口輸出速度寄存器(GPIOx_OSPEEDR)一個端口上拉下拉寄存器(GPIOx_PUPDR)一個端口輸入數(shù)據(jù)寄存器(GPIOx_IDR)一個端口輸出數(shù)據(jù)寄存器(GPIOx_ODR)一個端口置位/復位寄存器(GPIOx_BSRR)一個端口配置鎖存寄存器(GPIOx_LCKR)兩個復位功能寄存器(低位GPIOx_AFRL&GPIOx_AFRH)4個32位配置寄存器2個32位數(shù)據(jù)寄存器如果配置一個IO口需要2個位,那么剛好32位寄存器配置一組IO口16個IO口如果配置一個IO口只需要1個位,一般高16位保留BSRR寄存器32位分為低16位BSRRL和高16位BSRRH,BSRRL配置一組IO口的16個IO口的置位狀態(tài)(1),BSRRH配置復位狀態(tài)(0)。是每組IO口含10個寄存器。也就是10個寄存器,一共可以控制一組GPIO的16個IO口。STM32微控制器-GPIORCCAHB1外設時鐘使能寄存器(RCC_AHB1ENR)1.2GPIO相關配置寄存器端口模式寄存器(GPIOx_MODER)1.2GPIO相關配置寄存器端口輸出類型寄存器(GPIOx_OTYPER)1.2GPIO相關配置寄存器端口輸出速度寄存器(GPIOx_OSPEEDR)1.2GPIO相關配置寄存器端口上拉/下拉寄存器(GPIOx_PUPDR)1.2GPIO相關配置寄存器端口輸入數(shù)據(jù)寄存器(GPIOx_IDR)1.2GPIO相關配置寄存器端口置位/復位寄存器(GPIOx_BSRR)GPIO端口輸出數(shù)據(jù)寄存器(GPIOx_ODR)(x=A..I)STM32微控制器GPIO配置
STM32微控制器GPIO配置相關寄存器1.開啟GPIO時鐘
RCC_AHB1ENR寄存器 外設時鐘使能寄存器2.配置GPIO工作模式
GPIOx_MODER寄存器 GPIO模式寄存器
GPIOx_OTYPER寄存器 輸出類型寄存器
GPIOx_OSPEEDR寄存器 輸出速度寄存器
GPIOx_PUPDR寄存器 上拉/下拉/浮空寄存器3.控制GPIO輸入/輸出
GPIOx_IDR寄存器 GPIO輸入寄存器
GPIOx_ODR寄存器 GPIO輸出寄存器 注:相關寄存器可參考STM32xxxx參考手冊6.3.12STM32微控制器GPIO配置GPOI輸出配置步驟:①開啟GPIO時鐘
RCC->AHB1ENR②配置GPIO模式寄存器
GPIOH->MODER③配置GPIO輸出類型寄存器
GPIOH->OTYPER④配置GPIO上拉/下拉寄存器
GPIOH->PUPDR⑤配置GPIO速度寄存器
GPIOH->OSPEEDR6控制GPIO輸入/輸出GPIOx->IDR寄存器GPIOx->ODR寄存器GPIO開發(fā)任務請使用寄存器開發(fā),通過GPIOA0、A1、A2、A3點亮led燈。硬件電路圖:led燈連接GPIOA0、A1、A2、A3要點亮led燈,應使這四個IO口為低電平完成編程任務//GPIO掛在AHB1時鐘總線上,開啟AHB1的時鐘RCC->AHB1ENR|=1;//配置輸出模式GPIOA->MODER&=0xFFFFFF00;//清除GPIOA->MODER|=0xFFFFFF55;//置為01010101//輸出類型GPIOA->OTYPER&=0xFFFFFF00;//輸出速度GPIOA->OSPEEDR|=0xFFFFFFAA;//配置上下拉GPIOA->PUPDR&=0xFFFFFF00;GPIOA->PUPDR|=0xFFFFFF55;//控制GPIO輸出GPIOA->ODR&=0xFFFFFF00; 小結(jié)STM32寄存器開發(fā)步驟:1、新建工程2、了解STM32微控制時鐘框圖3、了解STM32微控制器GPIO內(nèi)部結(jié)構(gòu)4、了解寄存器使用方法5、配置GPIO6、點亮LED燈ARM微控制器與嵌入式系統(tǒng)
STM32庫函數(shù)開發(fā)-工程模板的建立工程模板的建立
STM32工程管理 STM32庫函數(shù)工程模板創(chuàng)建STM32工程管理工程目錄:USER-------------用戶文件SYSTEM---------系統(tǒng)文件CORE-------------微控制器軟件接口標準文件HARDWARE----外設文件FWLIB------------固件庫函數(shù)USER用戶文件STM32工程管理main.c 主源文件main.h主庫函數(shù)stm32f4xx_it.c
相關中斷源文件stm32f4xx_it.h
相關中斷.h文件system_stm32f4xx.c系統(tǒng)源文件system_stm32f4xx.h系統(tǒng).h文件stm32f4xx_conf.h外設驅(qū)動配置文件。在ST官網(wǎng)下載最新標準固件庫(STM32F4xx_DSP_StdPeriph_Lib_V1.8.0)并解壓,從中選擇需要的文件,拷貝到下面的文件夾中。SYSTEM系統(tǒng)文件
delay文件sys文件usart文件
delay.c 延時函數(shù)文件delay.h sys.c 位帶操作函數(shù)文件
sys.husart.c 串口操作函數(shù)文件
usart.hSTM32工程管理CORE微控制器軟件接口標準文件
core_cm4.h
內(nèi)核功能的定義core_cmFunc.h 內(nèi)核核心功能接口頭文件core_cmInstr.h 包含內(nèi)核核心專用指令core_cmSimd.h 包含與編譯器相關的處理 startup_stm32f40_41xxx.s
啟動文件stm32f4xx.h
頭文件STM32工程管理HARDWARE外設文件
led.c LED燈led.h
key.c 按鍵key.hlcd.c LCD顯示屏lcd.h...... 外設文件STM32工程管理FWLIB文件incsrcmisc.h stm32f40x_rcc.h 庫函數(shù)對應頭文件stm32f40x_gpio.h。。。。。。misc.cstm32f40x_rcc.c 庫函數(shù)源文件
stm32f40x_gpio.c。。。。。。STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\STM32F4xx_StdPeriph_DriverSTM32工程管理STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Includecore_cm4.hcore_cmFunc.hcore_cmInstr.hcore_cmSimd.hSTM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\armstartup_stm32f40_41xxx.sSTM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Templatessystem_stm32f4xx.cSTM32工程管理stm32f4xx.h
system_stm32f4xx.h
STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Device\ST\STM32F4xx\IncludeSTM32工程管理STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Templates
stm32f4xx_it.c
stm32f4xx_it.hSTM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Templatesstm32f40x_conf.hSTM32工程管理STM32工程管理STM32工程管理STM32庫函數(shù)工程模板創(chuàng)建打開KeiluVision5,新建工程,保存在USR文件夾中。選擇CPU(STM32F407ZG),點擊OK后可以退出,不需要選擇配套固件。STM32庫函數(shù)工程模板創(chuàng)建在所建的工程中添加文件,如圖,點擊manage管理工程。庫函數(shù)開發(fā)STM32庫函數(shù)工程模板創(chuàng)建庫函數(shù)開發(fā)STM32庫函數(shù)工程模板創(chuàng)建小結(jié)讓我們一起開始進行庫函數(shù)編程吧!工程管理—5個文件夾(從固件庫中拷貝內(nèi)容)工程模板的建立—建立工程,進行參數(shù)修改ARM微控制器與嵌入式系統(tǒng)
庫函數(shù)開發(fā)-點亮led燈主講人:景妮琴北京電子科技職業(yè)學院內(nèi)容認識GPIO結(jié)構(gòu)體打開時鐘了解GPIO庫函數(shù)了解開發(fā)板硬件電路編程方法完成任務GPIO結(jié)構(gòu)體typedefstruct{uint32_tGPIO_Pin;GPIOMode_TypeDefGPIO_Mode;GPIOSpeed_TypeDefGPIO_Speed;GPIOOType_TypeDefGPIO_OType;GPIOPuPd_TypeDefGPIO_PuPd;}GPIO_InitTypeDef;GPIOMode結(jié)構(gòu)體typedefenum{GPIO_Mode_IN=0x00,/*!<GPIOInputMode*/GPIO_Mode_OUT=0x01,/*!<GPIOOutputMode*/GPIO_Mode_AF=0x02,/*!<GPIOAlternatefunctionMode*/GPIO_Mode_AN=0x03/*!<GPIOAnalogMode*/}GPIOMode_TypeDef;GPIOOType結(jié)構(gòu)體typedefenum{GPIO_OType_PP=0x00,GPIO_OType_OD=0x01}GPIOOType_TypeDef;GPIOSpeed結(jié)構(gòu)體typedefenum{GPIO_Low_Speed=0x00,/*!<Lowspeed*/GPIO_Medium_Speed=0x01,/*!<Mediumspeed*/GPIO_Fast_Speed=0x02,/*!<Fastspeed*/GPIO_High_Speed=0x03/*!<Highspeed*/}GPIOSpeed_TypeDef;#defineGPIO_Speed_2MHzGPIO_Low_Speed#defineGPIO_Speed_25MHzGPIO_Medium_Speed#defineGPIO_Speed_50MHzGPIO_Fast_Speed#defineGPIO_Speed_100MHzGPIO_High_SpeedGPIOPuPd結(jié)構(gòu)體typedefenum{GPIO_PuPd_NOPULL=0x00,GPIO_PuPd_UP=0x01,GPIO_PuPd_DOWN=0x02}GPIOPuPd_TypeDef;GPIO結(jié)構(gòu)體typedefenum{Bit_RESET=0,Bit_SET}BitAction;GPIO結(jié)構(gòu)體#defineGPIO_Pin_0((uint16_t)0x0001)/*Pin0selected*/#defineGPIO_Pin_1((uint16_t)0x0002)/*Pin1selected*/#defineGPIO_Pin_2((uint16_t)0x0004)/*Pin2selected*/#defineGPIO_Pin_3((uint16_t)0x0008)/*Pin3selected*/#defineGPIO_Pin_4((uint16_t)0x0010)/*Pin4selected*/#defineGPIO_Pin_5((uint16_t)0x0020)/*Pin5selected*/#defineGPIO_Pin_6((uint16_t)0x0040)/*Pin6selected*/#defineGPIO_Pin_7((uint16_t)0x0080)/*Pin7selected*/#defineGPIO_Pin_8……((uint16_t)0x0100)/*Pin8selected*/#defineGPIO_Pin_15((uint16_t)0x8000)/*Pin15selected*/#defineGPIO_Pin_All((uint16_t)0xFFFF)/*Allpinsselected*/STM32微控制器-添加頭文件添加全局宏定義:USE_STDPERIPH_DRIVER#ifdefUSE_STDPERIPH_DRIVER#include"stm32f4xx_conf.h"#endif在stm32f4xx_conf.h中加載了這些庫函數(shù):STM32微控制器-添加頭文件主要添加頭文件:#include"stm32f4xx.h"#include"main.h"而stm32f4xx_gpio.h、stm32f4xx_rcc.h已經(jīng)包含只需要在fwlib中添加源文件:stm32f4xx_gpio.c、stm32f4xx_rcc.c即可。注意:這里需要用到哪個源文件就加哪個,這里需要用GPIO點亮led燈,因此添加rcc和gpio即可。STM32微控制器-重要函數(shù)1個初始化函數(shù):voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);2個讀取輸入電平函數(shù):uint8_tGPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);uint16_tGPIO_ReadInputData(GPIO_TypeDef*GPIOx);2個讀取輸出電平函數(shù):uint8_tGPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);uint16_tGPIO_ReadOutputData(GPIO_TypeDef*GPIOx);STM32微控制器-重要函數(shù)4個設置輸出電平函數(shù):voidGPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);voidGPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);voidGPIO_WriteBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,BitActionBitVal);voidGPIO_Write(GPIO_TypeDef*GPIOx,uint16_tPortVal);STM32微控制器-庫函數(shù)1個初始化函數(shù):
voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);作用:初始化一個或者多個IO口(同一組)的工作模式,輸出類型,速度以及上下拉方式。也就是一組IO口的4個配置寄存器。GPIOx->MODERGPIOx->OSPEEDRGPIOx->OTYPERGPIOx->PUPDRGPIO_PinSTM32微控制器-庫函數(shù)GPIO_Init函數(shù)初始化樣例:GPIO_InitTypeDef
GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,ENABLE);//使能GPIOH時鐘
//GPIOH12,H13初始化設置
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_13;//LED1和LED2對應IO口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;//普通輸出模式
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽輸出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOH,&GPIO_InitStructure);//初始化GPIOH12,13可以一次初始化一個IO組下的多個IO,前提是這些IO口的配置方式一樣。STM32微控制器-庫函數(shù)
2個讀取輸入電平函數(shù):uint8_tGPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);作用:讀取某個GPIO的輸入電平。實際操作的是GPIOx_IDR寄存器。例如:GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5);//讀取GPIOA5的輸入電平STM32微控制器-庫函數(shù)
2個讀取輸入電平函數(shù):uint16_tGPIO_ReadInputData(GPIO_TypeDef*GPIOx);作用:讀取某組GPIO的輸入電平。實際操作的也是GPIOx_IDR寄存器。例如:GPIO_ReadInputData(GPIOA);//讀取GPIOA組中所有I/O口輸入電平STM32微控制器-庫函數(shù)
2個讀取輸出電平函數(shù):uint8_tGPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);作用:讀取某個GPIO的輸出電平。實際操作的是GPIO_ODR寄存器。例如:
GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_5);//讀取GPIOA.5的輸出電平STM32微控制器-庫函數(shù)
2個讀取輸出電平函數(shù):uint16_tGPIO_ReadOutputData(GPIO_TypeDef*GPIOx);作用:讀取某組GPIO的輸出電平。實際操作的是GPIO_ODR寄存器。例如:GPIO_ReadOutputData(GPIOA);//讀取GPIOA組中所有I/O口輸出電平STM32微控制器-庫函數(shù)4個設置輸出電平函數(shù):voidGPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);作用:設置某個IO口輸出為高電平(1)。實際操作BSRRL寄存器例如:GPIO_SetBits(GPIOA,GPIO_Pin_0);就是為GPIOA0設置高電平voidGPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);作用:設置某個IO口輸出為低電平(0)。實際操作的BSRRH寄存器。例如:GPIO_ResetBits(GPIOA,GPIO_Pin_0);就是為GPIOA0設置低電平STM32微控制器-庫函數(shù)4個設置輸出電平函數(shù):voidGPIO_WriteBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,BitActionBitVal);作用:為某個IO口設置BitVal的值,BitVal可以是0也可以是1。例如:GPIO_WriteBit(GPIOA,GPIO_Pin_0,1);就是為GPIOA0設置高電平voidGPIO_Write(GPIO_TypeDef*GPIOx,uint16_tPortVal);作用:為某組IO口設置PortVal的值。例如:GPIO_WriteBit(GPIOA,0x0100);就是為GPIOA設置0x0100的值。硬件電路任務:點亮一盞led燈。分析:1.底板上的led燈的硬件電路圖如右圖,我們發(fā)現(xiàn)led燈D1的左端接3.3V高電平,為了點亮它,需要有電流流過,也就是需要有壓差,左邊高電平,右邊應為低電平2.如果我們用杜邦線在D1的右邊連接GPIOA0,那么A0的電平應為低電平3.下面的任務就是為GPIOA0設置低電平。庫函數(shù)編程工程樹在工程模板的基礎上完成在hardware中新建led.c和led.h文件led.c品在hardware中l(wèi)ed.h只需要在main中#include即可led.c要實現(xiàn)GPIO的配置以及初始化led.h是led.c中函數(shù)的聲明庫函數(shù)編程-led.c在led.c中完成了一個函數(shù)的實現(xiàn)led_Init()在led_Init()中,定義了結(jié)構(gòu)體變量GPIO_InitStructure,打開了GPIOA的時鐘,完成了結(jié)構(gòu)體的配置,最后進行了初始化。庫函數(shù)編程-led.h在led.h中完成了一個函數(shù)的聲明#ifndef__LED_H#define__LED_Hvoidled_Init(void);#endif庫函數(shù)編程-main.c在main.c中加載了三個庫:前兩個是系統(tǒng)庫,后面這個是用戶自己建的庫#include"stm32f4xx.h"#include"main.h"#include"led.h“在主函數(shù)中調(diào)用了led_Init(),這個意思是配置GPIOA0在主函數(shù)中使用GPIO_ResetBits(GPIOA,GPIO_Pin_0);為GPIOA0設置低電平庫函數(shù)編程-main.c在main.c中加載了三個庫:前兩個是系統(tǒng)庫,后面這個是用戶自己建的庫#include"stm32f4xx.h"#include"main
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度文化創(chuàng)意產(chǎn)業(yè)投資合作協(xié)議2篇
- 2025年產(chǎn)權(quán)車位買賣及車位增值服務與物業(yè)管理合同4篇
- 個人居間服務合同模板:房產(chǎn)交易中介合同版
- 2024年環(huán)保型廢紙買賣合同
- 2024版醫(yī)療設備采購合同
- 2025年度環(huán)保材料銷售代理合同模板4篇
- 中英雙語2024年土地租賃協(xié)議模板版B版
- 2025年度現(xiàn)代服務業(yè)場承包經(jīng)營合同樣本3篇
- 個人借款擔保責任合同范本2024版B版
- 2025年度征收拆遷安置房買賣合同范本(含安置補償與產(chǎn)權(quán)過戶)4篇
- 2023年湖北省武漢市高考數(shù)學一模試卷及答案解析
- 城市軌道交通的網(wǎng)絡安全與數(shù)據(jù)保護
- 英國足球文化課件
- 《行政職業(yè)能力測驗》2023年公務員考試新疆維吾爾新疆生產(chǎn)建設兵團可克達拉市預測試題含解析
- 醫(yī)院投訴案例分析及處理要點
- 燙傷的安全知識講座
- 工程變更、工程量簽證、結(jié)算以及零星項目預算程序?qū)嵤┘殑t(試行)
- 練習20連加連減
- 五四制青島版數(shù)學五年級上冊期末測試題及答案(共3套)
- 員工內(nèi)部崗位調(diào)換申請表
- 商法題庫(含答案)
評論
0/150
提交評論