b) 初始化函数界说:
void EXTI_Configuration(void); //界说IO中止初始化函数
c) 初始化函数调用:
EXTI_Configuration();//IO中止初始化函数调用简略运用:
d) 初始化函数:
void EXTI_Configuration(void)
{
EXTI_InitTypeDef EXTI_InitStructure; //EXTI初始化结构界说
EXTI_ClearITPendingBit(EXTI_LINE_KEY_BUTTON);//铲除中止标志
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource3);//管脚挑选
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource4);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource5);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource6);
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//工作挑选
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//触发形式
EXTI_InitStructure.EXTI_Line = EXTI_Line3 | EXTI_Line4; //线路挑选
EXTI_InitStructure.EXTI_LineCmd = ENABLE;//发动中止
EXTI_Init(&EXTI_InitStructure);//初始化
}
e) RCC初始化函数中敞开I/O时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
GPIO初始化函数中界说输入I/O管脚。
//IO输入,GPIOA的4脚输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化
f) 在NVIC的初始化函数里边添加以下代码翻开相关中止:
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel; //通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//占先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //呼应级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //发动
NVIC_Init(&NVIC_InitStructure); //初始化
g) 在stm32f10x_it.c文件中找到void USART1_IRQHandler函数,在其间添入履行代码。一般最少三个过程:先运用if句子判别是产生那个中止,然后铲除中止标志位,最终给字符串赋值,或做其他工作。
if(EXTI_GetITStatus(EXTI_Line3) != RESET) //判别中止产生来历
{ EXTI_ClearITPendingBit(EXTI_Line3); //铲除中止标志
USART_SendData(USART1, 0x41); //发送字符“a”
GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_2)));//LED产生明暗替换
}
h) 中止注意事项:
中止产生后有必要铲除中止位,不然会呈现死循环不断产生这个中止。然后需要对中止类型进行判别再履行代码。
运用EXTI的I/O中止,在完结RCC与GPIO硬件设置之后需要做三件事:初始化EXTI、NVIC开中止、编写中止履行代码。