當(dāng)前位置:首頁(yè) > 電源 > 電源-LED驅(qū)動(dòng)
[導(dǎo)讀]說(shuō)明:對(duì)于STM32來(lái)說(shuō),其中斷種類眾多。(除了外部中斷還有內(nèi)部異常)其每個(gè)GPIO端口的引腳都可以作為外部中斷的中斷源。 對(duì)其的設(shè)置也比C51要復(fù)雜的多。對(duì)于具體的使用來(lái)說(shuō)可

說(shuō)明:對(duì)于STM32來(lái)說(shuō),其中斷種類眾多。(除了外部中斷還有內(nèi)部異常)其每個(gè)GPIO端口的引腳都可以作為外部中斷的中斷源。 對(duì)其的設(shè)置也比C51要復(fù)雜的多。對(duì)于具體的使用來(lái)說(shuō)可以總結(jié)為以下步驟:

1.初始化作為外部中斷源的GPIO口。和普通的GPIO的設(shè)置類似,不過(guò)由于是使用GPIO引腳作為中斷源,所以還需要開(kāi)啟復(fù)用時(shí)鐘。

2..配置中斷控制器 NVIC。由于有很多的中斷,所以STM32用NVIC來(lái)控制操作各種中斷。配置NVIC主要是配置一些中斷源,中斷的優(yōu)先級(jí)(包括搶占優(yōu)先級(jí)和相應(yīng)優(yōu)先級(jí))還有設(shè)置使能中斷(類似于C51中開(kāi)啟總開(kāi)關(guān))。

3..配置中斷線EXIT線,是中斷線和IO管腳聯(lián)系在一起。這個(gè)過(guò)程主要是配置中斷線,包括設(shè)置中斷的觸發(fā)方式、中斷請(qǐng)求模式還有使能中斷線(相當(dāng)于C51中的開(kāi)啟小開(kāi)關(guān))。

4.編寫對(duì)應(yīng)的中斷服務(wù)函數(shù)。對(duì)于中斷服務(wù)函數(shù)的書寫基本上和普通的函數(shù)差不多,只不過(guò)沒(méi)有參數(shù)和返回值。還有一點(diǎn)特別的是,中斷函數(shù)名不能隨意起,系統(tǒng)已經(jīng)固定好了。

1

2

3

4

5

本實(shí)驗(yàn)是配置了八個(gè)外部中斷,用來(lái)按鍵控制點(diǎn)亮八個(gè)LED燈的

*/

中斷部分主要代碼:

//外部中斷配置

void NVIC_ConfiguraTIon(void)

{

int i = 0;

uint8_t temp_EXTI_IRQn = EXTI0_IRQn; //初始值賦值為中斷源0

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //配置優(yōu)先級(jí)組

//配置中斷源0,1,2,3

for(i = 0;i<4;++i)

{

NVIC_InitStructure.NVIC_IRQChannel = temp_EXTI_IRQn++; ///配置中斷通道

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//搶占優(yōu)先級(jí) 0

NVIC_InitStructure.NVIC_IRQChannelSubPriority = i;//響應(yīng)優(yōu)先級(jí)

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//中斷使能

NVIC_Init(&NVIC_InitStructure);

}

//配置中斷源4

NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn; ///配置中斷通道

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//搶占優(yōu)先級(jí) 1

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//響應(yīng)優(yōu)先級(jí) 0

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//中斷使能

NVIC_Init(&NVIC_InitStructure);

//配置中斷源5~10

NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; ///配置中斷通道

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//搶占優(yōu)先級(jí) 1

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//響應(yīng)優(yōu)先級(jí) 1

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//中斷使能

NVIC_Init(&NVIC_InitStructure);

}

//配置中斷的GPIO口

void KEY_GPIO_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure; //GPIO 結(jié)構(gòu)體

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);

//打開(kāi) GPIOA 和 GPIOA的復(fù)用時(shí)鐘

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//最大輸出速率 50MHz

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; //上拉拉輸入

GPIO_InitStructure.GPIO_Pin = ALL_EXIT_KEY_PIN;//選擇引腳 0

GPIO_Init(EXIT_KEY_PORT, &GPIO_InitStructure);//GPIOA 為配置對(duì)象

}

//配置EXTI線,使中斷線和IO管腳連接在一起

void EXTI_PA_Config(void)// 配置相應(yīng) IO 口中斷線

