4.把相應(yīng)的IO口設(shè)置為中斷線路
由于GPIO并不是專用的中斷引腳,因此在用GPIO來(lái)觸發(fā)外部中斷的時(shí)候需要設(shè)置將GPIO相應(yīng)的引腳和中斷線連接起來(lái),具體代碼如下:
- void EXTI_cfg()
- {
- EXTI_InitTypeDef EXTI_InitStructure;
- //清空中斷標(biāo)志
- EXTI_ClearITPendingBit(EXTI_Line2);
- EXTI_ClearITPendingBit(EXTI_Line3);
- EXTI_ClearITPendingBit(EXTI_Line5);
- //選擇中斷管腳PC.2 PC.3 PC.5
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource2);
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource3);
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5);
- EXTI_InitStructure.EXTI_Line = EXTI_Line2 | EXTI_Line3 | EXTI_Line5; //選擇中斷線路2 3 5
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //設(shè)置為中斷請(qǐng)求,非事件請(qǐng)求
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; //設(shè)置中斷觸發(fā)方式為上下降沿觸發(fā)
- EXTI_InitStructure.EXTI_LineCmd = ENABLE; //外部中斷使能
- EXTI_Init(&EXTI_InitStructure);
- }
復(fù)制代碼
EXTI_cfg中需要調(diào)用到的函數(shù)都在stm32f10x_exti.c。
5.寫(xiě)中斷響應(yīng)函數(shù)
STM32不像C51單片機(jī)那樣,可以用過(guò)interrupt關(guān)鍵字來(lái)定義中斷響應(yīng)函數(shù),STM32的中斷響應(yīng)函數(shù)接口存在中斷向量表中,是由啟動(dòng)代碼給出的。默認(rèn)的中斷響應(yīng)函數(shù)在stm32f10x_it.c中。因此我們需要把這個(gè)文件加入到工程中來(lái)。
在這個(gè)文件中,我們發(fā)現(xiàn),很多函數(shù)都是只有一個(gè)函數(shù)名,并沒(méi)有函數(shù)體。我們找到EXTI2_IRQHandler()這個(gè)函數(shù),這就是EXTI2中斷響應(yīng)的函數(shù)。我的目標(biāo)是將LED燈點(diǎn)亮,所以函數(shù)體其實(shí)很簡(jiǎn)單:
- void EXTI2_IRQHandler(void)
- {
- //點(diǎn)亮LED燈
- GPIO_SetBits(GPIOD,GPIO_Pin_6);
- //清空中斷標(biāo)志位,防止持續(xù)進(jìn)入中斷
- EXTI_ClearITPendingBit(EXTI_Line2);
- }
- void EXTI3_IRQHandler(void)
- {
- GPIO_SetBits(GPIOD,GPIO_Pin_3);
- EXTI_ClearITPendingBit(EXTI_Line3);
- }
- void EXTI9_5_IRQHandler(void)
- {
- GPIO_SetBits(GPIOB,GPIO_Pin_5);
- EXTI_ClearITPendingBit(EXTI_Line5);
- }
復(fù)制代碼
由于EXTI5-9是共用一個(gè)中斷響應(yīng)函數(shù),因此所有的EXTI5 – EXTI9的響應(yīng)函數(shù)都寫(xiě)在這個(gè)里面。
6.寫(xiě)主函數(shù)
- #include "stm32f10x_lib.h"
- void RCC_cfg();
- void IO_cfg();
- void EXTI_cfg();
- void NVIC_cfg();
- int main()
- {
- RCC_cfg();
- IO_cfg();
- NVIC_cfg();
- EXTI_cfg();
- while(1);
- }
復(fù)制代碼
main函數(shù)前是函數(shù)聲明,main函數(shù)函數(shù)體中都是調(diào)用初始化配置函數(shù),然后進(jìn)入死循環(huán),等待中斷響應(yīng)。
以上就是STM32外部中斷的介紹,功能可以不用管,知道該配置哪些東西就夠了。ok,基礎(chǔ)知識(shí)學(xué)習(xí)完了吧!那么就可以買(mǎi)個(gè)具體模塊來(lái)試試了。這里用的是四路數(shù)字觸摸感應(yīng)傳感器模塊。
下面是該模塊的簡(jiǎn)要描述:
一、模塊描述
該傳感器模塊是四路觸摸感應(yīng)模塊,基于TTP224芯片。通過(guò)觸摸數(shù)字(1、2、3、4),可以起到控制外圍硬件電路的作用。手按數(shù)字開(kāi)關(guān),對(duì)應(yīng)的燈(D1、D2、D3、D4)會(huì)亮,對(duì)應(yīng)的四個(gè)輸出口(OUT1、OUT2、OUT3、OUT4)中的一個(gè)會(huì)輸出高電平。
模塊參數(shù):
1、板載TTP224電容式4鍵觸摸感應(yīng)IC
2、板載4路電平狀態(tài)指示燈
3、工作電壓:2.4V-5.5V
4、模塊可以設(shè)置輸出模式、鍵輸出模式、最長(zhǎng)輸出時(shí)間和快速/低功耗選擇
5、PCB板子尺寸:35(mm)x29(mm)
二、硬件調(diào)試
(1) 硬件實(shí)物圖展示如下圖:
1.png (112.49 KB, 下載次數(shù): 45)
下載附件
2018-1-16 21:13 上傳
(2) 模塊原理圖接口展示如圖:
2.png (15.31 KB, 下載次數(shù): 43)
下載附件
2018-1-16 21:13 上傳
(3) 管腳實(shí)際連接表
單片機(jī)---->kepler11---->傳感器模塊,連接表
三、軟件調(diào)試
本工程實(shí)現(xiàn)的功能是通過(guò)觸摸傳感器模塊中的數(shù)字觸發(fā)引腳的外部中斷,從而控制核心板上LED燈閃爍以及K11開(kāi)發(fā)板上的繼電器。本案例基于光輪電子公司TreeOS軟件開(kāi)發(fā)架構(gòu)運(yùn)行,具體軟件工程還請(qǐng)關(guān)注光輪電子公司TreeOS驅(qū)動(dòng)庫(kù)文件。
以下是工程圖:
3.png (22.58 KB, 下載次數(shù): 43)
下載附件
2018-1-16 21:13 上傳