当前位置:首页 > 单片机 > 单片机
[导读]经过了两天,终于差不多能看懂32的中断了,由于是用的库函数操作的,所以有些内部知识并没有求甚解,只是理解知道是这样的。但对于要做简单开发的我来说这些已经够了。我学习喜欢从一个例程来看,下面的程序是我粘贴

经过了两天,终于差不多能看懂32的中断了,由于是用的库函数操作的,所以有些内部知识并没有求甚解,只是理解知道是这样的。但对于要做简单开发的我来说这些已经够了。


我学习喜欢从一个例程来看,下面的程序是我粘贴但是改编的,大部分都做了注释。

主要是感谢这位博主的文章:http://www.cnblogs.com/chineseboy/archive/2013/03/14/2956782.html

其实主要步骤就是:

1、将GPIO口配置成中断输入模式。

void Init_LED(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定义一个GPIO结构体变量

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOG, ENABLE);
//使能各个端口时钟,
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;//板上LED编号 D2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOG, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;//板上LED编号 D5
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}

2、这个例程是做的按键,就是你要哪个地方产生中断,然后将其所在的总线配置成中断源,然后照猫画虎,填写中断结构体成员,就是配置外部事件的模式、触发条件、使能外部触发,

但是别忘了打开复用功能(现在我还不理解)

void Init_TI_KEY(void)
{

EXTI_InitTypeDef EXTI_InitStructure;//定义一个EXTI结构体变量

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能IO复用功能,使用中断功能重要!!!

/* 引脚选择 */
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);//配置端口C的13引脚为中断源重要!! 板上标号INT2
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource0); //配置端口E的0引脚为中断源重要!! 板上标号INT1


/* 设置外部中断结构体的成员*/
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断模式为中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发
EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line13;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能中断线
EXTI_Init(&EXTI_InitStructure);//根据参数初始化中断寄存器
}

3、现在就该配置中断了。也即是配置中断分组,以及中断优先级。

不说了,直接上程序,看注释。

void Init_NVIC(void)
{
NVIC_InitTypeDef NVIC_InitStructure;

//#ifdef VECT_TAB_RAM //向量表基地址选择

//NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); //将0x20000000地址作为向量表基地址(RAM)
//#else

//NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); //将0x08000000地址作为向量表基地址(FLASH)
//#endif

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组2

NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;//设定中断源为PC13
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//中断占优先级为2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//副优先级为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断
NVIC_Init(&NVIC_InitStructure);//根据参数初始化中断寄存器

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//设定中断源为PE0
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//中断占优先级为1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//副优先级为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断
NVIC_Init(&NVIC_InitStructure);//根据参数初始化中断寄存器
}

4、最后一步了,也是很重要的一步,配置中断服务函数,也有叫什么入口函数的。说白了,就是你想让你的这个中断做什么。

/*************************************************************
注意,中断服务程序虽然简单,但是在写入口函数的时候,注意函数名的写法,只有如下3种命名方式。
(1)EXTI0_IRQHandler;EXTI Line 0
EXTI1_IRQHandler;EXTI Line 1
EXTI2_IRQHandler;EXTI Line 2
EXTI3_IRQHandler;EXTI Line 3
EXTI4_IRQHandler;EXTI Line 4
(2)
EXTI9_5_IRQHandler;EXTI Line 5-9
(3)
EXTI15_10_IRQHandler;EXTI Line 10-15

只要是中断线5后的就不能像前四个那样命名,他们有自己的方式。
************************************************************/
void EXTI15_10_IRQHandler(void) //pc13中断服务程序,也是中断子函数
{
//检测按键之前一般有个消抖延时,直接调用下面的延时函数即可

if(EXTI_GetITStatus(EXTI_Line13)!= RESET) //判断是否发生中断,发生则中断标志置1
{
//LED1=0;

//LED2=1;

GPIO_ResetBits(GPIOG, GPIO_Pin_14); //GPIOG设置为低电平,
GPIO_SetBits(GPIOD, GPIO_Pin_13); //GPIOD设置为高电平,其实这一部分也是可以写在主函数中的,在while那个死循环中。

}

EXTI_ClearITPendingBit(EXTI_Line13);//利用库函数清除中断标志位,进入中断服务程序之后。首先就是清除标志位,
} //否则他会不响应中断,不进入中断函数

好了,基本上就是这些了,希望对像我这样的初学者有一定的帮助。终于可以说一句,其实32也不是很难。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