{

EXTI_InitTypeDef EXTI_InitStructure; //中斷線結(jié)構(gòu)體

int i = 0;

uint32_t temp_EXTI_Line = EXTI_Line0; //初始化為1,即外部中斷線0

uint8_t temp_GPIO_PinSource = GPIO_PinSource0; //初始化中斷源為0

//配置0~7個(gè)中斷線 //???不知能不能像GPIO那樣一起設(shè)置???///

for(i = 0;i<8;++i)

{

EXTI_ClearITPendingBit(temp_EXTI_Line);//清空中斷標(biāo)志

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, temp_GPIO_PinSource); //GPIOA 中斷

//配置中斷線的相關(guān)屬性

EXTI_InitStructure.EXTI_Line = temp_EXTI_Line; //中斷線 0

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中斷請(qǐng)求模式

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //中斷觸發(fā)方式為下降沿觸發(fā)

EXTI_InitStructure.EXTI_LineCmd = ENABLE; //外部中斷使能

EXTI_Init(&EXTI_InitStructure);

//改變中斷源或中斷線

temp_EXTI_Line = temp_EXTI_Line<<1;

temp_GPIO_PinSource++;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

中斷函數(shù)部分:

//EXTI0中斷服務(wù)函數(shù)

void EXTI0_IRQHandler(void)

{

if(EXTI_GetFlagStatus(EXTI_Line0) != RESET)

{

//GPIO_WriteBit(LED_PORT, GPIO_Pin_0,(BitAction)((1-GPIO_ReadOutputDataBit(LED_PORT, GPIO_Pin_0))));

if(GPIO_ReadOutputDataBit(LED_PORT,GPIO_Pin_8) == SET)

GPIO_ResetBits(LED_PORT, GPIO_Pin_8);

else

GPIO_SetBits(LED_PORT, GPIO_Pin_8);

EXTI_ClearITPendingBit(EXTI_Line0); //清楚中斷位標(biāo)志

}

}

//EXTI1中斷服務(wù)函數(shù)

void EXTI1_IRQHandler(void)

{

if(EXTI_GetFlagStatus(EXTI_Line1) != RESET)

{

//GPIO_WriteBit(LED_PORT, GPIO_Pin_0,(BitAction)((1-GPIO_ReadOutputDataBit(LED_PORT, GPIO_Pin_0))));

if(GPIO_ReadOutputDataBit(LED_PORT,GPIO_Pin_9) == SET)

GPIO_ResetBits(LED_PORT, GPIO_Pin_9);

else

GPIO_SetBits(LED_PORT, GPIO_Pin_9);

EXTI_ClearITPendingBit(EXTI_Line1); //清楚中斷位標(biāo)志

}

}

//EXTI2中斷服務(wù)函數(shù)

void EXTI2_IRQHandler(void)

{

if(EXTI_GetFlagStatus(EXTI_Line2) != RESET)

{

//GPIO_WriteBit(LED_PORT, GPIO_Pin_0,(BitAction)((1-GPIO_ReadOutputDataBit(LED_PORT, GPIO_Pin_0))));

if(GPIO_ReadOutputDataBit(LED_PORT,GPIO_Pin_10) == SET)

GPIO_ResetBits(LED_PORT, GPIO_Pin_10);

else

GPIO_SetBits(LED_PORT, GPIO_Pin_10);

EXTI_ClearITPendingBit(EXTI_Line2); //清楚中斷位標(biāo)志

}

}

//EXTI3中斷服務(wù)函數(shù)

void EXTI3_IRQHandler(void)

{

if(EXTI_GetFlagStatus(EXTI_Line3) != RESET)

{

//GPIO_WriteBit(LED_PORT, GPIO_Pin_0,(BitAction)((1-GPIO_ReadOutputDataBit(LED_PORT, GPIO_Pin_0))));

if(GPIO_ReadOutputDataBit(LED_PORT,GPIO_Pin_11) == SET)

GPIO_ResetBits(LED_PORT, GPIO_Pin_11);

else

GPIO_SetBits(LED_PORT, GPIO_Pin_11);

EXTI_ClearITPendingBit(EXTI_Line3); //清楚中斷位標(biāo)志

}

}

//EXTI4中斷服務(wù)函數(shù)

void EXTI4_IRQHandler(void)

{

if(EXTI_GetFlagStatus(EXTI_Line4) != RESET)

{

//GPIO_WriteBit(LED_PORT, GPIO_Pin_0,(BitAction)((1-GPIO_ReadOutputDataBit(LED_PORT, GPIO_Pin_0))));

if(GPIO_ReadOutputDataBit(LED_PORT,GPIO_Pin_12) == SET)

GPIO_ResetBits(LED_PORT, GPIO_Pin_12);

else

GPIO_SetBits(LED_PORT, GPIO_Pin_12);

EXTI_ClearITPendingBit(EXTI_Line4); //清楚中斷位標(biāo)志

}

}

void EXTI9_5_IRQHandler()

{

int i = 5;

uint32_t temp_EXIT_Line = EXTI_Line5; //初始化為中斷線5

uint16_t temp_GPIO_Pin = GPIO_Pin_13; //初始化為第13個(gè)引腳

for(i = 5;i <= 7;++i)

{

if(EXTI_GetFlagStatus(temp_EXIT_Line) != RESET)

{

if(GPIO_ReadOutputDataBit(LED_PORT,temp_GPIO_Pin) == SET)

GPIO_ResetBits(LED_PORT,temp_GPIO_Pin);

else

GPIO_SetBits(LED_PORT, temp_GPIO_Pin);

EXTI_ClearITPendingBit(temp_EXIT_Line); //清中斷位標(biāo)志

}

//改變中斷線和輸出引腳

temp_EXIT_Line = temp_EXIT_Line<<1;

temp_GPIO_Pin = temp_GPIO_Pin<<1;

}

}

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