




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
STM32F4初探
第1講STM32初探第2講STM32芯片解讀第4講GPIO工作原理-跑馬燈實(shí)驗(yàn)第5講按鍵輸入實(shí)驗(yàn)-GPIO做輸入第6講串口通信第7講外部中斷實(shí)驗(yàn)第8講看門狗實(shí)驗(yàn)-IWDG第9講通用定時(shí)器基本原理及定時(shí)器中斷第10講定時(shí)器PWM輸出-TIMER第11講輸入捕捉實(shí)驗(yàn)-TIMER第12講RTC實(shí)時(shí)時(shí)鐘+備份區(qū)域BKP原理講解第13講ADC實(shí)驗(yàn)第14講DMA第16講DHT11溫濕度傳感器實(shí)驗(yàn)第17講總結(jié)全套可編輯PPT課件目錄
2
M4特點(diǎn):內(nèi)核,低功耗,外設(shè)1STM32芯片家族2
總結(jié)3163新的基于ARM內(nèi)核的32位MCU系列內(nèi)核為ARM公司為要求高性能、低成本、低功耗的嵌入式應(yīng)用專門設(shè)計(jì)的Cortex-M內(nèi)核標(biāo)準(zhǔn)的ARM架構(gòu)超前的體系結(jié)構(gòu)高性能低電壓低功耗創(chuàng)新的內(nèi)核以及外設(shè)簡單易用/自由/低風(fēng)險(xiǎn)1.1什么是STM32
Cortex-M4采用ARMv7-ME架構(gòu)
ARMv7架構(gòu)定義了三大分工明確的系列:
“A”系列:面向尖端的基于虛擬內(nèi)存的操作系統(tǒng)和用戶應(yīng)用
“R”系列:針對實(shí)時(shí)系統(tǒng);
“M”系列:對微控制器。Cortex-M3采用ARMv7-M架構(gòu),Cortex-M0采用ARMv6-M架構(gòu),Cortex-A5/A8采用ARMv7-A架構(gòu),
傳統(tǒng)的ARM7系列采用的是ARMv4T架構(gòu)。1.2Cortex內(nèi)核
1.2Cortex內(nèi)核
有人問:STM32和ARM有什么區(qū)別?1.2Cortex-M4內(nèi)核
1.2Cortex-M4內(nèi)核
先進(jìn)的內(nèi)核1.3Cortex-M內(nèi)核對比
1.3M3VSM4
1.3M3VSM4
1.3M3VSM4
1.3M3VSM4
1.4Cortex-M4內(nèi)核
更低的功耗1.4Cortex-M4低功耗設(shè)計(jì)
1.4Cortex-M4低功耗設(shè)計(jì)
1.4Cortex-M4低功耗設(shè)計(jì)
1.5Cortex-M4內(nèi)核
更高級(jí)的外設(shè)1.5Cortex-M4更高級(jí)的外設(shè)
1.5Cortex-M4更高級(jí)的外設(shè)
1.5Cortex-M4更高級(jí)的外設(shè)
1.5Cortex-M4更高級(jí)的外設(shè)
1.5Cortex-M4更高級(jí)的外設(shè)
1.5Cortex-M4更高級(jí)的外設(shè)
1.5Cortex-M4內(nèi)核
STM32家族1.3Cortex-M家族
1.3Cortex-M家族
2.3STM32F4各芯片關(guān)聯(lián)STM32概念標(biāo)準(zhǔn)的ARMTMCortex-M4內(nèi)核高性能外設(shè)提供兩個(gè)完整的產(chǎn)品系列開發(fā)工具以及軟件支持-強(qiáng)大的固件庫支持各系列產(chǎn)品全面兼容FamilyToolsPeriphsCore優(yōu)點(diǎn)可升級(jí)的體系結(jié)構(gòu)適用你所有的應(yīng)用給用戶相同的“外觀和感受”
統(tǒng)一的軟件和開發(fā)投入2.4STM32命名規(guī)則
3.總結(jié)
3.總結(jié)總結(jié)
STM32最具競爭力的優(yōu)勢:1)極高的性能:主流的Cortex內(nèi)核。2)豐富合理的外設(shè),合理的功耗,合理的價(jià)格。3)強(qiáng)大的軟件支持:豐富的軟件包。4)全面豐富的技術(shù)文檔。5)芯片型號(hào)種類多,覆蓋面廣。6)強(qiáng)大的用戶基礎(chǔ):最先成功試水CM4芯片的公司,積累
了大批的用戶群體,為其領(lǐng)先做鋪墊。STM32芯片解讀
參考資料:
STM32F4數(shù)據(jù)手冊:STM32F407ZGT6.pdf
STM32F4中文手冊:STM32F4xx中文參考手冊.pdf
開發(fā)板原理圖:ExplorerSTM32F4_Vxx_SCH.pdf目錄芯片有哪些資源?1芯片內(nèi)部結(jié)構(gòu)怎樣?2芯片引腳和功能怎么對應(yīng)?3
STM32F4最小系統(tǒng)設(shè)計(jì)4目錄
33
1.芯片有哪些資源?1.1芯片內(nèi)部資源
STM32F407ZGT6STM32F407ZGT6資源描述參考資料
《STM32選型手冊》對應(yīng)芯片的數(shù)據(jù)手冊-只有英文的
內(nèi)核:-32位高性能ARMCortex-M4處理器-時(shí)鐘:高達(dá)168M,實(shí)際還可以超屏一點(diǎn)點(diǎn)-支持FPU(浮點(diǎn)運(yùn)算)和DSP指令STM32F407ZGT6資源描述STM32F407ZGT6資源描述
IO口:STM32F407ZGT6:144引腳114個(gè)IO-大部分IO口都耐5V(模擬通道除外)-支持調(diào)試:SWD和JTAG,SWD只要2根數(shù)據(jù)線存儲(chǔ)器容量:1024KFLASH,192KSRAM
1.1芯片內(nèi)部資源
時(shí)鐘,復(fù)位和電源管理:
1.8~3.6V電源和IO電壓
上電復(fù)位,掉電復(fù)位和可編程的電壓監(jiān)控
強(qiáng)大的時(shí)鐘系統(tǒng)-4~26M的外部高速晶振-內(nèi)部16MHz的高速RC振蕩器-內(nèi)部32KHz低速RC振蕩器,看門狗時(shí)鐘-內(nèi)部鎖相環(huán)(PLL,倍頻),一般系統(tǒng)時(shí)鐘都是外部
或者內(nèi)部高速時(shí)鐘經(jīng)過PLL倍頻后得到-外部低速32.768K的晶振,主要做RTC時(shí)鐘源STM32F407ZGT6資源描述
低功耗:-睡眠,停止和待機(jī)三種低功耗模式-可用電池為RTC和備份寄存器供電AD:-3個(gè)12位AD【多達(dá)24個(gè)外部測量通道】-內(nèi)部通道可以用于內(nèi)部溫度測量-內(nèi)置參考電壓
STM32F407ZGT6資源描述
DA:2個(gè)12位DADMA:16個(gè)DMA通道
,帶FIFO和突發(fā)支持
支持外設(shè):定時(shí)器,ADC,DAC,SDIO,I2S,SPI,I2C,和USART
STM32F407ZGT6資源描述
定時(shí)器:多達(dá)17個(gè)定時(shí)器-10個(gè)通用定時(shí)器(TIM2和TIM5是32位)-2個(gè)基本定時(shí)器-2個(gè)高級(jí)定時(shí)器-1個(gè)系統(tǒng)定時(shí)器-2個(gè)看門狗定時(shí)器STM32F407ZGT6資源描述
通信接口:多達(dá)17個(gè)通信接口-3個(gè)I2C接口-6個(gè)串口-3個(gè)SPI接口-2個(gè)CAN2.0-2個(gè)USBOTG-1個(gè)SDIO目錄
43
2.芯片內(nèi)部結(jié)構(gòu)怎樣?2.1芯片內(nèi)部結(jié)構(gòu)圖
數(shù)據(jù)手冊:P172.1芯片內(nèi)部結(jié)構(gòu)圖
2.1芯片內(nèi)部結(jié)構(gòu)圖
3.芯片引腳和功能怎么對應(yīng)?3.1芯片內(nèi)部結(jié)構(gòu)圖
3.1芯片內(nèi)部結(jié)構(gòu)圖
怎么查看數(shù)據(jù)手冊引腳功能表3.1芯片內(nèi)部結(jié)構(gòu)圖
STM32最小系統(tǒng)-看原理圖
供電
復(fù)位
時(shí)鐘:外部晶振(2個(gè))Boot啟動(dòng)模式選擇下載電路(串口/JTAG/SWD)后備電池3.1芯片內(nèi)部結(jié)構(gòu)圖
直接對照原理圖講解最小系統(tǒng)圖GPIO基本原理與寄存器配置
目錄GPIO基本結(jié)構(gòu)和工作方式1GPIO寄存器說明2STM32F40xGPIO引腳說明3
跑馬燈實(shí)驗(yàn)4GPIO基本結(jié)構(gòu)
參考資料:探索者STM32F4開發(fā)板:
《STM32F4開發(fā)指南-寄存器版本》-第六章跑馬燈實(shí)驗(yàn)6.1小節(jié)STM32F4xx官方資料:《STM32F4xx中文參考手冊》-第7章通用IO
芯片數(shù)據(jù)手冊1.3STM32引腳說明
STM32F407ZGT6-一共有7組IO口,外加2個(gè)PH0和PH1-一共16X7+2=114個(gè)IOGPIOA0~A15GPIOB0~B15GPIOC0~C15GPIOD0~D15GPIOE0~E15GPIOF0~F15GPIOG0~G15GPIOH0~H1GPIO基本結(jié)構(gòu)
STM32的大部分引腳除了當(dāng)GPIO使用外,還可以復(fù)用為外設(shè)功能引腳(比如串口),這部分知識(shí)我們會(huì)在后面講解。本講主要講解引腳做IO使用方面的知識(shí)。
1.1GPIO基本結(jié)構(gòu)
(FT)
1.1GPIO工作方式
4種輸入模式:輸入浮空輸入上拉輸入下拉模擬輸入4種輸出模式:開漏輸出開漏復(fù)用功能推挽式輸出推挽式復(fù)用功能
8種工作模式的區(qū)別:STM32八種IO口模式區(qū)別.pdf(1)GPIO_Mode_AIN模擬輸入(2)GPIO_Mode_IN_FLOATING浮空輸入(3)GPIO_Mode_IPD下拉輸入(4)GPIO_Mode_IPU上拉輸入(5)GPIO_Mode_Out_OD開漏輸出(6)GPIO_Mode_Out_PP推挽輸出(7)GPIO_Mode_AF_OD復(fù)用開漏輸出(8)GPIO_Mode_AF_PP復(fù)用推挽輸出
1.1GPIO工作方式
4種最大翻轉(zhuǎn)速度:
-2MHZ-10MHz-50MHz-100MHzGPIO的輸入工作模式1—輸入浮空模式1.1GPIO工作方式
GPIO的輸入工作模式2—輸入上拉模式1.1GPIO工作方式
GPIO的輸入工作模式3—輸入下拉模式1.1GPIO工作方式
GPIO的輸入工作模式4—模擬模式1.1GPIO工作方式
GPIO的輸出工作模式1—開漏輸出模式1.1GPIO工作方式
GPIO的輸出工作模式2—開漏復(fù)用輸出模式1.1GPIO工作方式
GPIO的輸出工作模式3—推挽輸出模式1.1GPIO工作方式
GPIO的輸出工作模式4—推挽復(fù)用輸出模式1.1GPIO工作方式
上電復(fù)位后,GPIO默認(rèn)為浮空狀態(tài),部分特殊功能引腳為特定狀態(tài)。1.1GPIO工作方式
1.1GPIO工作方式
推挽輸出:可以輸出強(qiáng)高低電平,連接數(shù)字器件
開漏輸出:只可以輸出強(qiáng)低電平,高電平得靠外部電阻拉高。輸出端相當(dāng)于三極管的集電極.要得到高電平狀態(tài)需要上拉電阻才行.適合于做電流型的驅(qū)動(dòng),其吸收電流的能力相對強(qiáng)(一般20ma以內(nèi))參考帖子:/posts/list/21980.htm1.2GPIO相關(guān)配置寄存器
每組GPIO端口的寄存器包括:兩個(gè)32位配置寄存器(GPIOx_CRL,GPIOx_CRH),兩個(gè)32位數(shù)據(jù)寄存器(GPIOx_IDR和GPIOx_ODR),一個(gè)32位置位/復(fù)位寄存器(GPIOx_BSRR),一個(gè)16位復(fù)位寄存器(GPIOx_BRR),一個(gè)32位鎖定寄存器(GPIOx_LCKR)。每個(gè)I/O端口位可以自由編程,然而I/O端口寄存器必須按32位字被訪問(不允許半字或字節(jié)訪問)。1.2GPIO相關(guān)配置寄存器
每組GPIO端口的寄存器包括:一個(gè)端口模式寄存器(GPIOx_MODER)一個(gè)端口輸出類型寄存器(GPIOx_OTYPER)一個(gè)端口輸出速度寄存器(GPIOx_OSPEEDR)一個(gè)端口上拉下拉寄存器(GPIOx_PUPDR)一個(gè)端口輸入數(shù)據(jù)寄存器(GPIOx_IDR)一個(gè)端口輸出數(shù)據(jù)寄存器(GPIOx_ODR)一個(gè)端口置位/復(fù)位寄存器(GPIOx_BSRR)一個(gè)端口配置鎖存寄存器(GPIOx_LCKR)兩個(gè)復(fù)位功能寄存器(低位GPIOx_AFRL&GPIOx_AFRH)4個(gè)32位配置寄存器2個(gè)32位數(shù)據(jù)寄存器如果配置一個(gè)IO口需要2個(gè)位,那么剛好32位寄存器配置一組IO口16個(gè)IO口如果配置一個(gè)IO口只需要1個(gè)位,一般高16位保留BSRR寄存器32位分為低16位BSRRL和高16位BSRRH,BSRRL配置一組IO口的16個(gè)IO口的置位狀態(tài)(1),BSRRH配置復(fù)位狀態(tài)(0)。1.2GPIO相關(guān)配置寄存器
一個(gè)端口模式寄存器(GPIOx_MODER)一個(gè)端口輸出類型寄存器(GPIOx_OTYPER)一個(gè)端口輸出速度寄存器(GPIOx_OSPEEDR)一個(gè)端口上拉下拉寄存器(GPIOx_PUPDR)一個(gè)端口輸入數(shù)據(jù)寄存器(GPIOx_IDR)一個(gè)端口輸出數(shù)據(jù)寄存器(GPIOx_ODR)一個(gè)端口置位/復(fù)位寄存器(GPIOx_BSRR)一個(gè)端口配置鎖存寄存器(GPIOx_LCKR)兩個(gè)復(fù)位功能寄存器(低位GPIOx_AFRL&GPIOx_AFRH)是每組IO口含下面10個(gè)寄存器。也就是10個(gè)寄存器,一共可以控制一組GPIO的16個(gè)IO口。1.2GPIO相關(guān)配置寄存器
1.2.1端口模式寄存器(GPIOx_MODER)
GPIOportmoderegister1.2GPIO相關(guān)配置寄存器
1.2.2端口輸出類型寄存器(GPIOx_OTYPER)
GPIOportoutputtyperegister1.2GPIO相關(guān)配置寄存器
1.2.3端口輸出速度寄存器(GPIOx_OSPEEDR)
GPIOportoutputspeedregister1.2GPIO相關(guān)配置寄存器
1.2.4端口上拉/下拉寄存器(GPIOx_PUPDR)
GPIOportpull-up/pull-downregiste1.2GPIO相關(guān)配置寄存器
1.2.5端口輸入數(shù)據(jù)寄存器(GPIOx_IDR)
GPIOportinputdataregister1.2GPIO相關(guān)配置寄存器
1.2.6端口輸出數(shù)據(jù)寄存器(GPIOx_ODR)
GPIOportOutputdataregister1.2GPIO相關(guān)配置寄存器
1.2.7端口置位/復(fù)位寄存器(GPIOx_BSRR)
GPIOportbitset/resetregister1.3STM32引腳說明
端口復(fù)用功能STM32的大部分端口都具有復(fù)用功能。
所謂復(fù)用,就是一些端口不僅僅可以做為通用IO口,還可以復(fù)用為一
些外設(shè)引腳,比如PA9,PA10可以復(fù)用為STM32的串口1引腳。
作用:最大限度的利用端口資源1.3STM32引腳說明
端口重映射功能
就是可以把某些功能引腳映射到其他引腳。
比如串口1默認(rèn)引腳是PA9,PA10可以通過配置重映射映
射到PB6,PB7
作用:方便布線1.3STM32引腳說明
所有IO口都可以作為中斷輸入
這在我們外部中斷實(shí)驗(yàn)我們會(huì)詳細(xì)講解。
硬件連接
跑馬燈硬件連接:
GPIO輸出方式:
推挽輸出(上拉)3.手把手寫跑馬燈
手把手寫跑馬燈實(shí)驗(yàn)-寄存器。
使能IO口時(shí)鐘。配置相關(guān)寄存器寄存器RCC->AHB1ENR
初始化IO口模式。配置四個(gè)配置寄存器
GPIOx_MODER/GPIOx_OTYPER/GPIOx_OSPEEDR/GPIOx_PUPDR
操作IO口,輸出高低電平。配置寄存器GPIOX_ODR或者BSRRL/BSRRH。intmain(void){ Stm32_Clock_Init(336,8,2,7); //時(shí)鐘初始化 delay_init(168); //延時(shí)初始化 LED_Init(); //端口初始化
while(1) { LED0=0; LED1=1; delay_ms(300); LED0=1; LED1=0; delay_ms(300); } }1.4跑馬燈實(shí)驗(yàn)主函數(shù)#include"sys.h"#include"delay.h" #include"led.h"#include"sys.h"#include"led.h“voidLED_Init(void){ RCC->AHB1ENR|=1<<5;//使能PORTF時(shí)鐘
GPIO_Set(GPIOF,PIN9|PIN10,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//PF9,PF10設(shè)置
LED0=1;//LED0關(guān)閉LED1=1;//LED1關(guān)閉}GPIO_Set函數(shù)參見《STM32F4開發(fā)指南(寄存器版)》85頁Led.cAHB1ENR是AHB1總線上的外設(shè)時(shí)鐘使能寄存器(RCC_APB1ENR)#ifndef__LED_H#define__LED_H #include"sys.h"#defineLED0PFout(9)//DS0#defineLED1PFout(10)//DS1 voidLED_Init(void); //初始化
#endifLed.h按鍵實(shí)驗(yàn)
按鍵實(shí)驗(yàn)硬件連接1GPIO輸入操作說明2按鍵實(shí)驗(yàn)準(zhǔn)備知識(shí)3
按鍵實(shí)驗(yàn)4位帶操作51.按鍵實(shí)驗(yàn)硬件連接
STM32F4開發(fā)板上載有的4個(gè)按鈕(WK_UP、KEY0、KEY1和KEY2),來控制板上的2個(gè)LED(DS0和DS1)KEY0->PE4上拉輸入KEY1->PE3上拉輸入KEY2->PE2上拉輸入WK_UP->PA0下拉輸入2.GPIO輸入操作說明
讀取IO口輸入電平操作寄存器為:GPIOx_IDR:端口輸入寄存器使用位帶操作讀取IO口輸入電平:
PEin(4)-讀取GPIOE.4口電平PEin(n)-讀取GPIOE.n口電平
3.按鍵輸入實(shí)驗(yàn)準(zhǔn)備知識(shí)
按鍵輸入編寫思路
使能按鍵對應(yīng)IO口時(shí)鐘。
RCC->AHB1ENR;
初始化IO模式:上拉/下拉輸入。
掃描IO口電平。KEY2控制DS0,按一次亮,再按一次滅;KEY1控制DS1,效果同KEY2;WK_UP則同時(shí)控制DS0和DS1,按一次,他們的狀態(tài)就翻轉(zhuǎn)一次。實(shí)現(xiàn)的功能3.按鍵輸入實(shí)驗(yàn)準(zhǔn)備知識(shí)
按鍵掃描思路3.按鍵輸入實(shí)驗(yàn)準(zhǔn)備知識(shí)
C語言關(guān)鍵字:staticStatic申明的局部變量,存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū)。它在函數(shù)調(diào)用結(jié)束之后,不會(huì)被釋放。它的值會(huì)一直保留下來。所以可以說static申明的局部變量,具有記憶功能。3.按鍵輸入實(shí)驗(yàn)準(zhǔn)備知識(shí)
每次調(diào)用getValue函數(shù)之后,返回值是多少?int
getValue(void){
static
intflag=0;flag++;returnflag;}intgetValue(void){intflag=0;flag++;returnflag;}3.按鍵輸入實(shí)驗(yàn)準(zhǔn)備知識(shí)
按鍵掃描(支持連續(xù)按)的一般思路u8KEY_Scan(void){if(KEY按下){delay_ms(10);//延時(shí)10-20ms,防抖。if(KEY確實(shí)按下){returnKEY_Value;}return無效值;}}如果我要實(shí)現(xiàn):按鍵按下,沒有松開,只能算按下一次,這個(gè)函數(shù)無法實(shí)現(xiàn)。3.按鍵輸入實(shí)驗(yàn)準(zhǔn)備知識(shí)
按鍵掃描(不支持連續(xù)按)的一般思路u8KEY_Scan(void){staticu8key_up=1;if(key_up&&
KEY按下){
delay_ms(10);//延時(shí),防抖
key_up=0;//標(biāo)記這次key已經(jīng)按下if(KEY確實(shí)按下){returnKEY_VALUE;}}elseif(KEY沒有按下)key_up=1;
return沒有按下}不支持連續(xù)按:就是說,按鍵按下了,沒有松開,只能算一次。3.按鍵輸入實(shí)驗(yàn)準(zhǔn)備知識(shí)
按鍵掃描(兩種模式合二為一)的一般思路u8KEY_Scan(u8mode){staticu8key_up=1;
if(mode==1)key_up=1;//支持連續(xù)按if(key_up&&
KEY按下){
delay_ms(10);//延時(shí),防抖
key_up=0;//標(biāo)記這次key已經(jīng)按下if(KEY確實(shí)按下){returnKEY_VALUE;}}elseif(KEY沒有按下)key_up=1;
return沒有按下}3.按鍵輸入實(shí)驗(yàn)準(zhǔn)備知識(shí)
voidKEY_Init(void){RCC->AHB1ENR|=1<<0;//使能PORTA時(shí)鐘RCC->AHB1ENR|=1<<4;//使能PORTE時(shí)鐘GPIO_Set(GPIOE,PIN2|PIN3|PIN4,GPIO_MODE_IN,0,0,GPIO_PUPD_PU);//PE2~4設(shè)置上拉輸入GPIO_Set(GPIOA,PIN0,GPIO_MODE_IN,0,0,GPIO_PUPD_PD);//PA0設(shè)置為下拉輸入}4.按鍵輸入實(shí)驗(yàn)按鍵初始化u8KEY_Scan(u8mode){staticu8key_up=1;//按鍵按松開標(biāo)志if(mode)key_up=1;//支持連按if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1)){delay_ms(10);//去抖動(dòng)key_up=0;if(KEY0==0)return1;elseif(KEY1==0)return2;elseif(KEY2==0)return3;elseif(WK_UP==1)return4;}elseif(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1;return0;//無按鍵按下}4.按鍵輸入實(shí)驗(yàn)按鍵掃描#ifndef__KEY_H#define__KEY_H#include"sys.h"#defineKEY0PEin(4)//PE4#defineKEY1PEin(3)//PE3#defineKEY2PEin(2)//P32#defineWK_UPPAin(0)//PA0#defineKEY0_PRES1//KEY0按下#defineKEY1_PRES2//KEY1按下#defineKEY2_PRES3//KEY2按下#defineWKUP_PRES4//KEY_UP按下(即WK_UP)voidKEY_Init(void);//IO初始化u8KEY_Scan(u8);//按鍵掃描函數(shù)#endif4.按鍵輸入實(shí)驗(yàn)Key.hwhile(1){key=KEY_Scan(0);//得到鍵值if(key){switch(key){caseWKUP_PRES://控制蜂鳴器LED0=!LED0;LED1=!LED1;break;caseKEY2_PRES://控制LED0翻轉(zhuǎn)LED0=!LED0;break;caseKEY1_PRES://控制LED1翻轉(zhuǎn)LED1=!LED1;break;}}elsedelay_ms(10);}4.按鍵輸入實(shí)驗(yàn)主函數(shù)5.位帶操作位操作原理:
把每個(gè)比特膨脹為一個(gè)32位的字,當(dāng)訪問這些字的時(shí)候就達(dá)到了訪問
比特的目的,比如說BSRR寄存器有32個(gè)位,那么可以映射到32個(gè)地址
上,我們?nèi)ピL問(讀-改-寫)這32個(gè)地址就達(dá)到訪問32個(gè)比特的目的。5.位帶操作哪些區(qū)域支持位操作:其中一個(gè)是SRAM區(qū)的最低1MB范圍,0x20000000‐0x200FFFFF(SRAM區(qū)中的最低1MB)第二個(gè)則是片內(nèi)外設(shè)區(qū)的最低1MB范圍,
0x40000000‐0x400FFFFF(片上外設(shè)區(qū)中最低1MB)5.位帶操作5.位帶操作5.位帶操作位帶操作優(yōu)越性位帶操作詳見:Cortex-M3權(quán)威指南(中文).pdf目錄
串行通信接口背景知識(shí)1STM32F1串口框圖講解2STM32串口常用寄存器3
串口配置方法4
串口通信實(shí)驗(yàn)講解51.通信接口背景知識(shí)
處理器與外部設(shè)備通信的兩種方式:并行通信-傳輸原理:數(shù)據(jù)各個(gè)位同時(shí)傳輸。-優(yōu)點(diǎn):速度快-缺點(diǎn):占用引腳資源多串行通信-傳輸原理:數(shù)據(jù)按位順序傳輸。-優(yōu)點(diǎn):占用引腳資源少-缺點(diǎn):速度相對較慢1.通信接口背景知識(shí)
串行通信:按照數(shù)據(jù)傳送方向,分為:單工:
數(shù)據(jù)傳輸只支持?jǐn)?shù)據(jù)在一個(gè)方向上傳輸半雙工:
允許數(shù)據(jù)在兩個(gè)方向上傳輸,但是,在某一時(shí)刻,只允許數(shù)
據(jù)在一個(gè)方向上傳輸,它實(shí)際上是一種切換方向的單工通信;全雙工:允許數(shù)據(jù)同時(shí)在兩個(gè)方向上傳輸,因此,全雙工通信是兩個(gè)
單工通信方式的結(jié)合,它要求發(fā)送設(shè)備和接收設(shè)備都有獨(dú)立
的接收和發(fā)送能力。1.通信接口背景知識(shí)
串行通信三種傳送方式:1.通信接口背景知識(shí)
串行通信的通信方式同步通信:帶時(shí)鐘同步信號(hào)傳輸。-SPI,IIC通信接口異步通信:不帶時(shí)鐘同步信號(hào)。-UART(通用異步收發(fā)器),單總線1.通信接口背景知識(shí)
常見的串行通信接口:通信標(biāo)準(zhǔn)引腳說明通信方式通信方向UART(通用異步收發(fā)器)TXD:發(fā)送端RXD:接受端GND:公共地異步通信全雙工單總線(1-wire)DQ:發(fā)送/接受端異步通信半雙工SPISCK:同步時(shí)鐘MISO:主機(jī)輸入,從機(jī)輸出MOSI:主機(jī)輸出,從機(jī)輸入同步通信全雙工I2CSCL:同步時(shí)鐘SDA:數(shù)據(jù)輸入/輸出端同步通信半雙工2.STM32串口通信基礎(chǔ)
STM32的串口通信接口UART:通用異步收發(fā)器USART:通用同步異步收發(fā)器STM32F4XX目前最多支持8個(gè)UARTSTM32F407一般是6個(gè)。USART1和USART6使用PCLK2計(jì)時(shí)。其它USART使用PCLK1計(jì)時(shí)。具體可以對照選型手冊和數(shù)據(jù)手冊來看。2.STM32串口通信基礎(chǔ)
UART異步通信方式引腳連接方法:-RXD:數(shù)據(jù)輸入引腳。數(shù)據(jù)接受。-TXD:數(shù)據(jù)發(fā)送引腳。數(shù)據(jù)發(fā)送。2.STM32串口通信基礎(chǔ)
UART異步通信方式引腳:-RXD:數(shù)據(jù)輸入引腳。數(shù)據(jù)接受。-TXD:數(shù)據(jù)發(fā)送引腳。數(shù)據(jù)發(fā)送。串口號(hào)RXDTXD1PA10(PB7)PA9(PB6)2PA3(PD6)PA2(PD5)3PB11(PC11/PD9)PB10(PC10/PD8)4PC11(PA1)PC10(PA0)5PD2PC126PC7(PG9)PC6(PG14)STM32F4的芯片數(shù)據(jù)手冊中芯片引腳功能中可以查看到。2.STM32串口通信基礎(chǔ)
UART異步通信方式特點(diǎn):全雙工異步通信。小數(shù)波特率發(fā)生器系統(tǒng),提供精確的波特率??膳渲玫?6倍過采樣或8倍過采樣,因而為速度容差與時(shí)鐘容差的靈活配置提供了可能。可編程的數(shù)據(jù)字長度(8位或者9位);可配置的停止位(支持1或者2位停止位);可配置的使用DMA多緩沖器通信。單獨(dú)的發(fā)送器和接收器使能位。檢測標(biāo)志:①
接受緩沖器②發(fā)送緩沖器空③傳輸結(jié)束標(biāo)志多個(gè)帶標(biāo)志的中斷源。觸發(fā)中斷。其他:校驗(yàn)控制,四個(gè)錯(cuò)誤檢測標(biāo)志。2.STM32串口通信基礎(chǔ)
串口通信過程數(shù)據(jù)接收過程:MCU內(nèi)核輸入數(shù)據(jù)緩沖器串行輸入移位寄存器MCU內(nèi)核輸出數(shù)據(jù)緩沖器串行輸出移位寄存器數(shù)據(jù)發(fā)送過程:RXDTXD串行數(shù)據(jù)輸入串行數(shù)據(jù)輸出外部設(shè)備外部設(shè)備……
STM32串口異步通信需要定義的參數(shù):
起始位數(shù)據(jù)位(8位或者9位)
奇偶校驗(yàn)位(第9位)
停止位(1-2位)
波特率設(shè)置范例:2.STM32串口通信基礎(chǔ)
2.STM32串口通信基礎(chǔ)
3.STM32串口常用寄存器常用的串口相關(guān)寄存器USART_DR狀態(tài)寄存器USART_SR數(shù)據(jù)寄存器USART_BRR波特率寄存器USART_CR1波特率寄存器
3.STM32串口常用寄存器
3.STM32串口常用寄存器RXNE(讀數(shù)據(jù)寄存器非空),當(dāng)該位被置1的時(shí)候,就是提示已經(jīng)有數(shù)據(jù)被接收到了,并且可以讀出來了。這時(shí)候我們要做的就是盡快去讀取USART_DR,通過讀USART_DR可以將該位清零,也可以向該位寫0,直接清除。TC(發(fā)送完成),當(dāng)該位被置位的時(shí)候,表示USART_DR內(nèi)的數(shù)據(jù)已經(jīng)被發(fā)送完成了。如果設(shè)置了這個(gè)位的中斷,則會(huì)產(chǎn)生中斷。該位也有兩種清零方式:1)讀USART_SR,寫USART_DR。2)直接向該位寫0。
3.STM32串口常用寄存器USARTDIV是一個(gè)存放在USART_BRR寄存器中的無符號(hào)定點(diǎn)數(shù)?!癞?dāng)OVER8=0時(shí),小數(shù)部分編碼為4位并通過USART_BRR寄存器中的DIV_fraction[3:0]位編程。●當(dāng)OVER8=1時(shí),小數(shù)部分編碼為3位并通過USART_BRR寄存器中的DIV_fraction[2:0]位編程,此時(shí)DIV_fraction[3]位必須保持清零狀態(tài)。
3.STM32串口常用寄存器波特率計(jì)算方法
3.STM32串口常用寄存器OVER8為過采樣模式設(shè)置位,我們一般設(shè)置位0,即16倍過采樣已獲得更好的容錯(cuò)性;UE為串口使能位,通過該位置1,以使能串口;M為字長選擇位,當(dāng)該位為0的時(shí)候設(shè)置串口為8個(gè)字長外加n個(gè)停止位,停止位的個(gè)數(shù)(n)是根據(jù)USART_CR2的[13:12]位設(shè)置來決定的,默認(rèn)為0;PCE為校驗(yàn)使能位,設(shè)置為0,則禁止校驗(yàn),否則使能校驗(yàn);PS為校驗(yàn)位選擇位,設(shè)置為0則為偶校驗(yàn),否則為奇校驗(yàn);TXIE為發(fā)送緩沖區(qū)空中斷使能位,設(shè)置該位為1,當(dāng)USART_SR中的TXE位為1時(shí),將產(chǎn)生串口中斷;TCIE為發(fā)送完成中斷使能位,設(shè)置該位為1,當(dāng)USART_SR中的TC位為1時(shí),將產(chǎn)生串口中斷;RXNEIE為接收緩沖區(qū)非空中斷使能,設(shè)置該位為1,當(dāng)USART_SR中的ORE或者RXNE位為1時(shí),將產(chǎn)生串口中斷;TE為發(fā)送使能位,設(shè)置為1,將開啟串口的發(fā)送功能;RE為接收使能位,用法同TE。USART控制寄存器1(USART_CR1)
4.串口配置方法串口配置的一般步驟串口時(shí)鐘使能,GPIO時(shí)鐘使能串口復(fù)位:這一步不是必須的GPIO端口模式設(shè)置:串口參數(shù)初始化:開啟中斷并且初始化NVIC(如果需要開啟中斷才需要這個(gè)步驟)⑥使能串口:⑦編寫中斷處理函數(shù):USARTx_IRQHandler();⑧串口數(shù)據(jù)收發(fā):⑨串口傳輸狀態(tài)獲?。?/p>
5.串口通信實(shí)驗(yàn)講解串口通信實(shí)驗(yàn)題目要求:通過XCOMV2.0將輸入尾部具有回車換行的字符串返回顯示
5.串口通信實(shí)驗(yàn)講解voiduart_init(u32pclk2,u32bound){floattemp;u16mantissa;u16fraction;temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIVmantissa=temp;//得到整數(shù)部分
fraction=(temp-mantissa)*16;//得到小數(shù)部分mantissa<<=4;mantissa+=fraction;
……}串口初始化函數(shù)
5.串口通信實(shí)驗(yàn)講解RCC->AHB1ENR|=1<<0;//使能PORTA口時(shí)鐘RCC->APB2ENR|=1<<4;//使能串口1時(shí)鐘GPIO_Set(GPIOA,PIN9|PIN10,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);//PA9,PA10,復(fù)用功能,上拉輸出GPIO_AF_Set(GPIOA,9,7);//PA9,AF7GPIO_AF_Set(GPIOA,10,7);//PA10,AF7//波特率設(shè)置USART1->BRR=mantissa;//波特率設(shè)置USART1->CR1&=~(1<<15);//設(shè)置OVER8=0USART1->CR1|=1<<3;//串口發(fā)送使能#ifEN_USART1_RX//如果使能了接收//使能接收中斷USART1->CR1|=1<<2;//串口接收使能USART1->CR1|=1<<5;//接收緩沖區(qū)非空中斷使能MY_NVIC_Init(3,3,USART1_IRQn,2);//組2,最低優(yōu)先級(jí)#endifUSART1->CR1|=1<<13;//串口使能串口初始化函數(shù)
5.串口通信實(shí)驗(yàn)講解
5.串口通信實(shí)驗(yàn)講解voidUSART1_IRQHandler(void){u8res;if(USART1->SR&(1<<5))//接收到數(shù)據(jù)
{res=USART1->DR;if((USART_RX_STA&0x8000)==0)//接收未完成
{if(USART_RX_STA&0x4000)//接收到了0x0d{if(res!=0x0a)USART_RX_STA=0;//接收錯(cuò)誤,重新開始
elseUSART_RX_STA|=0x8000;//接收完成了
}else//還沒收到0X0D{if(res==0x0d)USART_RX_STA|=0x4000;else{USART_RX_BUF[USART_RX_STA&0X3FFF]=res;USART_RX_STA++;if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收數(shù)據(jù)錯(cuò)誤,重新開始接收
}}}}}串口中斷函數(shù)//bit15, 接收完成標(biāo)志//bit14, 接收到0x0d//bit13~0,接收到的有效字節(jié)數(shù)目u16USART_RX_STA=0;u8USART_RX_BUF[USART_REC_LEN];
5.串口通信實(shí)驗(yàn)講解u8t;u8len;u16times=0;uart_init(84,115200);//串口初始化為115200LED_Init();//初始化與LED連接的硬件接口while(1){if(USART_RX_STA&0x8000){len=USART_RX_STA&0x3fff;//得到此次接收到的數(shù)據(jù)長度
printf("\r\n您發(fā)送的消息為:\r\n");for(t=0;t<len;t++){USART1->DR=USART_RX_BUF[t];while((USART1->SR&0X40)==0);//等待發(fā)送結(jié)束
}printf("\r\n\r\n");//插入換行
USART_RX_STA=0;}else{times++;if(times%5000==0){printf("\r\nALIENTEKMiniSTM32開發(fā)板串口實(shí)驗(yàn)\r\n");printf("正點(diǎn)原子@ALIENTEK\r\n\r\n\r\n");}if(times%200==0)printf("請輸入數(shù)據(jù),以回車鍵結(jié)束\r\n");if(times%30==0)LED0=!LED0;//閃爍LED,提示系統(tǒng)正在運(yùn)行.delay_ms(10);}}主函數(shù)目錄STM32中斷概述1外部中斷概述2外部中斷一般配置過程3
中斷實(shí)驗(yàn)4外部中斷
參考資料:
《STM32F4開發(fā)指南-寄存器版本》-第10章外部中斷實(shí)驗(yàn)STM32F4xx官方資料:《STM32F4xx中文參考手冊》-第10章中斷和
事件1、STM32中斷概述
CM4內(nèi)核支持256個(gè)中斷,其中包含了16個(gè)內(nèi)核中斷和240個(gè)外部中斷,并且具有256級(jí)的可編程中斷設(shè)置。STM32F4并沒有使用CM4內(nèi)核的全部東西,而是只用了它的一部分。-STM32F40xx/STM32F41xx總共有92個(gè)中斷。 -STM32F42xx/STM32F43xx則總共有96個(gè)中斷
STM32F40xx/STM32F41xx的92個(gè)中斷里面,包括10個(gè)內(nèi)核中斷和82個(gè)可屏蔽中斷,具有16級(jí)可編程的中斷優(yōu)先級(jí),而我們常用的就是這82個(gè)可屏蔽中斷。1、STM32中斷概述
《STM32F4xx中文參考手冊》P234表45和46……STM32F405xx/STM32F407XX向量表10個(gè)內(nèi)核中斷82個(gè)可屏蔽中斷1、STM32中斷概述
首先,對STM32中斷進(jìn)行分組,組0~4。同時(shí),對每個(gè)中斷設(shè)置一個(gè)搶占優(yōu)先級(jí)和一個(gè)響應(yīng)優(yōu)先級(jí)值。分組配置是在寄存器SCB->AIRCR中配置:組AIRCR[10:8]IPbit[7:4]分配情況分配結(jié)果01110:40位搶占優(yōu)先級(jí),4位響應(yīng)優(yōu)先級(jí)11101:31位搶占優(yōu)先級(jí),3位響應(yīng)優(yōu)先級(jí)21012:22位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)31003:13位搶占優(yōu)先級(jí),1位響應(yīng)優(yōu)先級(jí)40114:04位搶占優(yōu)先級(jí),0位響應(yīng)優(yōu)先級(jí)中斷管理方法:1、STM32中斷概述
高優(yōu)先級(jí)的搶占優(yōu)先級(jí)是可以打斷正在進(jìn)行的低搶占優(yōu)先級(jí)中斷的。搶占優(yōu)先級(jí)相同的中斷,高響應(yīng)優(yōu)先級(jí)不可以打斷低響應(yīng)優(yōu)先級(jí)的中斷。搶占優(yōu)先級(jí)相同的中斷,當(dāng)兩個(gè)中斷同時(shí)發(fā)生的情況下,哪個(gè)響應(yīng)優(yōu)先級(jí)高,哪個(gè)先執(zhí)行。如果兩個(gè)中斷的搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)都是一樣的話,則看哪個(gè)中斷先發(fā)生就先執(zhí)行;搶占優(yōu)先級(jí)&響應(yīng)優(yōu)先級(jí)區(qū)別:1、STM32中斷概述
舉例:假定設(shè)置中斷優(yōu)先級(jí)組為2,然后設(shè)置
中斷3(RTC中斷)的搶占優(yōu)先級(jí)為2,響應(yīng)優(yōu)先級(jí)為1。
中斷6(外部中斷0)的搶占優(yōu)先級(jí)為3,響應(yīng)優(yōu)先級(jí)為0。
中斷7(外部中斷1)的搶占優(yōu)先級(jí)為2,響應(yīng)優(yōu)先級(jí)為0。那么這3個(gè)中斷的優(yōu)先級(jí)順序?yàn)椋褐袛?>中斷3>中斷6。1、STM32中斷概述
特別說明:一般情況下,系統(tǒng)代碼執(zhí)行過程中,只設(shè)置一次中斷優(yōu)先級(jí)分組,比如分組2,設(shè)置好分組之后一般不會(huì)再改變分組。隨意改變分組會(huì)導(dǎo)致中斷管理混亂,程序出現(xiàn)意想不到的執(zhí)行結(jié)果。1、STM32中斷概述
在MDK內(nèi),與NVIC相關(guān)的寄存器,MDK為其定義了如下的結(jié)構(gòu)體:typedefstruct{
__IOuint32_tISER[8];//中斷使能寄存器組uint32_tRESERVED0[24];
__IOuint32_tICER[8];//中斷除能寄存器組uint32_tRSERVED1[24];
__IOuint32_tISPR[8];//中斷掛起控制寄存器組uint32_tRESERVED2[24];
__IOuint32_tICPR[8];//中斷解掛控制寄存器組 uint32_tRESERVED3[24];
__IOuint32_tIABR[8];//中斷激活標(biāo)志位寄存器組 uint32_tRESERVED4[56];
__IOuint8_tIP[240];//中斷優(yōu)先級(jí)控制寄存器組 uint32_tRESERVED5[644];
__Ouint32_tSTIR;//軟件觸發(fā)中斷寄存器組}NVIC_Type;1、STM32中斷概述
ISER[8]:ISER全稱是:InterruptSet-EnableRegisters,這是一個(gè)中斷使能寄存器組。上面說了CM4內(nèi)核支持256個(gè)中斷,這里用8個(gè)32位寄存器來控制,每個(gè)位控制一個(gè)中斷。但是STM32的可屏蔽中斷最多只有82個(gè),所以對我們來說,有用的就是三個(gè)(ISER[0~2]]),總共可以表示96個(gè)中斷。而STM32只用了其中的前82位。ISER[0]的bit0~31分別對應(yīng)中斷0~31;ISER[1]的bit0~32對應(yīng)中斷32~63;ISER[2]的bit0~17對應(yīng)中斷64~82;這樣總共82個(gè)中斷就分別對應(yīng)上了。你要使能某個(gè)中斷,必須設(shè)置相應(yīng)的ISER位為1,使該中斷被使能。1、STM32中斷概述
IP[240]:全稱是:InterruptPriorityRegisters,是一個(gè)中斷優(yōu)先級(jí)控制的寄存器組。這個(gè)寄存器組相當(dāng)重要!STM32的中斷分組與這個(gè)寄存器組密切相關(guān)。IP寄存器組由240個(gè)8bit的寄存器組成,每個(gè)可屏蔽中斷占用8bit,這樣總共可以表示240個(gè)可屏蔽中斷。而STM32只用到了其中的82個(gè)。IP[81]~IP[0]分別對應(yīng)中斷81~0。而每個(gè)可屏蔽中斷占用的8bit并沒有全部使用,而是只用了高4位。這4位,又分為搶占優(yōu)先級(jí)和子優(yōu)先級(jí)。搶占優(yōu)先級(jí)在前,子優(yōu)先級(jí)在后。而這兩個(gè)優(yōu)先級(jí)各占幾個(gè)位又要根據(jù)SCB->AIRCR中的中斷分組設(shè)置來決定。1、STM32中斷概述
//設(shè)置NVIC分組//NVIC_Group:NVIC分組0~4總共5組voidMY_NVIC_PriorityGroupConfig(u8NVIC_Group){u32temp,temp1;temp1=(~NVIC_Group)&0x07;//取后三位temp1<<=8;temp=SCB->AIRCR;//讀取先前的設(shè)置temp&=0X0000F8FF;//清空先前分組temp|=0X05FA0000;//寫入鑰匙temp|=temp1;SCB->AIRCR=temp;//設(shè)置分組}
NVIC的分組函數(shù)MY_NVIC_PriorityGroupConfig該函數(shù)的參數(shù)NVIC_Group為要設(shè)置的分組號(hào),可選范圍為0~4,總共5組。1、STM32中斷概述
/NVIC_PreemptionPriority:搶占優(yōu)先級(jí)//NVIC_SubPriority:響應(yīng)優(yōu)先級(jí)//NVIC_Channel:中斷編號(hào)//NVIC_Group:中斷分組0~4//NVIC_SubPriority和NVIC_PreemptionPriority的原則是,數(shù)值越小,越優(yōu)先voidMY_NVIC_Init(u8NVIC_PreemptionPriority,u8NVIC_SubPriority,u8NVIC_Channel,u8NVIC_Group){u32temp;MY_NVIC_PriorityGroupConfig(NVIC_Group);//設(shè)置分組temp=NVIC_PreemptionPriority<<(4-NVIC_Group);temp|=NVIC_SubPriority&(0x0f>>NVIC_Group);temp&=0xf;//取低四位NVIC->ISER[NVIC_Channel/32]|=(1<<NVIC_Channel%32);//使能中斷位(要清除的話,相反操作就OK)NVIC->IP[NVIC_Channel]|=temp<<4;//設(shè)置響應(yīng)優(yōu)先級(jí)和搶斷優(yōu)先級(jí)}
NVIC設(shè)置函數(shù)MY_NVIC_Init2、外部中斷概述
STM32F4的每個(gè)IO都可以作為外部中斷輸入。STM32F4的中斷控制器支持22個(gè)外部中斷/事件請求:EXTI線0~15:對應(yīng)外部IO口的輸入中斷。EXTI線16:連接到PVD輸出。EXTI線17:連接到RTC鬧鐘事件。EXTI線18:連接到USBOTGFS喚醒事件。EXTI線19:連接到以太網(wǎng)喚醒事件。EXTI線20:連接到USBOTGHS(在FS中配置)喚醒事件。EXTI線21:連接到RTC入侵和時(shí)間戳事件。EXTI線22:連接到RTC喚醒事件。每個(gè)外部中斷線可以獨(dú)立的配置觸發(fā)方式(上升沿,下降沿或者雙邊沿觸發(fā)),觸發(fā)/屏蔽,專用的狀態(tài)位。從上面可以看出,STM32F4供IO使用的中斷線只有16個(gè),但是STM32F4xx系列的IO口多達(dá)上百個(gè),STM32F407ZGT6(112),
那么中斷線怎么跟IO口對應(yīng)呢?2、
外部中斷概述
GPIOx.0映射到EXTI0GPIOx.1映射到EXTI1…GPIOx.15映射到EXTI152、外部中斷概述
對于每個(gè)中斷線,我們可以設(shè)置相應(yīng)的觸發(fā)方式(上升沿觸發(fā),下降沿觸發(fā),邊沿觸發(fā))以及使能。中斷寄存器IMR:中斷屏蔽寄存器EMR:事件屏蔽寄存器FTSR:下降沿觸發(fā)選擇寄存器RTSR:上升沿觸發(fā)選擇寄存器SWIER:軟件中斷事件寄存器PR:掛起寄存器2、外部中斷概述
中斷寄存器2、外部中斷概述
IO復(fù)用里的外部中斷配置寄存器EXTICR。EXTICR在AFIO的結(jié)構(gòu)體中定義,如下:typedefstruct{ __IOuint32_tMEMRMP; __IOuint32_tPMC;
__IOuint32_tEXTICR[4]; uint32_tRESERVED[2]; __IOuint32_tCMPCR;}AFIO_TypeDef;2、外部中斷概述
EXTICR寄存器組,總共有4個(gè),因?yàn)榫幾g器的寄存器組都是從0開始編號(hào)的,所以EXTICR[0]~EXTICR[3],對應(yīng)《STM32中文參考手冊》里面的EXTICR1~EXTICR4。每個(gè)EXTICR只用了其低16位。EXTICR[0]的分配如圖所示:2、外部中斷概述
Ex_NVIC_Config函數(shù)voidEx_NVIC_Config(u8GPIOx,u8BITx,u8TRIM){u8EXTADDR;u8EXTOFFSET;EXTADDR=BITx/4;//得到中斷寄存器組的編號(hào)EXTOFFSET=(BITx%4)*4;
RCC->APB2ENR|=0x01;//使能io復(fù)用時(shí)鐘AFIO->EXTICR[EXTADDR]&=~(0x000F<<EXTOFFSET);//清除原來設(shè)置?。。FIO->EXTICR[EXTADDR]|=GPIOx<<EXTOFFSET;//EXTI.BITx映射到GPIOx.BITx//自動(dòng)設(shè)置EXTI->IMR|=1<<BITx;//開啟lineBITx上的中斷if(TRIM&0x01)EXTI->FTSR|=1<<BITx;//lineBITx上事件下降沿觸發(fā)if(TRIM&0x02)EXTI->RTSR|=1<<BITx;//lineBITx上事件上升降沿觸發(fā)}2、
外部中斷概述
是不是16個(gè)中斷線就可以分配16個(gè)中斷服務(wù)函數(shù)呢?IO口外部中斷在中斷向量表中只分配了7個(gè)中斷向量,也就是
只能使用7個(gè)中斷服務(wù)函數(shù)從表中可以看出,外部中斷線5~9分配一個(gè)中斷向量,共用一個(gè)服務(wù)函數(shù)
外部中斷線10~15分配一個(gè)中斷向量,共用一個(gè)中斷服務(wù)函數(shù)。2、外部中斷概述
EXTI0_IRQHandlerEXTI1_IRQHandlerEXTI2_IRQHandlerEXTI3_IRQHandlerEXTI4_IRQHandlerEXTI9_5_IRQHandlerEXTI15_10_IRQHandler中斷服務(wù)函數(shù)列表:3.外部中斷一般配置過程
初始化IO口為輸入。②
開啟IO口復(fù)用時(shí)鐘。設(shè)置IO口與中斷線的映射關(guān)系。初始化線上中斷,設(shè)置觸發(fā)條件等。配置中斷分組(NVIC),并使能中斷。⑥編寫中斷服務(wù)函數(shù)。清除中斷標(biāo)志位
外部中斷的一般配置步驟:4、中斷實(shí)驗(yàn)
硬件連接KEY0->PE4上拉輸入KEY1->PE3上拉輸入WK_UP->PA0下拉輸入4、中斷實(shí)驗(yàn)
中斷初始化voidEXTI_Init(void){KEY_Init();//按鍵初始化Ex_NVIC_Config(GPIO_A,0,RTIR);//上升沿觸發(fā)Ex_NVIC_Config(GPIO_E,3,FTIR);//下降沿觸發(fā)Ex_NVIC_Config(GPIO_E,4,FTIR);//下降沿觸發(fā)MY_NVIC_Init(2,2,EXTI3_IRQn,2);//搶占2,子優(yōu)先級(jí)2,組2MY_NVIC_Init(1,2,EXTI4_IRQn,2);//搶占1,子優(yōu)先級(jí)2,組2MY_NVIC_Init(0,2,EXTI0_IRQn,2);//搶占0,子優(yōu)先級(jí)2,組2}4、中斷實(shí)驗(yàn)
中斷函數(shù)voidEXTI0_IRQHandler(void){delay_ms(10);//消抖if(WK_UP==1)//WK_UP按鍵{LED0=!LED0;LED1=!LED1;}
EXTI->PR=1<<0;//清除LINE0上的中斷標(biāo)志位}//外部中斷3服務(wù)程序voidEXTI3_IRQHandler(void){delay_ms(10);/
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度文化旅游地產(chǎn)項(xiàng)目房屋及土地所有權(quán)轉(zhuǎn)讓協(xié)議
- 二零二五年度高校畢業(yè)生就業(yè)安置與就業(yè)服務(wù)保障合同
- 二零二五年度車庫購置與車位共享運(yùn)營協(xié)議
- 二零二五年度玉米種植補(bǔ)貼收購合同
- 二零二五年度廉潔合作協(xié)議:公共資源交易項(xiàng)目監(jiān)管合同
- 二零二五年度飼料行業(yè)風(fēng)險(xiǎn)評估與保險(xiǎn)合同
- 二零二五年度旅游度假區(qū)招商代理專項(xiàng)協(xié)議
- 二零二五年度少兒教育講師聘用合同
- 二零二五年度高校離退休教師兼職返聘協(xié)議
- 二零二五年度瑜伽教練職業(yè)培訓(xùn)聘用協(xié)議
- 2024版2024年《汽車文化》全套教案
- 建筑垃圾清理運(yùn)輸服務(wù)方案
- 商業(yè)街委托運(yùn)營合同范本
- 2024年部編版六年級(jí)語文上冊第六單元 語文園地六(教案)
- 諾如病毒的護(hù)理
- 三年級(jí)下冊語文核心素養(yǎng)教案電子版
- 中考英語688高頻詞大綱詞頻表
- 計(jì)算機(jī)基礎(chǔ)教程電子版
- 財(cái)務(wù)管理學(xué)(第10版)課件 第3章 財(cái)務(wù)分析
- 急性腦卒中知識(shí)考核試題及答案
- 關(guān)于如何做好清單招標(biāo)控制價(jià)的幾點(diǎn)建議
評論
0/150
提交評論