基于ARM的單片機(jī)應(yīng)用及實(shí)踐課件第五章_第1頁(yè)
基于ARM的單片機(jī)應(yīng)用及實(shí)踐課件第五章_第2頁(yè)
基于ARM的單片機(jī)應(yīng)用及實(shí)踐課件第五章_第3頁(yè)
基于ARM的單片機(jī)應(yīng)用及實(shí)踐課件第五章_第4頁(yè)
基于ARM的單片機(jī)應(yīng)用及實(shí)踐課件第五章_第5頁(yè)
已閱讀5頁(yè),還剩46頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第五章第五章 GPIO及外部中斷的使用及外部中斷的使用5.1 綜述綜述通用通用IO復(fù)位期間和剛復(fù)位后,復(fù)用功能未開啟,I/O端口被配置成浮空輸入模式(CNFx1:0=01b,MODEx1:0=00b)。復(fù)位后,JTAG引腳被置于輸入上拉或下拉模式:PA15:JTDI置于上拉模式PA14:JTCK置于下拉模式PA13:JTMS置于上拉模式PB4: JNTRST置于上拉模式單獨(dú)的位設(shè)置或位清除單獨(dú)的位設(shè)置或位清除當(dāng)對(duì)GPIOx_ODR的個(gè)別位編程時(shí),軟件不需要禁止中斷:在單次APB2寫操作里,可以只更改一個(gè)或多個(gè)位。這是通過對(duì)“置位/復(fù)位寄存器”(GPIOx_BSRR,復(fù)位是 GPIOx_BRR)

2、中想要更改的位寫1來實(shí)現(xiàn)的。沒被選擇的位將不被更改。5.1 綜述綜述外部中斷外部中斷/喚醒線喚醒線所有端口都有外部中斷能力。為了使用外部中斷線,端口必須配置成輸入模式。5.1 綜述綜述軟件重新映射軟件重新映射I/O復(fù)用功能復(fù)用功能為了使不同器件封裝的外設(shè)I/O功能的數(shù)量達(dá)到最優(yōu),可以把一些復(fù)用功能重新映射到其他一些腳上。這可以通過軟件配置相應(yīng)的寄存器來完成(參考AFIO寄存器描述)。這時(shí),復(fù)用功能就不再映射到它們的原始引腳上了。GPIO鎖定機(jī)制鎖定機(jī)制鎖定機(jī)制允許凍結(jié)IO配置。當(dāng)在一個(gè)端口位上執(zhí)行了所定(LOCK)程序,在下一次復(fù)位之前,將不能再更改端口位的配置。5.1 綜述綜述復(fù)用功能復(fù)用功

3、能(AF)使用默認(rèn)復(fù)用功能前必須對(duì)端口位配置寄存器編程。對(duì)于復(fù)用的輸入功能,端口必須配置成輸入模式(浮空、上拉或下拉)且輸入管腳必須由外部驅(qū)動(dòng)對(duì)于復(fù)用輸出功能,端口必須配置成復(fù)用功能輸出模式(推挽或開漏)。對(duì)于雙向復(fù)用功能,端口位必須配置復(fù)用功能輸出模式(推挽或開漏)。這時(shí),輸入驅(qū)動(dòng)器被配置成浮空輸入模式。5.1 綜述綜述輸入配置當(dāng)I/O端口配置為輸入時(shí):輸出緩沖器被禁止施密特觸發(fā)輸入被激活根據(jù)輸入配置(上拉,下拉或浮動(dòng))的不同,弱上拉和下拉電阻被連接出現(xiàn)在I/O腳上的數(shù)據(jù)在每個(gè)APB2時(shí)鐘被采樣到輸入數(shù)據(jù)寄存器對(duì)輸入數(shù)據(jù)寄存器的讀訪問可得到I/O狀態(tài)輸出配置輸出配置當(dāng)I/O端口被配置為輸出時(shí)

