




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
微機(jī)原理思考:如何利用已學(xué)知識(shí)設(shè)計(jì)一個(gè)房屋簡(jiǎn)易防賊裝置??保安?機(jī)關(guān)?機(jī)械?捕鼠器1捕鼠器2
電子?計(jì)算機(jī)?
第0章
緒論1計(jì)算機(jī)的問(wèn)世2計(jì)算機(jī)經(jīng)歷了五個(gè)時(shí)代3微型計(jì)算機(jī)結(jié)構(gòu)框圖及單片機(jī)定義4
單片機(jī)的發(fā)展?fàn)顩r5為什么學(xué)及如何學(xué)1946年情人節(jié),世界上第一臺(tái)電子計(jì)算機(jī)誕生
1.計(jì)算機(jī)的問(wèn)世17468個(gè)電子管、6萬(wàn)個(gè)電阻器1萬(wàn)個(gè)電容器、6千個(gè)開(kāi)關(guān)重30噸,占地170平方米耗電174千瓦每次一開(kāi)機(jī),整個(gè)費(fèi)城西區(qū)的電燈都為之黯然失色每15分鐘就可能燒掉一支真空管每秒只能運(yùn)行5千次加法運(yùn)算電子管計(jì)算機(jī)晶體管計(jì)算機(jī)集成電路計(jì)算機(jī)大規(guī)模、超大規(guī)模集成電路計(jì)算機(jī)智能計(jì)算機(jī)ENIAC—ElectronicNumericalIntegrator1947年貝爾實(shí)驗(yàn)室發(fā)明了晶體管第一個(gè)半導(dǎo)體集成電路1958年
2計(jì)算機(jī)經(jīng)歷了五個(gè)時(shí)代計(jì)算機(jī)巨型機(jī)微型機(jī)通用微機(jī)單片機(jī)通用單片機(jī)專用單片機(jī)小型機(jī)集成在同一塊芯片上——單片機(jī)微型計(jì)算機(jī)由運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備和輸出設(shè)備五大部分組成存儲(chǔ)器(ROM、RAM)I/O接口I/O設(shè)備(輸入/輸出)地址總線(AB)數(shù)據(jù)總線
(DB)控制總線(CB)CPU運(yùn)算器控制器馮.諾依曼3微型計(jì)算機(jī)結(jié)構(gòu)框圖及單片機(jī)定義單片機(jī)是早期SingleChipMicrocomputer的直譯,它忠實(shí)地反映了早期單片微機(jī)的形態(tài)和本質(zhì)。它是一種把處理器CPU、隨機(jī)存儲(chǔ)器RAM、只讀存儲(chǔ)器ROM、多種I/O口等功能集成到一塊芯片上的小而完善的計(jì)算機(jī)系統(tǒng)。單片機(jī)也被稱為微控制(MicrocontrollerUnit),常用英文字母的縮寫(xiě)MCU表示單片機(jī),它最早是被用在工業(yè)控制領(lǐng)域。單片機(jī)定義單片機(jī)芯片開(kāi)關(guān)輸入LED顯示數(shù)碼管顯示串行模塊鍵盤(pán)輸入鼠標(biāo)輸入CRT或LED顯示器輸出主機(jī)內(nèi)有CPU、存儲(chǔ)器、I/O接口等部件單片機(jī)與PC機(jī)的比較單片機(jī)與PC機(jī)的比較單片機(jī)是特殊的計(jì)算機(jī)!
1.單片機(jī)的特點(diǎn)(1)控制性能好、可靠性高
可對(duì)I/O端口直接操作,位操作能力更是其它計(jì)算機(jī)無(wú)法比擬的。由于CPU、存儲(chǔ)器及I/O接口集成在同一芯片內(nèi),數(shù)據(jù)在傳送時(shí)受干擾的影響較小,且不易受環(huán)境條件的影響。(2)體積小、價(jià)格低、易于產(chǎn)品化
應(yīng)用系統(tǒng)的印制板減小、接插件減少、安裝簡(jiǎn)單方便。4單片機(jī)的特點(diǎn)及應(yīng)用領(lǐng)域單片機(jī)在哪里?——電冰箱輸入設(shè)備(箭頭指向單片機(jī)):加、減按鈕輸出設(shè)備(箭頭指向設(shè)備):4個(gè)指示燈、電磁線圈的驅(qū)動(dòng)電路單片機(jī)在哪里?——電磁爐單片機(jī)就好像核心控制者,統(tǒng)管著液晶屏、USB口、存儲(chǔ)器、DAC及驅(qū)動(dòng)電路、按鈕等外部設(shè)備,并有序地在這些設(shè)備中傳遞、交換數(shù)據(jù)或信號(hào)。單片機(jī)在哪里?——MP3播放機(jī)臺(tái)燈單片機(jī)在哪里?——臺(tái)燈一輛轎車(chē)有幾十個(gè)單片機(jī)單片機(jī)在哪里?——汽車(chē)單片機(jī)在哪里?下面開(kāi)啟單片機(jī)應(yīng)用之毀三觀系列以上為常規(guī)單片機(jī)應(yīng)用你們口袋里就裝了很多計(jì)算機(jī)--單片機(jī)單片機(jī)在哪里?——SIM卡SIM卡是帶有微處理器的芯片,內(nèi)有5個(gè)模塊,每個(gè)模塊對(duì)應(yīng)一個(gè)功能:CPU(8位/16位/32位)、程序存儲(chǔ)器ROM、工作存儲(chǔ)器RAM、數(shù)據(jù)存儲(chǔ)器EEPROM和串行通信單元。SIM卡在與手機(jī)連接時(shí),最少需要5個(gè)連接線:*電源(Vcc)*時(shí)鐘(CLK)*數(shù)據(jù)I/O口(Data)*復(fù)位(RST)*接地端(GND)單片機(jī)在哪里?——飯卡單片機(jī)在哪里?——銀行卡單片機(jī)還隱藏在我們?nèi)粘I畹脑S多電子產(chǎn)品中,如鼠標(biāo)、遙控器、洗衣機(jī)、機(jī)器人等。綜觀這些電子產(chǎn)品都有一個(gè)特點(diǎn),它們都有輸入或輸出設(shè)備。比如鼠標(biāo)的按鍵、遙控器的按鍵等是輸入設(shè)備;洗衣機(jī)的電機(jī)、機(jī)器人的執(zhí)行機(jī)構(gòu)是輸出設(shè)備。形形色色的輸入設(shè)備和輸出設(shè)備都在單片機(jī)的控制下協(xié)調(diào)工作。更多單片機(jī)2025/4/1622單片機(jī)技術(shù)的應(yīng)用遍布國(guó)民經(jīng)濟(jì)與人民生活的各個(gè)領(lǐng)域1.單片機(jī)的發(fā)展過(guò)程
(1)低性能8位單片機(jī)階段
1976年,Intel公司推出了MCS-48系列單片機(jī)。8位CPU、1K字節(jié)ROM、64字節(jié)RAM、27根I/O線和1個(gè)8位定時(shí)/計(jì)數(shù)器。
特點(diǎn):存儲(chǔ)器容量小,尋址范圍?。ú淮笥?K),無(wú)串行接口,指令系統(tǒng)功能不強(qiáng)。
4單片機(jī)的發(fā)展?fàn)顩r
特點(diǎn):結(jié)構(gòu)體系完善,性能已大大提高,面向控制的特點(diǎn)進(jìn)一步突出?,F(xiàn)在MCS-51已成為公認(rèn)的單片機(jī)經(jīng)典機(jī)種。
1980年,Intel公司推出了MCS-51系列單片機(jī):8位CPU、4K字節(jié)ROM、128字節(jié)RAM、4個(gè)8位并口、1個(gè)全雙工串行口、2個(gè)16位定時(shí)/計(jì)數(shù)器。尋址范圍64K,并有控制功能較強(qiáng)的布爾處理器。
(2)高性能8位單片機(jī)階段5單片機(jī)的發(fā)展?fàn)顩r
(3)
8位單片機(jī)鞏固發(fā)展及16位單片機(jī)、32位單片機(jī)推出階段。
特點(diǎn):片內(nèi)面向測(cè)控系統(tǒng)電路增強(qiáng),使之可以方便靈活地用于復(fù)雜的自動(dòng)測(cè)控系統(tǒng)及設(shè)備。“微控制器”的稱謂更能反應(yīng)單片機(jī)的本質(zhì)。1982年,Intel推出MCS-96系列單片機(jī)。芯片內(nèi)集成:16位CPU、8K字節(jié)ROM、232字節(jié)RAM、5個(gè)8位并口、1個(gè)全雙工串行口、2個(gè)16位定時(shí)/計(jì)數(shù)器。尋址范圍64K。片上還有8路10位ADC、1路PWM輸出及高速I(mǎi)/O部件等。MCS-51系列單片機(jī)的缺點(diǎn):時(shí)鐘利用率不高。(需要至少12個(gè)以上的時(shí)鐘脈沖才能執(zhí)行完一條指令);片內(nèi)不包含ADC、DAC、WATCHDOG、PWM、CAN控制器等。故現(xiàn)在有些公司對(duì)MCS51單片機(jī)進(jìn)行了設(shè)計(jì)改造,使新一代的MCS-51兼容單片機(jī)具有了高速、高效工作的特性,并在51系列芯片中集成了許多新的功能特性(如A/D、D/A等)。國(guó)內(nèi)人們廣泛使用MCS-51系列單片機(jī)。因此我們需要學(xué)好、掌握MCS51系列單片機(jī)技術(shù)。2.單片機(jī)產(chǎn)品近況
ATMEL公司融入Flash存儲(chǔ)器技術(shù)的AT89系列宏晶科技公司的STC單片機(jī)
Philips公司的80C51、80C552系列
華邦公司的W78C51、W77C51高速低價(jià)系列
ADI公司的ADμC8xx高精度ADC系列
LG公司的GMS90/97低壓高速系列
Maxim公司的DS89C420高速(50MIPS)系列
Cygnal公司的C8051F系列高速SOC單片機(jī)
51系列產(chǎn)品繁多,已推出的主要產(chǎn)品有:非51結(jié)構(gòu)單片機(jī)新品不斷推出,給用戶提供了更為廣泛的選擇空間,近年來(lái)推出的非51系列的主要產(chǎn)品有:
Intel的MCS-96系列16位單片機(jī)ATMEL公司的AVR單片機(jī),是流行的Arduino的控制器
Microchip的PIC系列RISC單片機(jī)
TI的MSP430F系列16位低功耗單片機(jī)
ST的STM32系列32位單片機(jī)STM32單片機(jī)介紹其實(shí),51單片機(jī)太弱了……51STM32體系8位32位主頻1.2~33MHz(12MHz)72MHz
ROM/FLASH4k512K
RAM128
64K中斷源6個(gè)60定時(shí)器2個(gè)11個(gè)UART1個(gè)5個(gè)A/D、D/A無(wú)3個(gè)12位A/D、2個(gè)12位D/A典型芯片對(duì)比51存活的原因:便宜單片機(jī)的應(yīng)用正從根本上改變著傳統(tǒng)的控制系統(tǒng)設(shè)計(jì)思想和設(shè)計(jì)方法。從前必須由模擬電路或數(shù)字電路實(shí)現(xiàn)的大部分控制功能,現(xiàn)在已能使用單片微機(jī)通過(guò)軟件方法實(shí)現(xiàn)了。這種以軟件取代硬件,并能提高系統(tǒng)性能的控制技術(shù),稱之為微控制技術(shù)。這標(biāo)志著一種全新概念的建立。5為什么學(xué)及如何學(xué)(對(duì)于普通人)學(xué)習(xí)單片機(jī)是理解工業(yè)社會(huì)的一種途徑如何利用已學(xué)知識(shí)設(shè)計(jì)一個(gè)簡(jiǎn)易防賊裝置??實(shí)踐是學(xué)習(xí)單片機(jī)技術(shù)的必由之路!5為什么學(xué)及如何學(xué)(對(duì)于開(kāi)發(fā)者)善用開(kāi)發(fā)板6為什么學(xué)及如何學(xué)Keil6為什么學(xué)及如何學(xué)關(guān)于編程語(yǔ)言問(wèn)題1.機(jī)器語(yǔ)言在單片機(jī)中,用二進(jìn)制代碼表示的指令、數(shù)字和符號(hào)簡(jiǎn)稱為機(jī)器語(yǔ)言。直接用機(jī)器語(yǔ)言編寫(xiě)的程序稱為機(jī)器語(yǔ)言程序。缺點(diǎn):程序不易看懂,不便于記憶,容易出錯(cuò)。目前,用于程序設(shè)計(jì)的語(yǔ)言基本上分為三種:6為什么學(xué)及如何學(xué)2.匯編語(yǔ)言用助記符表示的指令稱為符號(hào)語(yǔ)言或匯編語(yǔ)言。匯編語(yǔ)言程序(源程序)需要“匯編”(由專門(mén)的匯編程序完成)才能轉(zhuǎn)換成機(jī)器語(yǔ)言。得到的機(jī)器語(yǔ)言程序稱為目標(biāo)程序。
特點(diǎn):是面向機(jī)器的語(yǔ)言,必須對(duì)硬件有一定的了解。助記符指令和機(jī)器指令一一對(duì)應(yīng)。能直接管理和控制硬件設(shè)備(功能部件)。6為什么學(xué)及如何學(xué)3.高級(jí)語(yǔ)言高級(jí)語(yǔ)言不受具體機(jī)器的限制,都是參照一些數(shù)學(xué)語(yǔ)言而設(shè)計(jì)的,使用了許多數(shù)學(xué)公式和數(shù)學(xué)計(jì)算上的習(xí)慣用語(yǔ),非常擅長(zhǎng)于科學(xué)計(jì)算。常用的高級(jí)語(yǔ)言,如BASIC、FORTRAN、C語(yǔ)言等。
特點(diǎn):通用性強(qiáng),直觀、易懂、易學(xué)、可讀性好。計(jì)算機(jī)不能直接識(shí)別和執(zhí)行。(需要進(jìn)行編譯)發(fā)展很快。易懂、易學(xué)?while(x--){for(i=120;i>0;i--);}111011110001111110101010000001100111000000000001000111100100101011000000000101111111010111100011101101110100111001010000000000100000011101110000111011000000011110111MOVA,R7DECR7MOVR2,0x06JNZC:000ADECR6ORLA,R2JZC:0018MOVR5,#0x78MOVA,R5SETBCSUBBA,#0x00JCDelayMS(C:0003)DECR5SJMPC:000F機(jī)器語(yǔ)言、匯編、C語(yǔ)言對(duì)比1.1計(jì)算機(jī)中的數(shù)制及編碼1.2C語(yǔ)言基礎(chǔ)第一章
單片機(jī)與C語(yǔ)言基礎(chǔ)1.1計(jì)算機(jī)中的數(shù)制及編碼十進(jìn)制數(shù)十進(jìn)制數(shù)有兩個(gè)主要特點(diǎn):
(1)有10個(gè)不同的數(shù)字符號(hào):0、1、2、…、9;
(2)低位向高位進(jìn)位的規(guī)律是“逢十進(jìn)一”。因此,同一個(gè)數(shù)字符號(hào)在不同的數(shù)位所代表的數(shù)值是不同的。如555.5中4個(gè)5分別代表500、50、5和0.5,這個(gè)數(shù)可以寫(xiě)成555.5=5×102+5×101+5×100+5×10-1
式中的10稱為十進(jìn)制的基數(shù),102、101、100、10-1稱為各數(shù)位的權(quán)。二進(jìn)制數(shù)
例如,二進(jìn)制數(shù)1011.01可表示為(1011.01)2=1×23+0×22+1×21+1×20+0×2-1+1×2-2
在二進(jìn)制數(shù)中,只有兩個(gè)不同數(shù)碼:0和1,進(jìn)位規(guī)律為“逢二進(jìn)一”。
一般,在二進(jìn)制數(shù)末尾加b表示其進(jìn)制:(1011)2=1011B十六進(jìn)制
一般,在十六進(jìn)制數(shù)開(kāi)頭加0x表示其進(jìn)制,或末尾加H:(F5E)16=0xF5E=0F5EH在十六進(jìn)制中,有0、1、2、…、9、A、B、C、D、E、F共16個(gè)不同的數(shù)碼,進(jìn)位方法是“逢十六進(jìn)一”。例如,(3A8.0D)16可表示為(3A8.0D)16=3×162+10×161+8×160+0×16-1+13×16-2
各種進(jìn)位制的對(duì)應(yīng)關(guān)系十進(jìn)制二進(jìn)制八進(jìn)制十六進(jìn)制十進(jìn)制二進(jìn)制八進(jìn)制十六進(jìn)制000091001119111110101012A2102211101113B3113312110014C41004413110115D51015514111016E61106615111117F7111771610000201081000108不同進(jìn)制間的相互轉(zhuǎn)換二、十六進(jìn)制轉(zhuǎn)換成十進(jìn)制例1
將數(shù)(10.101)2,(2D.A4)16轉(zhuǎn)換為十進(jìn)制。(10.101)2=1×21+0×20+1×2-1+0×2-2+1×2-3=2.625(2D.A4)16=2×161+13×160+10×16-1+4×16-2=45.64062二進(jìn)制與十六進(jìn)制之間的相互轉(zhuǎn)換00101011.011010002B.68即(101011.01101)2=(2B.68)16
由于24=16,故可采用“合四為一”的原則,即從小數(shù)點(diǎn)開(kāi)始分別向左、右兩邊各以4位為一組進(jìn)行二—十六換算:若不足4位的以0補(bǔ)足,便可將二進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)。反之,采用“一分為四”的原則,每位十六進(jìn)制數(shù)用四位二進(jìn)制數(shù)表示,就可將十六進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)。例5將(101011.01101)2轉(zhuǎn)換為十六進(jìn)制數(shù)。例6將(123.45)16轉(zhuǎn)換成二進(jìn)制數(shù)。123.45000100100011.01000101即(123.45)16=(100100011.01000101)2
例7將(110101.011)2轉(zhuǎn)換為十六進(jìn)制數(shù)。00110101.011035.6即(110101.011)2=(35.6)16
計(jì)算機(jī)與二進(jìn)制數(shù)
在計(jì)算機(jī)中只能使用二進(jìn)制數(shù)。指令、數(shù)據(jù)、字符和地址的表示以及它們的存儲(chǔ)、處理和傳送,都是以二進(jìn)制的形式進(jìn)行。沒(méi)有二進(jìn)制也就沒(méi)有電子計(jì)算機(jī)。因?yàn)椋海?)二進(jìn)制數(shù)在物理上最容易實(shí)現(xiàn)。例如,可以只用高、低兩個(gè)電平表示"1"和"0",也可以用脈沖的有無(wú)或者脈沖的正負(fù)極性表示它們。(2)二進(jìn)制數(shù)用來(lái)表示的二進(jìn)制數(shù)的編碼、計(jì)數(shù)、加減運(yùn)算規(guī)則簡(jiǎn)單。(3)二進(jìn)制數(shù)的兩個(gè)符號(hào)"1"和"0"正好與邏輯命題的"真"和"假"相對(duì)應(yīng),為計(jì)算機(jī)實(shí)現(xiàn)邏輯運(yùn)算和程序中的邏輯判斷提供了便利的條件。硬盤(pán)中的數(shù)據(jù)示意黑客帝國(guó)片段1.位(Bit)指二進(jìn)制的位。2.字節(jié)(Byte)8位二進(jìn)制數(shù)稱為一個(gè)字節(jié)。3.字(Word)字是一臺(tái)計(jì)算機(jī)上所能并行處理的二進(jìn)制數(shù),字的位數(shù)稱為字長(zhǎng)。字長(zhǎng)是字節(jié)的整數(shù)倍。如:STM32單片機(jī)字長(zhǎng)為32位。計(jì)算機(jī)中二進(jìn)制數(shù)的單位定義變量:int
num;//定義了一個(gè)整型變量,名字為numint
a,b,c;//同時(shí)定義了多個(gè)整型變量,名字分別是a、b和c變量賦值1.先定義再賦值,如:int
num;num=100;2.定義的同時(shí)賦值,如:int
num=100;變量及賦值1.2C語(yǔ)言基礎(chǔ)實(shí)際上編譯器的工作分為兩個(gè)步驟,先是預(yù)處理(Preprocess),然后才是編譯。宏定義屬于預(yù)處理步驟,簡(jiǎn)單的說(shuō),預(yù)處理會(huì)根據(jù)宏定義進(jìn)行替換。比如:#defineN20inta[N];相當(dāng)于int
a[20];宏定義計(jì)算機(jī)中所有的指令、符號(hào)都是二進(jìn)制數(shù)。為了表示字符等符號(hào),需要將符號(hào)進(jìn)行編碼,這樣計(jì)算機(jī)才能進(jìn)行存儲(chǔ)和處理。ASCII碼是“美國(guó)信息交換標(biāo)準(zhǔn)代碼”的簡(jiǎn)稱。
ASCII碼數(shù)據(jù)類(lèi)型(1) 基本類(lèi)型基本類(lèi)型主要包括字符型、整型和浮點(diǎn)型。字符型包括char和unsginedchar型,它們都是占一個(gè)字節(jié)空間。無(wú)符號(hào)字符類(lèi)型unsignedchar的數(shù)值范圍是0~255,有符號(hào)字符類(lèi)型signedchar,也簡(jiǎn)稱為char,它的數(shù)值范圍是-128~+127。整型數(shù)據(jù)是指不帶小數(shù)的數(shù)值。(1) 基本類(lèi)型浮點(diǎn)型數(shù)據(jù)是指帶小數(shù)的數(shù)值。整型數(shù)據(jù)是指不帶小數(shù)的數(shù)值。(2)構(gòu)造類(lèi)型為了滿足需要定義多種類(lèi)型變量的需求,C語(yǔ)言設(shè)置了struct關(guān)鍵字,它擁有自定義類(lèi)型的能力。比如可以采用兩個(gè)double型組成的結(jié)構(gòu)體變量:struct
complex_struct{doublex,y;};結(jié)構(gòu)體變量的初始化以及成員的訪問(wèn)用點(diǎn)運(yùn)算符來(lái)訪問(wèn),比如:
complex_struct.x
=
1.0;
complex_struct.y
=
2.0;
(2)構(gòu)造類(lèi)型除了上面定義結(jié)構(gòu)體類(lèi)似使用的方法,C語(yǔ)言還提供了一種采用關(guān)鍵字“typedef”定義結(jié)構(gòu)體的方法。舉例來(lái)說(shuō):1. typedefstruct2. {3. doublex,y;4. }complex_def;5. 6. complex_defcomplex_struct;(3)指針類(lèi)型指針變量可以被賦予不同的指針值,可以通過(guò)指針變量改變指向(即保存了誰(shuí)的地址)和間接操作。比如:1.int
i;
3.charc;2.int*pi=&i; 4.char*pc=&c;*就表示是指針變量,而&是取地址運(yùn)算符,&i表示取變量i的地址。int
*pi=&i;表示定義指針變量pi,并用i的地址來(lái)初始化pi,也就是pi指向了i。如果我們要獲取指針變量所指向的值,則要再次利用*號(hào),比如:1.*pi=*pi+10;基本運(yùn)算運(yùn)算符主要包括:(1)算術(shù)運(yùn)算符,(2)賦值運(yùn)算符,(3)關(guān)系運(yùn)算符,(4)邏輯運(yùn)算符等。&&表示邏輯與,即為and。當(dāng)運(yùn)算符兩邊的表達(dá)式的結(jié)果都為true時(shí),整個(gè)運(yùn)算結(jié)果才為true,否則,只要有一方為false,則結(jié)果為false。
(0表示false/假,非零的表示True/真)。比如
:12&&23的結(jié)果是1(true)12&&-1
的結(jié)果是1(true)123&&0的結(jié)果是0(false)||
表示邏輯或,即為“or”。
當(dāng)兩個(gè)條件中有任一個(gè)條件滿足,||
的運(yùn)算結(jié)果就為“真”。比如
:12||1
=1(true)12||0
=1(true)0||0
=0(false)邏輯運(yùn)算、按位邏輯運(yùn)算&表示按位與。每一位進(jìn)行與操作,符合1&1=1,1&0=0,0&0=0
。例如,15&127=15因?yàn)?27=
(01111111)2,15=
(00001111)2。(0111
1111)2&(0000
1111)2=(00001111)2=15|表示按位或。每一位進(jìn)行或操作,符合1|1=1,1|0=1,0|0=0
。例如,128|127=255.128=(10000000)2127=(01111111)2(高位用0補(bǔ)齊)
所以128|127=(11111111)2=255邏輯運(yùn)算、按位邏輯運(yùn)算^
表示按位異或。當(dāng)對(duì)應(yīng)位不同的為真,相同為假。符合1^1=0,1^0=1,0^0=0。例如:5^7=0101^0111=0010~表示按位取反。按對(duì)應(yīng)的二進(jìn)制數(shù)逐位進(jìn)行取反。符合~1=0,~0=1。邏輯運(yùn)算、按位邏輯運(yùn)算分支和循環(huán)語(yǔ)句(1) if語(yǔ)句if(表達(dá)式1){執(zhí)行代碼塊1;}……elseif(表達(dá)式m){執(zhí)行代碼塊m;}……else{執(zhí)行代碼塊n;}分支和循環(huán)語(yǔ)句(1) while循環(huán)while(表達(dá)式){語(yǔ)句;}do{語(yǔ)句;}while(表達(dá)式);(2) do-while循環(huán)for(表達(dá)式1;表達(dá)式2;表達(dá)式3){
語(yǔ)句;}(3)
for循環(huán)例:for(i=1;i<=n;++i)result=result*i;函數(shù)在C語(yǔ)言中使用使用數(shù)學(xué)函數(shù):#include<math.h>#include<stdio.h>intmain(void){ doublepi=3.1416;
printf("sin(pi/2)=%f\n",sin(pi/2)); return0;}函數(shù):可以把一個(gè)規(guī)模較大的問(wèn)題分解成若干個(gè)較小的組件,這些小組件可以被重復(fù)使用。使用只要給sin函數(shù)輸入相應(yīng)的參數(shù),就可以得到正確的結(jié)果,而不用管具體如何實(shí)現(xiàn)的。使用時(shí)只需在開(kāi)頭包含響應(yīng)頭文件:“#include<math.h>”。編寫(xiě)和使用函數(shù)定義一個(gè)函數(shù)square,用來(lái)計(jì)算任意整數(shù)的平方。然后,使用該函數(shù)計(jì)算從1到10所有整數(shù)的平方。#include<stdio.h>intsquare(int);voidmain(){intx;for(x=1;x<=10;x++)printf("%d",square(x));}intsquare(inty){returny*y;}聲明函數(shù)使用函數(shù)(調(diào)用函數(shù))定義函數(shù)1491625364964811001.硬件實(shí)驗(yàn)平臺(tái)2.教程配套資料3.KeilMDK及安裝4.編譯及燒錄程序第二章
開(kāi)發(fā)環(huán)境1.硬件實(shí)驗(yàn)平臺(tái)介紹硬件實(shí)驗(yàn)平臺(tái)包括STM32開(kāi)發(fā)板、J-Link仿真器、電源適配器、USB轉(zhuǎn)232模塊,直流有刷電機(jī)。STM32開(kāi)發(fā)板J-Link開(kāi)發(fā)者在PC電腦上完成程序編寫(xiě)、編譯后,將得到單片機(jī)可以運(yùn)行的二進(jìn)制文件,并通過(guò)J-Link燒錄到單片機(jī)上才能最終運(yùn)行。J-Link驅(qū)動(dòng)安裝J-Link驅(qū)動(dòng)位于配套資料包中:“4.軟件包”文件夾中的“Setup_JLinkARM_V412.exe”文件,點(diǎn)擊安裝。USB轉(zhuǎn)232模塊USB轉(zhuǎn)232模塊——負(fù)責(zé)電腦與單片機(jī)開(kāi)發(fā)板之間的通信USB轉(zhuǎn)232模塊驅(qū)動(dòng)安裝USB轉(zhuǎn)232模塊驅(qū)動(dòng)位于配套資料包中:“4.軟件包”“USB轉(zhuǎn)串口驅(qū)動(dòng)(64位).exe”或“USB轉(zhuǎn)串口驅(qū)動(dòng)(32位).exe”,2.教程配套資料2.1 文檔資料STM32單片機(jī)學(xué)習(xí)中最為重要的資料:《STM32固件庫(kù)使用手冊(cè)(中文翻譯版)》,詳細(xì)介紹了官方定義STM32的標(biāo)準(zhǔn)庫(kù)函數(shù)STM32中文參考手冊(cè):詳細(xì)解釋了STM32單片機(jī)存儲(chǔ)器和外設(shè)等各部分的詳細(xì)信息《芯片數(shù)據(jù)手冊(cè)》,英文Datasheet:包含STM32單片機(jī)技術(shù)特征的基本描述,包含產(chǎn)品的基本配置(如內(nèi)置Flash和RAM的容量、外設(shè)的數(shù)量等),管腳的數(shù)量和分配,電氣特性,封裝信息等。2.1.1 STM32F103標(biāo)準(zhǔn)函數(shù)庫(kù)手冊(cè)開(kāi)發(fā)STM32單片機(jī)程序常見(jiàn)方法:直接操作寄存器的方法標(biāo)準(zhǔn)庫(kù)函數(shù)方法HAL庫(kù)函數(shù)方法實(shí)際:所有的單片機(jī)控制都可以通過(guò)直接操作寄存器的方法來(lái)實(shí)現(xiàn)!問(wèn)題:寄存器復(fù)雜:數(shù)量眾多,難以記憶(STM32具有數(shù)百個(gè)寄存器);不同單片機(jī)的寄存器名稱、結(jié)構(gòu)并不相同。開(kāi)發(fā)的程序包含大量的寄存器名稱英文縮寫(xiě),可讀性差。標(biāo)準(zhǔn)庫(kù)函數(shù)方法:標(biāo)準(zhǔn)庫(kù)函數(shù)方法:將這些寄存器底層操作都封裝起來(lái),提供一整套標(biāo)準(zhǔn)庫(kù)函數(shù)供開(kāi)發(fā)者調(diào)用??刂埔粋€(gè)單片機(jī)引腳輸出低電平
1.voidGPIO_ResetBits(GPIOTypeDef*GPIOx,uint16_tGPIO_Pin)2.{ 3.GPIOx->BRR=GPIO_Pin;4.}只需要調(diào)用GPIO_ResetBits()函數(shù)就可以控制一個(gè)單片機(jī)引腳輸出低電平標(biāo)準(zhǔn)庫(kù)函數(shù)舉例標(biāo)準(zhǔn)函數(shù)庫(kù)手冊(cè)中關(guān)于ADC_DeInit的介紹HAL庫(kù)函數(shù)方法:意法半導(dǎo)體新推出的開(kāi)發(fā)方法,專用開(kāi)發(fā)軟件生成程序優(yōu)點(diǎn):簡(jiǎn)單、方便缺點(diǎn):通用性很差,不能用于除STM32之外單片機(jī)。2.1.2 STM32中文參考手冊(cè)需要時(shí)再查找STM32中文參考手冊(cè)目錄2.2 開(kāi)發(fā)板電路原理圖看不懂???讀懂電路圖必備知識(shí)——網(wǎng)絡(luò)標(biāo)號(hào)電路圖中兩點(diǎn)具有相同網(wǎng)絡(luò)標(biāo)號(hào),就表示:這兩點(diǎn)在實(shí)際電路中是由導(dǎo)線連接在一起的,即使原理圖中沒(méi)有導(dǎo)線示意。通過(guò)網(wǎng)絡(luò)標(biāo)號(hào)這種方式,可以省略很多導(dǎo)線,從而使電路圖看起來(lái)不會(huì)過(guò)于凌亂。但初學(xué)者由于不明白此概念而導(dǎo)致困惑。讀懂電路圖必備知識(shí)——網(wǎng)絡(luò)標(biāo)號(hào)讀懂電路圖必備知識(shí)——數(shù)據(jù)手冊(cè)12V轉(zhuǎn)5V電路不是我們看不懂電路圖中的模塊、芯片,而是因?yàn)槲覀儾涣私膺@些模塊、芯片,所以看不懂電路圖。讀懂電路圖必備知識(shí)——數(shù)據(jù)手冊(cè)LM2596數(shù)據(jù)手冊(cè)讀懂電路圖必備知識(shí)——對(duì)應(yīng)實(shí)物電路圖與實(shí)物電路中的電機(jī)接口M23KeilMDK及安裝Keil5的安裝Keil5安裝文件位于配套資料包中:“4.工具軟件包”中的“mdk514.exe”,Keil5的破解Keil5破解方法:“4.工具軟件包”中的“如何破解Keil.docx”Keil5破解文件:“4.工具軟件包”中的keygen_new(2032).rar破解時(shí)需以管理員身份運(yùn)行Keil54如何編譯及燒錄程序?qū)纹瑱C(jī)開(kāi)發(fā)板與J-Link的連接4.2 配置J-Link4.3 編譯程序?qū)W習(xí)單片機(jī)就是學(xué)習(xí)外設(shè)的使用!第三章 通用輸入及輸出(GPIO)1.GPIO簡(jiǎn)介2.GPIO輸出實(shí)驗(yàn)3.GPIO輸入實(shí)驗(yàn)第三章 通用輸入及輸出(GPIO)1.GPIO簡(jiǎn)介通用輸入輸出——GPIO(General-purposeinput/output)輸出:控制引腳輸出高電平還是低電平,代表邏輯1和邏輯0輸入:檢測(cè)引腳的電平是低還是高STM32F103RCT6單片機(jī)STM32F103RCT6單片機(jī)通過(guò)分組命名進(jìn)行區(qū)分,從A到G分組:每組0至15共16個(gè)引腳,即PA0-PA15、PB0-PB15……1) 輸入浮空(GPIO_Mode_IN_FLOATING):該模式下輸入電平必須有外部電路確定,根據(jù)具體電路,需加外部上拉電阻或下拉電阻2) 輸入上拉(GPIO_Mode_IPU):打開(kāi)IO內(nèi)部的上拉電阻3) 輸入下拉(GPIO_Mode_IPD):打開(kāi)IO內(nèi)部的下拉電阻4) 模擬輸入(GPIO_Mode_AIN):輸入傳統(tǒng)的模擬量信號(hào)5) 開(kāi)漏輸出(GPIO_Mode_Out_OD):輸出端相當(dāng)于三極管的集電極.要得到高電平狀態(tài)需要上拉電阻才行.適合于做電流型的驅(qū)動(dòng),其吸收電流的能力相對(duì)強(qiáng)(一般20mA以內(nèi))。6) 推挽輸出(GPIO_Mode_Out_PP):可以提高輸出功率,能更好驅(qū)動(dòng)外部的設(shè)備,該模式下輸出電阻小,帶負(fù)載能力強(qiáng)7) 復(fù)用推挽輸出(GPIO_Mode_AF_OD)8) 復(fù)用開(kāi)漏輸出(GPIO_Mode_AF_PP)GPIO八種模式不用記!2.GPIO輸出實(shí)驗(yàn)演示。。。實(shí)驗(yàn)原理電路原理圖軟件原理#include
"stm32f10x.h"http://標(biāo)準(zhǔn)外設(shè)庫(kù)頭文件
int
main(void)
{
/*********************
LED配置開(kāi)始*******************************/
//配置GPIO
GPIO_InitTypeDef
GPIO_Initstructure;
//定義GPIO結(jié)構(gòu)體
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
//使能GPIOC時(shí)鐘
GPIO_Initstructure.GPIO_Mode
=
GPIO_Mode_Out_PP;
//配置為輸出模式
GPIO_Initstructure.GPIO_Pin
=
GPIO_Pin_11;
//燈LED2對(duì)應(yīng)引腳為PC11
GPIO_Initstructure.GPIO_Speed
=
GPIO_Speed_50MHz;
//GPIO速度50MHz
GPIO_Init(GPIOC,&GPIO_Initstructure);//用GPIO_InITstructure結(jié)構(gòu)體參數(shù),初始化GPIO
/**********************LED配置結(jié)束******************************/
while
(1)//死循環(huán),讓程序持續(xù)運(yùn)行
{
GPIO_SetBits(GPIOC,GPIO_Pin_11);
}
}軟件原理定義變量GPIO_Initstructure,類(lèi)型為GPIO_InitTypeDef軟件原理STM32單片機(jī)的外設(shè)默認(rèn)關(guān)閉以降低功耗本實(shí)驗(yàn)中使用了組別C的GPIO引腳PC11,所以要通過(guò)開(kāi)啟GPIOC的時(shí)鐘來(lái)激活C組GPIO如何使能D組GPIO?TIM2呢?軟件原理成員變量1:GPIO_Mode定義工作在推挽輸出模式成員變量2:GPIO_Pin定義引腳號(hào),本實(shí)驗(yàn)中使用的是PC11,屬于組別C的GPIO第11號(hào)引腳成員變量3:GPIO_Speed,它配置的是GPIO引腳電平最快的切換速度,一般可以配置為50MHz、20MHz等。軟件原理第9-11行程序雖然對(duì)GPIO_Initstructure成員變量進(jìn)行了賦值,但其實(shí)并沒(méi)有正在發(fā)揮作用。函數(shù)GPIO_Init負(fù)責(zé)初始化GPIO相關(guān)的寄存器。第一個(gè)參數(shù)GPIOC,確定了第二個(gè)參數(shù)是對(duì)C組GPIO相應(yīng)寄存器進(jìn)行設(shè)置。第二個(gè)參數(shù)“&GPIO_Initstructure”前面的“&”表示取結(jié)構(gòu)體變量GPIO_Initstructure的地址。指針指針復(fù)習(xí)指針變量可以被賦予不同的指針值,可以通過(guò)指針變量改變指向(即保存了誰(shuí)的地址)和間接操作。比如:1.int
i;
3.charc;2.int*pi=&i; 4.char*pc=&c;*就表示是指針變量,而&是取地址運(yùn)算符,&i表示取變量i的地址。int
*pi=&i;表示定義指針變量pi,并用i的地址來(lái)初始化pi,也就是pi指向了i。軟件原理第9-11行程序雖然對(duì)GPIO_Initstructure成員變量進(jìn)行了賦值,但其實(shí)并沒(méi)有正在發(fā)揮作用。函數(shù)GPIO_Init負(fù)責(zé)初始化GPIO相關(guān)的寄存器。第一個(gè)參數(shù)GPIOC,確定了第二個(gè)參數(shù)是對(duì)C組GPIO相應(yīng)寄存器進(jìn)行設(shè)置。第二個(gè)參數(shù)“&GPIO_Initstructure”前面的“&”表示取結(jié)構(gòu)體變量GPIO_Initstructure的地址。配置程序小結(jié)#include
"stm32f10x.h"http://標(biāo)準(zhǔn)外設(shè)庫(kù)頭文件
int
main(void)
{
/*********************
LED配置開(kāi)始*******************************/
//配置GPIO
GPIO_InitTypeDef
GPIO_Initstructure;
//定義GPIO結(jié)構(gòu)體
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
//使能GPIOC時(shí)鐘
GPIO_Initstructure.GPIO_Mode
=
GPIO_Mode_Out_PP;
//配置為輸出模式
GPIO_Initstructure.GPIO_Pin
=
GPIO_Pin_11;
//燈LED2對(duì)應(yīng)引腳為PC11
GPIO_Initstructure.GPIO_Speed
=
GPIO_Speed_50MHz;
//GPIO速度50MHz
GPIO_Init(GPIOC,&GPIO_Initstructure);//用GPIO_InITstructure結(jié)構(gòu)體參數(shù),初始化GPIO
上述配置部分程序:開(kāi)啟C組GPIO時(shí)鐘,使能GPIOC;并將C組第11號(hào)GPIO引腳指定為GPIO_Mode_Out_PP工作方式,速度為GPIO_Speed_50MHz??刂撇糠周浖韜hile(1)無(wú)限循環(huán)避免單片機(jī)程序跑飛GPIO_SetBits(GPIOC,GPIO_Pin_11)使對(duì)應(yīng)端口輸出高電平輸出低電平:GPIO_ResetBits函數(shù)軟件原理#include
"stm32f10x.h"http://標(biāo)準(zhǔn)外設(shè)庫(kù)頭文件
int
main(void)
{
/*********************
LED配置開(kāi)始*******************************/
//配置GPIO
GPIO_InitTypeDef
GPIO_Initstructure;
//定義GPIO結(jié)構(gòu)體
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
//使能GPIOC時(shí)鐘
GPIO_Initstructure.GPIO_Mode
=
GPIO_Mode_Out_PP;
//配置為輸出模式
GPIO_Initstructure.GPIO_Pin
=
GPIO_Pin_11;
//燈LED2對(duì)應(yīng)引腳為PC11
GPIO_Initstructure.GPIO_Speed
=
GPIO_Speed_50MHz;
//GPIO速度50MHz
GPIO_Init(GPIOC,&GPIO_Initstructure);//用GPIO_InITstructure結(jié)構(gòu)體參數(shù),初始化GPIO
/**********************LED配置結(jié)束******************************/
while
(1)//死循環(huán),讓程序持續(xù)運(yùn)行
{
GPIO_SetBits(GPIOC,GPIO_Pin_11);
}
}程序考核任務(wù)提示:使GPIO輸出低電平的庫(kù)函數(shù)為GPIO_ResetBits在理解開(kāi)發(fā)板原理圖基礎(chǔ)上,修改程序點(diǎn)亮燈LED4(更進(jìn)一步:流水燈)3.GPIO輸入實(shí)驗(yàn)演示輸出:控制引腳輸出高電平還是低電平,代表邏輯1和邏輯0輸入:檢測(cè)引腳的電平是低還是高按下USER1按鍵時(shí),開(kāi)發(fā)板上LED2點(diǎn)亮了再次按下USER2按鍵后,LED2又熄滅實(shí)驗(yàn)原理電路原理圖當(dāng)按鍵沒(méi)被按下時(shí),PC12引腳電平為高電平(3.3V)當(dāng)按鍵按下后,PC12引腳電平為低電平(0V)軟件原理#include
"stm32f10x.h"http://標(biāo)準(zhǔn)外設(shè)庫(kù)頭文件
int
main(void)
{
GPIO_InitTypeDef
GPIO_InitStructure;
//定義GPIO結(jié)構(gòu)體
/*********************
LED2配置*******************************/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Mode
=
GPIO_Mode_Out_PP;
//配置為輸出模式
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed
=
GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
//調(diào)用庫(kù)函數(shù)GPIO_Init()初始化GPIO
/**********************按鍵USER1配置******************************/
GPIO_InitStructure.GPIO_Mode
=
GPIO_Mode_IPU;//配置為上拉輸入
GPIO_InitStructure.GPIO_Pin
=
GPIO_Pin_12;
GPIO_Init(GPIOC,
&GPIO_InitStructure);
/**********************按鍵USER2配置******************************/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,
ENABLE);
GPIO_InitStructure.GPIO_Mode
=
GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin
=
GPIO_Pin_9;
GPIO_Init(GPIOB,
&GPIO_InitStructure);
while(1)
{
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_12)==0)//如果USER1按下,即判斷PC12輸入電平是否為低電平
{
GPIO_SetBits(GPIOC,GPIO_Pin_11);//PC11輸出高電平,點(diǎn)亮LED2
}
else
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==0)//如果USER2按下,即判斷PB11輸入電平是否為低電平
{
GPIO_ResetBits(GPIOC,GPIO_Pin_11);
//PC11輸出低電平,熄滅LED2
}
}
軟件原理將PC12和PB9引腳配置為上拉輸入模式因?yàn)镃組GPIO時(shí)鐘已經(jīng)在第7行使能了,這里無(wú)需再次配置。配置部分包含GPIO輸出部分和輸入部分。輸出部分在上一節(jié)已經(jīng)介紹過(guò),不再贅述。輸入部分是兩個(gè)按鍵(“USER1”和“USER2”按鍵)對(duì)應(yīng)引腳的配置:(1)使能相應(yīng)時(shí)鐘(2)配置模式??刂撇糠衷黻P(guān)注點(diǎn):GPIO_ReadInputDataBitGPIO_ReadInputDataBitGPIO_ReadInputDataBit:讀取引腳的輸入電平輸入引腳為高電平:函數(shù)將返回1,輸入引腳為低電平:則返回0。
程序考核任務(wù)修改程序,用按鍵USER3點(diǎn)亮LED燈LED3,按鍵USER4熄滅LED3。(更進(jìn)一步:用按鍵控制流水燈流動(dòng)方向)本章實(shí)驗(yàn)步驟及現(xiàn)象上一章已經(jīng)學(xué)過(guò)?按下USER1按鍵時(shí),開(kāi)發(fā)板上LED2點(diǎn)亮了再次按下USER2按鍵后,LED2又熄滅硬件原理電路原理圖當(dāng)按鍵沒(méi)被按下時(shí),PC12引腳電平為高電平(3.3V)當(dāng)按鍵按下后,PC12引腳電平為低電平(0V)#include
"stm32f10x.h"http://標(biāo)準(zhǔn)外設(shè)庫(kù)頭文件
int
main(void)
{
GPIO_InitTypeDef
GPIO_InitStructure;
//定義GPIO結(jié)構(gòu)體
/*********************
LED2配置*******************************/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Mode
=
GPIO_Mode_Out_PP;
//配置為輸出模式
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed
=
GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
//調(diào)用庫(kù)函數(shù)GPIO_Init()初始化GPIO
/**********************按鍵USER1配置******************************/
GPIO_InitStructure.GPIO_Mode
=
GPIO_Mode_IPU;//配置為上拉輸入
GPIO_InitStructure.GPIO_Pin
=
GPIO_Pin_12;
GPIO_Init(GPIOC,
&GPIO_InitStructure);
/**********************按鍵USER2配置******************************/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,
ENABLE);
GPIO_InitStructure.GPIO_Mode
=
GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin
=
GPIO_Pin_9;
GPIO_Init(GPIOB,
&GPIO_InitStructure);
while(1)
{
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_12)==0)//如果USER1按下,即判斷PC12輸入電平是否為低電平
{
GPIO_SetBits(GPIOC,GPIO_Pin_11);//PC11輸出高電平,點(diǎn)亮LED2
}
else
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==0)//如果USER2按下,即判斷PB11輸入電平是否為低電平
{
GPIO_ResetBits(GPIOC,GPIO_Pin_11);
//PC11輸出低電平,熄滅LED2
}
}
上一章實(shí)驗(yàn)復(fù)習(xí)在main函數(shù)中加入一個(gè)死循環(huán),不停檢測(cè)USER1按鍵狀態(tài),再根據(jù)這個(gè)狀態(tài)切換LED2的亮滅。這種方法稱之為“查詢”方式。這一章學(xué)習(xí)更高效的方法:中斷法1.中斷基礎(chǔ)知識(shí)2.實(shí)驗(yàn)步驟及現(xiàn)象3.實(shí)驗(yàn)原理第四章 中斷中斷:指當(dāng)出現(xiàn)需要時(shí),CPU暫時(shí)停止當(dāng)前程序的執(zhí)行轉(zhuǎn)而執(zhí)行處理新情況的程序和執(zhí)行過(guò)程。1.中斷基礎(chǔ)知識(shí)正常函數(shù)調(diào)用流程voidFun1(){ ……}voidFun2(){ ……}voidFun3(){ ……}voidmain(){ Fun1(); Fun2();}“Fun3”雖然定義了,但是并不會(huì)起任何作用中斷響應(yīng)流程注意:中斷函數(shù)不需要?jiǎng)e的程序主動(dòng)調(diào)用,滿足一定條件時(shí)自動(dòng)執(zhí)行中斷產(chǎn)生時(shí)間不確定,不像普通函數(shù)調(diào)用那樣發(fā)生在預(yù)定的時(shí)間。中斷:當(dāng)出現(xiàn)合適條件時(shí),CPU暫時(shí)停止當(dāng)前程序的執(zhí)行轉(zhuǎn)而執(zhí)行處理新情況的程序和執(zhí)行過(guò)程。使用中斷的條件:允許的中斷通道有中斷發(fā)生定義好的中斷服務(wù)函數(shù)一旦滿足,自動(dòng)執(zhí)行STM32中斷系統(tǒng)STM32單片機(jī)支持84個(gè)中斷通道,包括16個(gè)內(nèi)核中斷和68個(gè)可屏蔽中斷通道那么多中斷,誰(shuí)先誰(shuí)后?日常生活中,我們會(huì)不停的接收到各種中斷信號(hào),比如前面提到的燒水壺水燒開(kāi)的信號(hào)、手機(jī)鬧鈴、火災(zāi)警報(bào)等等不同信號(hào)優(yōu)先級(jí)是不同的NVIC嵌套向量中斷控制器管理中斷通道的模塊——嵌套向量中斷控制器NVICNVIC作用:控制中斷的搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)搶占優(yōu)先級(jí):一個(gè)低搶占優(yōu)先級(jí)的中斷程序,暫停來(lái)響應(yīng)這個(gè)新的高搶占式優(yōu)先級(jí)的中斷,即所謂的中斷嵌套。比如上課可能會(huì)被電話中斷,但接電話過(guò)程中突發(fā)火災(zāi)會(huì)停止電話,而抓緊逃生。搶先優(yōu)先級(jí)響應(yīng)優(yōu)先級(jí):也叫“亞優(yōu)先級(jí)”或“副優(yōu)先級(jí)”響應(yīng)優(yōu)先級(jí)高的中斷不會(huì)打斷正在執(zhí)行的響應(yīng)優(yōu)先級(jí)低的中斷,只是優(yōu)先響應(yīng)前者。比如開(kāi)會(huì)發(fā)言,下屬已經(jīng)開(kāi)始發(fā)言,出于尊重,領(lǐng)導(dǎo)聽(tīng)完下屬發(fā)言后再發(fā)言。例如,當(dāng)搶占優(yōu)先級(jí)相同、響應(yīng)優(yōu)先級(jí)不同的兩個(gè)中斷同時(shí)到達(dá)時(shí),則優(yōu)先處理響應(yīng)優(yōu)先級(jí)高的中斷,處理完之后,再處理響應(yīng)優(yōu)先級(jí)低的。搶占優(yōu)先級(jí)要高于響應(yīng)優(yōu)先級(jí),故響應(yīng)優(yōu)先級(jí)也稱之為“副優(yōu)先級(jí)”。響應(yīng)優(yōu)先級(jí)優(yōu)先級(jí)舉例中斷搶占優(yōu)先級(jí)響應(yīng)優(yōu)先級(jí)A00B10C11假設(shè)有三個(gè)中斷A、B、C,它們各自的優(yōu)先級(jí)如下(編號(hào)越小,優(yōu)先級(jí)越高):若正在執(zhí)行C的中斷服務(wù)函數(shù),則它能被搶占優(yōu)先級(jí)更高的A打斷,由于B和C的搶占優(yōu)先級(jí)相同,所以C不能被B打斷。如果B和C的中斷是同時(shí)到達(dá)的,則會(huì)優(yōu)先響應(yīng)B的中斷服務(wù)函數(shù)。NVIC優(yōu)先級(jí)分組STM32中可以有5種配置方式來(lái)確定不同中斷的優(yōu)先級(jí),即STM32單片機(jī)可以分為0-4種優(yōu)先級(jí)分組優(yōu)先級(jí)分組搶占優(yōu)先級(jí)響應(yīng)優(yōu)先級(jí)NVIC_PriorityGroup_00級(jí)搶占優(yōu)先級(jí)0-15級(jí)響應(yīng)優(yōu)先級(jí)NVIC_PriorityGroup_10-1級(jí)搶占優(yōu)先級(jí)0-7級(jí)響應(yīng)優(yōu)先級(jí)NVIC_PriorityGroup_20-3級(jí)搶占優(yōu)先級(jí)0-3級(jí)響應(yīng)優(yōu)先級(jí)NVIC_PriorityGroup_30-7級(jí)搶占優(yōu)先級(jí)0-1級(jí)響應(yīng)優(yōu)先級(jí)NVIC_PriorityGroup_40-15級(jí)搶占優(yōu)先級(jí)0級(jí)響應(yīng)優(yōu)先級(jí)2.實(shí)驗(yàn)步驟及現(xiàn)象按下USER1按鍵時(shí),開(kāi)發(fā)板上LED2點(diǎn)亮了再次按下USER2按鍵后,LED2又熄滅硬件原理STM32單片機(jī)支持19個(gè)外部中斷/事件請(qǐng)求(稱之為“中斷線”)但STM32單片機(jī)所有引腳(超過(guò)19個(gè)),都可以作為外部中斷解決辦法:多個(gè)引腳共用一個(gè)中斷線STM32F103支持的19個(gè)中斷線包括:中斷線0~15:對(duì)應(yīng)外部IO的輸入中斷中斷線16:連接到PVD輸出中斷線17:連接到RTC鬧鐘事件中斷線18:連接到USB喚醒事件中斷線19:連接到以太網(wǎng)喚醒事件硬件原理只有15個(gè)中斷線,如何應(yīng)對(duì)所有GPIO引腳?每個(gè)中斷線對(duì)應(yīng)著7個(gè)GPIO端口所有GPIO組別的第0號(hào)引腳都可以觸發(fā)外部中斷線EXTI0通過(guò)配置來(lái)決定那個(gè)GPIO組別硬件原理使用中斷兩個(gè)基本條件:?jiǎn)纹瑱C(jī)允許的中斷通道有中斷發(fā)生有定義好的中斷服務(wù)函數(shù)外部中斷線中斷通道中斷服務(wù)函數(shù)名稱中斷線0EXTI0EXTI0_IRQHandler中斷線1EXTI1EXTI1_IRQHandler中斷線2EXTI2EXTI2_IRQHandler中斷線3EXTI3EXTI3_IRQHandler中斷線4EXTI4EXTI4_IRQHandler中斷線5-9EXTI9_5EXTI9_5_IRQHandler中斷線10-15EXTI15_10EXTI15_10_IRQHandler中斷通道和中斷服務(wù)函數(shù)按鍵“USER1”使用引腳PC12,其對(duì)應(yīng)的中斷服務(wù)函數(shù)是哪個(gè)?軟件原理配置部分定義三個(gè)結(jié)構(gòu)體,GPIO_InitTypeDef已講過(guò),用于GPIO配置的另外兩個(gè)結(jié)構(gòu)體將在后續(xù)中斷配置中使用到,稍后進(jìn)行具體講解軟件原理配置部分9-24行對(duì)引腳PC11、PC12的配置第19行中邏輯“或”操作,其含義是同時(shí)開(kāi)啟C組GPIO時(shí)鐘和AFIO復(fù)用時(shí)鐘因?yàn)镻C12引腳這里除了IO功能,它還作為外部中斷使用,所以需要開(kāi)啟AFIO復(fù)用時(shí)鐘。軟件原理配置部分定義中斷線映射,將中斷線12的中斷源選擇為C組GPIO端口,即PC12GPIO與外部中斷線映射關(guān)系軟件原理配置部分EXTI_Line:中斷線號(hào),使用PC12,設(shè)為EXTI_Line12EXTI_Mode:EXTI_Mode_Interrupt或EXTI_Mode_Event,作為外部中斷設(shè)為EXTI_Mode_InterruptEXTI_Trigger:觸發(fā)模式,EXTI_Trigger_Falling或EXTI_Trigger_Rising;按鍵沒(méi)有摁下時(shí)PC12電平為高電平,摁下是電平變?yōu)榈碗娖?,選擇下降沿觸發(fā)EXTI_Trigger_Falling。EXTI_LineCmd:是否激活使能,ENABLE(使能)或DISABLE(失能)。軟件原理NVIC配置中斷優(yōu)先級(jí)優(yōu)先級(jí)分組搶占優(yōu)先級(jí)響應(yīng)優(yōu)先級(jí)NVIC_PriorityGroup_00級(jí)搶占優(yōu)先級(jí)0-15級(jí)響應(yīng)優(yōu)先級(jí)NVIC_PriorityGroup_10-1級(jí)搶占優(yōu)先級(jí)0-7級(jí)響應(yīng)優(yōu)先級(jí)NVIC_PriorityGroup_20-3級(jí)搶占優(yōu)先級(jí)0-3級(jí)響應(yīng)優(yōu)先級(jí)NVIC_PriorityGroup_30-7級(jí)搶占優(yōu)先級(jí)0-1級(jí)響應(yīng)優(yōu)先級(jí)NVIC_PriorityGroup_40-15級(jí)搶占優(yōu)先級(jí)0級(jí)響應(yīng)優(yōu)先級(jí)軟件原理NVIC配置中斷優(yōu)先級(jí)在設(shè)定了NVIC分組基礎(chǔ)上,37-41行先填充了結(jié)構(gòu)體NVIC_Initstructure的參數(shù),再在42行通過(guò)NVIC_Init將該結(jié)構(gòu)體的參數(shù)配置到單片機(jī)寄存器,從而真正生效NVIC_InitstructureNVIC_Initstructure成員變量NVIC_IRQChannel:配置中斷通道;PC12根據(jù)前面表格,使用的中斷通道應(yīng)為EXTI15_10。部分NVIC_IRQChannel可選值NVIC_Initstructure成員變量NVIC_IRQChannelPreemptionPriority:搶占優(yōu)先級(jí)成員變量NVIC_IRQChannelSubPriority:響應(yīng)優(yōu)先級(jí)NVIC_PriorityGroup_4分組:搶占優(yōu)先級(jí)可以為0-15,響應(yīng)優(yōu)先級(jí)只能為0。都為設(shè)0表示目前使用的中斷為最高優(yōu)先級(jí)。本實(shí)驗(yàn)只使用了一個(gè)中斷,即使將優(yōu)先級(jí)定為更低的優(yōu)先級(jí)也不影響使用。但是如果比較復(fù)雜的單片機(jī)應(yīng)用中有多個(gè)中斷,開(kāi)發(fā)者必須仔細(xì)安排好不同中斷的優(yōu)先級(jí)。小結(jié)PC12的中斷模式設(shè)置為下降沿觸發(fā),使引腳PC12作為外部中斷程序選擇了NVIC分組,將PC12對(duì)應(yīng)的外部中斷配置好了優(yōu)先級(jí),并使能了該中斷配置完成后,一旦PC12由高電平轉(zhuǎn)換為低電平,CPU將自動(dòng)執(zhí)行對(duì)應(yīng)的中斷服務(wù)函數(shù)死循環(huán)與上一章GPIO實(shí)驗(yàn)不同,此循環(huán)中沒(méi)有任何程序語(yǔ)句。CPU單純等待中斷發(fā)生,一旦相應(yīng)外部中斷產(chǎn)生即開(kāi)始自動(dòng)調(diào)用中斷服務(wù)函數(shù)。復(fù)雜些的工程中,可以在死循環(huán)中執(zhí)行其他程序,而不用不停查詢按鍵狀態(tài)。中斷服務(wù)函數(shù)經(jīng)過(guò)相應(yīng)配置,按下“USER1”按鍵時(shí),系統(tǒng)即進(jìn)入EXTI15_10_IRQHandler中斷服務(wù)函數(shù)。中斷服務(wù)函數(shù)中斷服務(wù)函數(shù)EXTI15_10_IRQHandler是中斷線10至中斷線15共同的中斷服務(wù)函數(shù),使用EXTI_GetITStatus函數(shù)判斷是否中斷線12(PC12)發(fā)生了中斷。函數(shù)返回值為SET表示相應(yīng)中斷線發(fā)生中斷,否則返回值為RESET。第50行等同于:“if(EXTI_GetITStatus(EXTI_Line12)==SET)”中斷服務(wù)函數(shù)實(shí)現(xiàn)通過(guò)按鍵切換LED的效果:第一次摁下“USER1”鍵時(shí),LED2被點(diǎn)亮;再次摁下“USER1”鍵,LED2被熄滅flagLed:用于記錄LED燈狀態(tài)的全局變量中斷服務(wù)函數(shù)使用EXTI_ClearITPendingBit清除外部中斷線12的中斷標(biāo)志位:避免CPU誤認(rèn)為中斷線1再次發(fā)生了中斷程序考核任務(wù)修改程序:使用外部中斷方式,實(shí)現(xiàn)用按鍵USER2完成LED燈LED4狀態(tài)的切換:第一次按下點(diǎn)亮LED4,再次按下熄滅LED4,以此類(lèi)推……USART簡(jiǎn)介串口發(fā)送實(shí)驗(yàn)串口接收實(shí)驗(yàn)第五章同異步串行收發(fā)器(USART)計(jì)算機(jī)如何Say“Hi”?收到下列信息代表什么含義?計(jì)算機(jī)如何Say“Hi”?如果事先約定好,把3.3V看成邏輯1,0V看成邏輯0,每1秒傳輸一位,信息以一個(gè)字節(jié)(8位)為單位傳輸:電壓變化為二進(jìn)制的“01001000”,對(duì)應(yīng)十六進(jìn)制0x48,對(duì)應(yīng)十進(jìn)制72。ASCII碼,大寫(xiě)字母“H”的ASCII碼是72。當(dāng)再接收到代表“i”的二進(jìn)制“01011001”時(shí),就接收到信息“Hi”了。通過(guò)上述簡(jiǎn)化例子,可知:在通信之前通行雙方應(yīng)該約定一定的規(guī)則(通信協(xié)議)
以字節(jié)為單位傳輸,每秒傳輸一個(gè)邏輯位……每秒傳輸多少個(gè)邏輯位也稱之為波特率,表示串行數(shù)據(jù)的傳輸速率。1.USART簡(jiǎn)介同/異步串行收/發(fā)器(USART),簡(jiǎn)稱串口:實(shí)現(xiàn)通信功能的外設(shè),具有同步和異步模式。異步傳輸:主機(jī)只管發(fā)送數(shù)據(jù),從機(jī)不一定在主機(jī)發(fā)送數(shù)據(jù)的同時(shí)接收數(shù)據(jù),收發(fā)不一定同步。主要使用方式。
郵遞員向郵箱投遞了一封信,或許你三天后才打開(kāi)拿出來(lái)。同步傳輸就是指收發(fā)數(shù)據(jù)是同步進(jìn)行的。USART使用注意事項(xiàng)使用簡(jiǎn)單:用戶只需要將信息以字節(jié)為單位輸入U(xiǎn)SART即可完成發(fā)送,接收時(shí)對(duì)于用戶來(lái)說(shuō)也是收到完整的一個(gè)個(gè)字節(jié)。不需要分析電平變化。只需要關(guān)注接收(RX)、發(fā)送(TX)和地(GND):發(fā)送對(duì)接收,接收對(duì)發(fā)送,即可實(shí)現(xiàn)相互通信。2.串口發(fā)送實(shí)驗(yàn)2.串口發(fā)送實(shí)驗(yàn)實(shí)驗(yàn)原理兩種232連接座以及引腳編號(hào):公頭(左)和母座(右)實(shí)際工程中常會(huì)根據(jù)一些通信標(biāo)準(zhǔn)將STM32串口的電壓進(jìn)行轉(zhuǎn)換后再通信,從而達(dá)到延長(zhǎng)通信距離、增強(qiáng)抗干擾性等目的。這里我們要介紹一種常見(jiàn)的串口通信標(biāo)準(zhǔn)——RS232,除此之外,工業(yè)中常用的串口通信標(biāo)準(zhǔn)還有RS485、RS422等。實(shí)驗(yàn)原理兩種232連接座以及引腳編號(hào):公頭(左)和母座(右)引腳編號(hào)引腳定義說(shuō)明1DCD載波檢測(cè)2RXD接收數(shù)據(jù)3TXD發(fā)送數(shù)據(jù)4DTR數(shù)據(jù)終端準(zhǔn)備好5GND信號(hào)地6DSR數(shù)據(jù)準(zhǔn)備好7RTS請(qǐng)求發(fā)送8CTS清除發(fā)送9RI振鈴提示實(shí)驗(yàn)原理RS232能夠延長(zhǎng)通信距離、增強(qiáng)抗干擾性,因?yàn)?,RS232增強(qiáng)了傳輸信號(hào)的電壓。單片機(jī)輸出的通信電平稱之為“TTL電平”,轉(zhuǎn)換之后稱之為“232電平”。TTL電平:3.3V表示高電平(邏輯1),0V表示低電平(邏輯0)。232電平則規(guī)定邏輯1為-3V~-15V,邏輯0為+3~+15V,-3V~+3V之間的電壓則為非法狀態(tài)。實(shí)驗(yàn)原理電平狀態(tài)電壓0+3~+15V1-15~-3V非法狀態(tài)-3~+3V232電平232發(fā)送信號(hào)過(guò)程——(1)單片機(jī)的串口(USART)會(huì)將要發(fā)送的一個(gè)字節(jié)(共8位,D0-D7表示)處理成串行一位一位的TTL電平信號(hào)(2)該信號(hào)通過(guò)收發(fā)器(MAX232等芯片)再轉(zhuǎn)換為232電平信號(hào),最終傳輸至接收設(shè)備。STM32單片機(jī)接收信號(hào)的流程則剛好反過(guò)來(lái)。實(shí)驗(yàn)原理0x4801001000單片機(jī)的USART相關(guān)引腳實(shí)驗(yàn)原理芯片數(shù)據(jù)手冊(cè)中PA9和PA10引腳說(shuō)明實(shí)驗(yàn)原理串口電平轉(zhuǎn)換電路實(shí)驗(yàn)原理軟件原理定義了一個(gè)USART_InitTypeDef類(lèi)型結(jié)構(gòu)體,用于后續(xù)的串口配置開(kāi)啟了GPIOA、復(fù)用時(shí)鐘AFIO和串口USART1的時(shí)鐘,參數(shù)中“|”表示按位運(yùn)算的或邏輯運(yùn)算,意思是這幾個(gè)時(shí)鐘同時(shí)被激活使能PA9和PA10作為串口1的收發(fā)引腳,因此激活GPIOA的時(shí)鐘這兩個(gè)引腳這里不是作為GPIO(通用輸入輸出),而是作為串口的相關(guān)引腳,因此還使能了復(fù)用時(shí)鐘AFIO軟件原理將相應(yīng)串口的設(shè)置恢復(fù)為默認(rèn)值,即串口復(fù)位PA9用作發(fā)送引腳,配置為復(fù)用推挽輸出模式;PA10用作接收引腳,配置為浮空輸入模式軟件原理成員變量1:USART_BaudRate是串口波特率,表示了串行數(shù)據(jù)的傳輸速率。通信雙方波特率應(yīng)該一致,否則通信將失敗。成員變量2:USART_HardwareFlowControl,硬件流控制是專門(mén)用于連續(xù)數(shù)據(jù)流速率的控制,防止收發(fā)緩存溢出的一種手段,一般都選擇選擇無(wú)硬件流控制,即USART_HardwareFlowControl_None軟件原理成員變量3:USART_Mode串口模式選擇,串口可以選擇配置為發(fā)送模式(USART_Mode_Tx)或接收模式(USART_Mode_Rx),第31行設(shè)既可以接收又可以發(fā)送。軟件原理成員變量4,5,6:USART_Parity、USART_StopBits、USART_WordLength分別為奇偶校驗(yàn)位,停止位,字長(zhǎng)。兩個(gè)串口設(shè)備相互通信時(shí)奇偶校驗(yàn)、停止位和字長(zhǎng)都應(yīng)該一致,否則通信將失敗。第32-34行將這幾個(gè)變量設(shè)置為最常見(jiàn)的無(wú)奇偶校驗(yàn)位、一位停止位和8位字長(zhǎng)。第35行將填充完員變量的結(jié)構(gòu)體USART_Initstructure的成結(jié)構(gòu)體成員變量設(shè)置到相應(yīng)寄存器,真正發(fā)揮作用。軟件原理USART_Cmd函數(shù)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)安平水準(zhǔn)儀行業(yè)市場(chǎng)前景預(yù)測(cè)及投資價(jià)值評(píng)估分析報(bào)告
- 用電權(quán)過(guò)戶協(xié)議書(shū)
- 拖生活垃圾協(xié)議書(shū)
- 快遞柜物業(yè)協(xié)議書(shū)
- 點(diǎn)樣寫(xiě)合伙協(xié)議書(shū)
- 美術(shù)興趣班入學(xué)協(xié)議書(shū)
- 暑假工安全協(xié)議書(shū)
- 桉樹(shù)林轉(zhuǎn)讓協(xié)議書(shū)
- 投資賠償款協(xié)議書(shū)
- 因出軌分居協(xié)議書(shū)
- 2025眼鏡行業(yè)市場(chǎng)分析報(bào)告
- 2022-2023學(xué)年廣東省廣州市天河區(qū)七年級(jí)(下)期末數(shù)學(xué)試卷(含答案)
- 2025-2031年中國(guó)雞爪市場(chǎng)競(jìng)爭(zhēng)態(tài)勢(shì)及投資戰(zhàn)略規(guī)劃研究報(bào)告
- 湖北省武漢市常青聯(lián)合體2024-2025學(xué)年高一下學(xué)期期中考試歷史試題(原卷版+解析版)
- 銀屑病診斷與治療
- 2025-2030硅膠行業(yè)市場(chǎng)發(fā)展分析及趨勢(shì)前景與投資戰(zhàn)略研究報(bào)告
- 壓力管道質(zhì)量保證手冊(cè)
- 銀行大堂經(jīng)理崗位培訓(xùn)
- (四調(diào))武漢市2025屆高中畢業(yè)生四月調(diào)研考試 數(shù)學(xué)試卷(含答案詳解)
- 重慶二手房買(mǎi)賣(mài)合同范本
- 專題04說(shuō)明文(二)重難點(diǎn)題型-給材料放位置段落互換(原卷版+解析)
評(píng)論
0/150
提交評(píng)論