www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

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

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

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

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

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

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

1

2

3

4

5

本實驗是配置了八個外部中斷,用來按鍵控制點亮八個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)先級組

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

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

{

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

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

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

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

NVIC_Init(&NVIC_InitStructure);

}

//配置中斷源4

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

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

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//響應(yīng)優(yōu)先級 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)先級 1

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//響應(yīng)優(yōu)先級 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);

//打開 GPIOA 和 GPIOA的復(fù)用時鐘

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 為配置對象

}

//配置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個中斷線 //???不知能不能像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; //中斷請求模式

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個引腳

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ā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

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

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

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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