4、:輸出緩沖器被激活施密特觸發(fā)輸入被激活弱上拉和下拉電阻被禁止出現(xiàn)在I/O腳上的數(shù)據(jù)在每個(gè)APB2時(shí)鐘被采樣到輸入數(shù)據(jù)寄存器在開漏模式時(shí),對(duì)輸入數(shù)據(jù)寄存器的讀訪問可得到I/O狀態(tài)在推挽式模式時(shí),對(duì)輸出數(shù)據(jù)寄存器的讀訪問得到最后一次寫的值。5.1 綜述綜述復(fù)用功能配置復(fù)用功能配置5.1 綜述當(dāng)I/O端口被配置為復(fù)用功能時(shí):在開漏或推挽式配置中,輸出緩沖器被打開內(nèi)置外設(shè)的信號(hào)驅(qū)動(dòng)輸出緩沖器(復(fù)用功能輸出)密特觸發(fā)輸入被激活弱上拉和下拉電阻被禁止在每個(gè)APB2時(shí)鐘周期,出現(xiàn)在I/O腳上的數(shù)據(jù)被采樣到輸入數(shù)據(jù)寄存器開漏模式時(shí),讀輸入數(shù)據(jù)寄存器時(shí)可得到I/O口狀態(tài)在推挽模式時(shí),讀輸出數(shù)據(jù)寄存器時(shí)可得到最后

5、一次寫的值模擬輸入配置當(dāng)I/O端口被配置為模擬輸入配置時(shí):輸出緩沖器被禁止;禁止施密特觸發(fā)輸入,實(shí)現(xiàn)了每個(gè)模擬I/O引腳上的零消耗。施密特觸發(fā)輸出值被強(qiáng)置為0;弱上拉和下拉電阻被禁止;讀取輸入數(shù)據(jù)寄存器時(shí)數(shù)值為0。5.1 綜述5.2 庫(kù)函數(shù)庫(kù)函數(shù)具體函數(shù)用法詳情見STM32固件庫(kù)使用手冊(cè)5.3 IO端口的外設(shè)端口的外設(shè)把把OSC32_IN/OSC32_OUT作為作為GPIO 端口端口PC14/PC15當(dāng)LSE振蕩器關(guān)閉時(shí),LSE振蕩器引腳OSC32_IN/OSC32_OUT可以分別用做GPIO的PC14/PC15,LSE功能始終優(yōu)先于通用I/O口的功能。把把OSC32_IN/OSC32_OUT

6、作為作為GPIO 端口端口PC14/PC15外部振蕩器引腳OSC_IN/OSC_OUT可以用做GPIO的PD0/PD1,通過設(shè)置復(fù)用重映射和調(diào)試I/O配置寄存器(AFIO_MAPR)實(shí)現(xiàn)。這個(gè)重映射只適用于36、48和64腳的封裝(100腳和144腳的封裝上有單獨(dú)的PD0和PD1的引腳,不必重映射)。5.3 IO端口的外設(shè)端口的外設(shè)5.3 IO端口的外設(shè)端口的外設(shè)CAN復(fù)用功能重映射復(fù)用功能重映射CAN信號(hào)可以被映射到端口A、端口B或端口D上,如下表所示。對(duì)于端口D,在36、48和64腳的封裝上沒有重映射功能。5.3 IO端口的外設(shè)端口的外設(shè)JTAG/SWD復(fù)用功能重映射復(fù)用功能重映射調(diào)試接口

7、信號(hào)被映射到GPIO端口上,如下表所示。表 調(diào)試接口信號(hào)5.3 IO端口的外設(shè)端口的外設(shè)表 調(diào)試端口映像5.3 IO端口的外設(shè)端口的外設(shè)ADC復(fù)用功能重映射復(fù)用功能重映射ADC1外部觸發(fā)注入轉(zhuǎn)換復(fù)用功能重映射(1)ADC1外部觸發(fā)規(guī)則轉(zhuǎn)換復(fù)用功能重映射(1)ADC2外部觸發(fā)注入轉(zhuǎn)換復(fù)用功能重映射(1)5.3 IO端口的外設(shè)端口的外設(shè)ADC2外部觸發(fā)規(guī)則轉(zhuǎn)換復(fù)用功能重映射(1)定時(shí)器復(fù)用功能重映射定時(shí)器復(fù)用功能重映射5.3 IO端口的外設(shè)端口的外設(shè)定時(shí)器4的通道1到通道4可以從端口B重映射到端口D。其他定時(shí)器的重映射列在下表。參見復(fù)用重映射和調(diào)試I/O配置寄存器(AFIO_MAPR)定時(shí)器5復(fù)用

