1. 程式人生 > >外部中斷0(含知識點)

外部中斷0(含知識點)

控制 line port img irq 選中 step truct ann

  1 #include "stm32f10x.h"   // 相當於51單片機中的  #include <reg51.h>
  2 #include "stm32f10x_gpio.h"
  3 #include "stm32f10x_exti.h"
  4 #include "misc.h"
  5 
  6 /*外部中斷配置*/
  7 
  8 
  9 int main(void)
 10 {
 11     /***************************************************************/
 12     
 13         //EXTI_InitTypeDef定義於stm32f10x_exti.h
14 15 16 /*GPIO配置*/ 17 //step1:使能 18 GPIO_InitTypeDef a; 19 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); 20 //結構體 21 a.GPIO_Speed=GPIO_Speed_50MHz; 22 a.GPIO_Pin=GPIO_Pin_5; 23 //推挽輸出 24 a.GPIO_Mode=GPIO_Mode_Out_PP; 25 //調用GPIO初始化函數 26 GPIO_Init(GPIOB,&a);
27 /***************************************************************/ 28 29 30 /* 31 *外部中斷配置 32 *總結: 33 *1、定義一個結構體 34 *2、四個內容(選擇路線、線路模式、觸發方式、使能) 35 *3、調用一個函數 36 */ 37 EXTI_InitTypeDef c; 38 /* 39 *選擇了待使能或失能的外部路線(0——18可選) 40 */ 41 c.EXTI_Line=EXTI_Line0;//
外部路線0 42 /* 43 *設置了被使能線路的模式 44 *設置為事件:EXTI_Mode_Event 45 *設置為中斷:EXTI_Mode_Interrupt 46 */ 47 c.EXTI_Mode=EXTI_Mode_Interrupt;//中斷模式 48 /* 49 設置了被使能線路的觸發邊沿 50 EXTI_Trigger_Falling下降沿為中斷請求 51 EXTI_Trigger_Rising 上升沿為中斷請求 52 EXTI_Trigger_Rising_Falling上升沿和下降沿為中斷請求 53 */ 54 c.EXTI_Trigger=EXTI_Trigger_Rising;//上升沿為中斷請求 55 /* 56 *用來定義選中線路的新狀態 57 *它可以被設為ENABLE或者DISABLE 58 */ 59 c.EXTI_LineCmd=ENABLE;//使能 60 /*外部中斷初始化函數 61 *功能:根據EXTI_InitStruct中指定的參數初始化外設EXTI寄存器。 62 *指向結構體EXTI_InitTypeDef的指針 63 */ 64 EXTI_Init(&c);//指向結構體EXTI_InitTypeDef的指針a 65 /***************************************************************************/ 66 /*NVIC嵌套向量中斷控制器*/ 67 /* 68 *1 69 *優先級分組:先占優先級和重優先級 70 *輸入參數: 71 *NVIC_PriorityGroup_0 72 *NVIC_PriorityGroup_1 73 *NVIC_PriorityGroup_2 74 *NVIC_PriorityGroup_3 75 *NVIC_PriorityGroup_4 76 */ 77 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); 78 /* 79 *2、NVIC初始化結構體 80 */ 81 NVIC_InitTypeDef b; 82 /* 83 *中斷源 84 *用於使能或者失能指定的IRQ通道 85 *參數: 86 *(詳細參數請看最後截圖一..............) 87 */ 88 b.NVIC_IRQChannel = EXTI0_IRQn;//EXTI0_IRQn外部中斷線0中斷 89 //搶占優先級 90 /* 91 *該參數設置成員NVIC_IRQChannel中的搶占優先級 92 *(詳細參數請看最後截圖二..............) 93 */ 94 b.NVIC_IRQChannelPreemptionPriority = 1;//0 1 2 3 4 95 //子優先級 96 /* 97 *該參數設置成員NVIC_IRQChannel中的從占優先級 98 *(詳細參數請看最後截圖二..............) 99 */ 100 b.NVIC_IRQChannelSubPriority = 1;//0 1 2 3 4 101 //使能 102 /* 103 *指定了在成員NVIC_IRQChannel中定義的IRQ通道被使能還是失能 104 *參數:ENABLE或者DISABLE 105 */ 106 b.NVIC_IRQChannelCmd = ENABLE; 107 108 /* 109 *3、NVIC初始化函數 110 *功能:根據NVIC_InitStruct中指定的參數初始化外設NVIC寄存器。 111 */ 112 NVIC_Init(&b); 113 /**********************************************************************/ 114 115 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);//選擇GPIO管腳用作外部中斷線路 116 117 } 118 void EXTI0_IRQHandler(void) 119 { 120 //確保是否產生EXTI line中斷 121 if(EXTI_GetITStatus(EXTI_Line0)!=RESET) // 檢查指定的EXTI線路觸發請求發生與否 122 { 123 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==0)// 124 { 125 GPIO_SetBits(GPIOB,GPIO_Pin_5); 126 } 127 else 128 { 129 GPIO_ResetBits(GPIOB,GPIO_Pin_5); 130 } 131 EXTI_ClearITPendingBit(EXTI_Line0); 132 } 133 134 }

技術分享

技術分享

外部中斷0(含知識點)