今天学了外部中断以及串口通讯,今天主要说的是外部中断这一块的东西。
首先照例贴一段代码是配置外部中断的代码:
#include<stm32f10x.h>
#include<key.h>
#include<exti.h>
#include<sys.h>
#include<delay.h>
#include<led.h>
void EXTIX_Init(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
KEY_Init();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);
EXTI_InitStructure.EXTI_Line=EXTI_Line4;
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel=EXTI4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;
NVIC_Init(&NVIC_InitStructure);
}
void EXTI4_IRQHandler(void){
delay_ms(10);
if(KEY0==0){
LED0=!LED0;
LED1=!LED1;
}
EXTI_ClearFlag(EXTI_Line4);
}
由于照片传不上来,还是口述吧!
主要是一下七个步骤:
①初始化IO的输入,对于KEY0的输入时上拉输入,由于之前在KEY的实验当中初始化过,所以可以直接拿过来,直接KEY_Init();
②RCC_APB2PeriphClockCmd()再就是对IO口的复用使能,即为AFIO;
③GPIO_EXTILineConfig()是设置IO口与中断线的映射,由于是PE4所以选择中断线4;
④EXTI_Init()初始化外部中断;
⑤NVIC_Init()初始化中断优先级以及NVIC_PriorityGroupConfig()优先级分组(在主函数里面使用);
⑥接下来就是对中断函数的使用,要注意的是,这个函数名称是EXTI4_IRQHandler,要是对于5-9之间公用一个中断函数名称,以及10-15也是如此,主要是由于stm32f1只有7个中断函数,所以有些就需要公用一个中断函数;
⑦EXTI_ClearFlag()这个是在中断函数里面是用,当中断完之后就需要清除标志。
今天学习的并不是很多,主要是学习难度上去了,在加上在总结一些编程,花费了不少时间!不过依然开心,天天学到新的知识,一天就是值得的!