8、功能重映像(1)定時(shí)器4復(fù)用功能重映像5.3 IO端口的外設(shè)端口的外設(shè)定時(shí)器3復(fù)用功能重映像定時(shí)器2復(fù)用功能重映像定時(shí)器1復(fù)用功能重映像5.3 IO端口的外設(shè)端口的外設(shè)5.3 IO端口的外設(shè)端口的外設(shè)USART復(fù)用功能重映射USART3重映像USART2重映像5.3 IO端口的外設(shè)端口的外設(shè)USART1重映像5.3 IO端口的外設(shè)端口的外設(shè)I2C 1 復(fù)用功能重映射復(fù)用功能重映射I2C 1重映像SPI 1復(fù)用功能重映射復(fù)用功能重映射SPI1重映像5.4 位運(yùn)算位運(yùn)算 左移運(yùn)算符()左移運(yùn)算符()左移位相當(dāng)于該數(shù)乘以,左移位相當(dāng)于該數(shù)乘以22,152=60,即乘了。但此結(jié)論只適用于該數(shù)左移時(shí)被溢

9、出舍棄的高位中不包含的情況。假設(shè)以一個(gè)字節(jié)(位)存一個(gè)整數(shù),若為無(wú)符號(hào)整型變量,則時(shí),左移一位時(shí)溢出的是,而左移位時(shí),溢出的高位中包含。右移運(yùn)算符右移運(yùn)算符()右移運(yùn)算符是a2表示將a的各二進(jìn)制位右移2位,移到右端的低位被舍棄,對(duì)無(wú)符號(hào)數(shù),高位補(bǔ)0。例如:a=017時(shí):a的值用二進(jìn)制形式表示為00001111, 舍棄低2位11: a2=00000011右移一位相當(dāng)于除以2 右移n位相當(dāng)于除以2n。5.4 位運(yùn)算位運(yùn)算5.4 位運(yùn)算位運(yùn)算“按位與按位與”運(yùn)算符()運(yùn)算符()按位與是指:參加運(yùn)算的兩個(gè)數(shù)據(jù),按二進(jìn)制位進(jìn)行“與”運(yùn)算。如果兩個(gè)相應(yīng)的二進(jìn)制位都為,則該位的結(jié)果值為;否則為。即:,例:并

10、不等于,應(yīng)該是按位與運(yùn)算: 00000011(3)& & 00000101(5) 00000001(1) 注意:如果參加如果參加&運(yùn)算的是負(fù)數(shù)運(yùn)算的是負(fù)數(shù)(如(如-3&-5),則要以補(bǔ)碼形式),則要以補(bǔ)碼形式表示為二進(jìn)制數(shù),然后再按位表示為二進(jìn)制數(shù),然后再按位進(jìn)行進(jìn)行“與與”運(yùn)算。運(yùn)算。3&5的值得5.4 位運(yùn)算位運(yùn)算“按位或按位或”運(yùn)算符(運(yùn)算符(|)兩個(gè)相應(yīng)的二進(jìn)制位中只要有一個(gè)為,該位的結(jié)果值為。即 |,|,|,|例: 060|017,將八進(jìn)制數(shù)60與八進(jìn)制數(shù)17進(jìn)行按位或運(yùn)算。 00110000| 00001111 00111111 “取反取反”

11、運(yùn)算符()運(yùn)算符() 是一個(gè)單目(元)運(yùn)算符,用來對(duì)一個(gè)二進(jìn)制數(shù)按位取反,即將變,將變。例如,是對(duì)八進(jìn)制數(shù)(即二進(jìn)制數(shù))按位求反。 0000000000010101() 1111111111101010 (八進(jìn)制數(shù)177752)5.4 位運(yùn)算位運(yùn)算“異或異或”運(yùn)算符(運(yùn)算符()5.4 位運(yùn)算位運(yùn)算異或運(yùn)算符也稱XOR運(yùn)算符。它的規(guī)則是:若參加運(yùn)算的兩個(gè)二進(jìn)制位同號(hào)則結(jié)果為(假)異號(hào)則結(jié)果為(真)即:00=0,01=1,10=1, 11=0 00111001 00101010 00010011 即:071052=023 (八進(jìn)制數(shù))5.5 GPIO控制實(shí)例控制實(shí)例控制LED閃爍跑馬燈按鍵輸入5.

12、6 外部中斷和中斷控制器外部中斷和中斷控制器嵌套向量中斷控制器嵌套向量中斷控制器特性60個(gè)可屏蔽中斷通道(不包含16個(gè)Cortex-M3的中斷線);16個(gè)可編程的優(yōu)先等級(jí)(使用了4位中斷優(yōu)先級(jí));低延遲的異常和中斷處理;電源管理控制;系統(tǒng)控制寄存器的實(shí)現(xiàn);嵌套向量中斷控制器(NVIC)和處理器核的接口緊密相連,可以實(shí)現(xiàn)低延遲的中斷處理和有效處理地處理晚到的中斷。中斷和異常向量5.6 外部中斷和中斷控制器外部中斷和中斷控制器STM32F10 xxx產(chǎn)品的向量表5.6 外部中斷和中斷控制器外部中斷和中斷控制器5.6 外部中斷和中斷控制器外部中斷和中斷控制器5.6 外部中斷和中斷控制器外部中斷和中斷

13、控制器5.6 外部中斷和中斷控制器外部中斷和中斷控制器外部中斷外部中斷/事件控制器事件控制器(EXTI)外部中斷/事件控制器由19個(gè)產(chǎn)生事件/中斷要求的邊沿檢測(cè)器組成。每個(gè)輸入線可以獨(dú)立地配置輸入類型(脈沖或掛起)和對(duì)應(yīng)的觸發(fā)事件(上升沿或下降沿或者雙邊沿都觸發(fā))。每個(gè)輸入線都可以被獨(dú)立的屏蔽。掛起寄存器保持著狀態(tài)線的中斷要求。主要特性EXTI控制器的主要特性如下:每個(gè)中斷/事件都有獨(dú)立的觸發(fā)和屏蔽每個(gè)中斷線都有專用的狀態(tài)位支持多達(dá)19個(gè)中斷/事件請(qǐng)求檢測(cè)脈沖寬度低于APB2時(shí)種寬度的外部信號(hào)。參見數(shù)據(jù)手冊(cè)中電氣特性部分的相關(guān)參數(shù)。5.6 外部中斷和中斷控制器外部中斷和中斷控制器5.6 外部中

14、斷和中斷控制器外部中斷和中斷控制器硬件中斷選擇硬件中斷選擇通過下面的過程來配置19個(gè)線路做為中斷源:配置19個(gè)中斷線的屏蔽位(EXTI_IMR)配置所選中斷線的觸發(fā)選擇位(EXTI_RTSR和EXTI_FTSR);配置那些控制映像到外部中斷控制器(EXTI)的NVIC中斷通道的使能和屏蔽位,使得19個(gè)中斷線中的請(qǐng)求可以被正確地響應(yīng)。硬件事件選擇硬件事件選擇通過下面的過程,可以配置19個(gè)線路為事件源配置19個(gè)事件線的屏蔽位(EXTI_EMR)配置事件線的觸發(fā)選擇位(EXTI_RTSR和EXTI_FTSR)5.6 外部中斷和中斷控制器外部中斷和中斷控制器軟件中斷軟件中斷/事件的選擇事件的選擇19個(gè)

15、線路可以被配置成軟件中斷/事件線。下面是產(chǎn)生軟件中斷的過程:配置19個(gè)中斷/事件線屏蔽位(EXTI_IMR, EXTI_EMR)設(shè)置軟件中斷寄存器的請(qǐng)求位(EXTI_SWIER)5.6 外部中斷和中斷控制器外部中斷和中斷控制器NVIC庫(kù)函數(shù)庫(kù)函數(shù)5.6 外部中斷和中斷控制器外部中斷和中斷控制器5.6 外部中斷和中斷控制器外部中斷和中斷控制器EXTI庫(kù)函數(shù)庫(kù)函數(shù)5.6 外部中斷和中斷控制器外部中斷和中斷控制器外部中斷實(shí)例外部中斷實(shí)例按鍵輸入按鍵輸入實(shí)驗(yàn)?zāi)康?1. 熟練掌握單片機(jī)GPIO輸入輸出的使用。 2.掌握外部中斷的編程步驟。 3.使用外部中斷完成按鍵程序的編寫。5.6 外部中斷和中斷控制器

16、外部中斷和中斷控制器硬件設(shè)計(jì)硬件設(shè)計(jì)硬件連接圖如下,實(shí)驗(yàn)板上stm32f103x處理器GPIOC的GPIO_Pin_2連接KEY,通過配置GPIO實(shí)現(xiàn)如下功能:按下按鍵SW1使LED4熄滅,再次按下時(shí)點(diǎn)亮。5.6 外部中斷和中斷控制器外部中斷和中斷控制器軟件設(shè)計(jì)軟件設(shè)計(jì)步驟一:添加庫(kù)函數(shù),以及操作函數(shù)。添加庫(kù)函數(shù)有:startup/start_stm32f10 x_hd.c;CMSIS/core_cm3.c;system_stm32f10 x.c;FWlib/stm32f10 x_gpio.c;stm32f10 x_rcc.c;stm32f10 x_exti.cFWlib/misc.c。操作函

17、數(shù)有:USER/main.c ;stm32f10 x_it.c ;led.c ;exti.c;EXTI2_IRQHandler()。步驟二:打開system_stm32f10 x.c文件,配置系統(tǒng)時(shí)鐘為72MHZ。步驟三:打開打開led.c文件,使用函數(shù)為L(zhǎng)ED_GPIO_Config()配置PA10;該函數(shù)的實(shí)現(xiàn)步驟如下:5.6 外部中斷和中斷控制器外部中斷和中斷控制器void LED_GPIO_Config(void)GPIO_InitTypeDef GPIO_InitStructure;配置PB14RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB,

18、 ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_SetBits(GPIOB, GPIO_Pin_14); / 關(guān)閉LED4,熄滅步驟四:在led.h函數(shù)中設(shè)置宏定義:#define LED4(a)if (a)GPIO_SetBits(GPIOB,GP

19、IO_Pin_14);滅 else GPIO_ResetBits(GPIOB,GPIO_Pin_14)亮5.6 外部中斷和中斷控制器外部中斷和中斷控制器步驟五:配置外部中斷,打開exti.c文件,在這里我們重點(diǎn)解釋函數(shù)EXTI_PE5_Config()的配置步驟。void EXTI_PC0_Config(void)GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AF IO,ENAB

20、LE); 使能EXTIC線的時(shí)鐘和第二功能 AFIO時(shí)鐘NVIC_Configuration();配置EXTIC線的中斷優(yōu)先級(jí)配置EXTI 中斷線 I/O GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;使用PC2作為外部中斷線 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; /上拉輸入 GPIO_Init(GPIOC, &GPIO_InitStructure);GPIO初始化GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource2); GPIOC外部

21、中斷進(jìn)行初始化選定要配置為 EXTI的 I/O口線和 I/O口的工作模式 EXTI_InitStructure.EXTI_Line = EXTI_Line2;2號(hào)中斷線 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;中斷模式 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; /下降沿中斷 EXTI_InitStructure.EXTI_LineCmd = ENABLE;使能中斷 EXTI_Init(&EXTI_InitStructure); 初始化5.6 外部中斷和中斷控制器外部中斷和中斷控制器步驟六:配置嵌套向量中斷控制器 NVIC,在步驟三中已調(diào)用了函數(shù)NVIC_Configuration();NVIC配置步驟:static void NVIC_Configuration(void) NVIC_InitTypeDef NVIC_InitStructure;定義結(jié)構(gòu)體 NVIC_PriorityGroupConfig(NVIC_Priority

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論