<meta name="keywords" content="庄家克星时时彩,STM32GPIO外部中止总结" />
检查: 2640|回复: 0
打印 上一主题 下一主题

STM32GPIO外部中止总结 [复制链接]

xyd2018 (离线)
积分
1499
帖子
300
跳转到指定楼层
楼主
揭晓于 2019-3-13 10:37:34 |只看该作者 |倒序浏览
1
STM32中止分组

STM32 的每个GPIO都能装备成一个外部中止触泉源,这点也是 STM32 的强年夜的地方。STM32 经由历程凭证引脚的序号不合将浩荡中止触泉源分红不合的组,好比:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16 组,STM32 划定,每组中同时只能有一其中止触泉源使命,那么,最多使命的也就是16个外部中止。STM32F103 的中止控制器支持 19 个外部中止/事宜请求。每其中止设有状态位,每其中止/事宜都有自力的触发和樊篱设置。STM32F103 的19 个外部中止为:

线 0~15:对应外部 IO 口的输入中止。

线 16:毗连到 PVD 输入。

线 17:毗连到 RTC 闹钟事宜。

线 18:毗连到 USB 叫醒事宜。

2
外部中止的装备历程

1.装备触泉源GPIO口

由于GPIO口作为触泉源应用,以是将GPIO口装备成输入形式,触发形式有以下几种:

a.GPIO_Mode_AIN ,模拟输入(ADC模拟输入,或许低功耗下省电)

b.GPIO_Mode_IN_FLOATING ,浮空输入

c.GPIO_Mode_IPD ,带下拉输入

d.GPIO_Mode_IPU ,带上拉输入 

GPIO_InitTypeDef GPIO_InitStructure;//界说结构体

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//使能时钟

GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_2;//选择IO口   PE2

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//设置成上拉输入

GPIO_Init(GPIOE, &GPIO_InitStructure);//应用结构体信息阻拦初始化IO口


2.使能AFIO复用时钟功效

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); 

3.将GPIO口与中止线映照起来

GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);

4.中止线长阻拦中止初始化

EXTI_InitTypeDef EXTI_InitStructure;//界说初始化结构体

EXTI_InitStructure.EXTI_Line=EXTI_Line2; //中止线的标号 取值规模为EXTI_Line0~EXTI_Line15

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中止形式,可选值为中止 EXTI_Mode_Interrupt 和事宜 EXTI_Mode_Event。

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//触发要领,可以是降低沿触发 EXTI_Trigger_Falling,上升沿触发 EXTI_Trigger_Rising,或许随便任性电平(上升沿和降低沿)触发EXTI_Trigger_Rising_Falling

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);//凭证结构体信息阻拦初始化


5.中止优先级装备

NVIC_InitTypeDef NVIC_InitStructure;//界说结构体

NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //使能外部中止所在的通道

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级 2,

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //子优先级 2

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中止通道

NVIC_Init(&NVIC_InitStructure); //凭证结构体信息阻拦优先级初始化

6.外部中止服务函数的编写

外部中止函数划分为:

EXPORT EXTI0_IRQHandler

EXPORT EXTI1_IRQHandler

EXPOR T EXTI2_IRQHandler

EXPORT EXTI3_IRQHandler

EXPORT EXTI4_IRQHandler

EXPORT EXTI9_5_IRQHandler

EXPORT EXTI15_10_IRQHandler

中止线 0-4 每其中止线对应一其中止函数,中止线 5-9 共用中止函数 ,EXTI9_5_IRQHandler,中止线 10-15 共用中止函数 EXTI15_10_IRQHandler。 
void EXTI2_IRQHandler(void)

{

if(EXTI_GetITStatus(EXTI_Line2)!=RESET)//断定某个线上的中止能否发生

{

 中止逻辑…

 EXTI_ClearITPendingBit(EXTI_Line2);   //扫除 LINE 上的中止标志位

   }

}

应用按键阻拦外部中止的时间,浅易都须要阻拦按键延时消抖和松手检测的相关处置赏罚赏罚,中止函数可以参看以下代码:
void EXTI2_IRQHandler(void)

{

 delay_ms(10);//延时消抖

 if(KEY2==0)    //按键真的被按下

  {

   LED0=!LED0;

  }

 while(KEY2!=0);//期待松手

 EXTI_ClearITPendingBit(EXTI_Line2); //清晰中止标志位

}

虽然,假定你的按键是允许长按功效的,那么就阻拦其他逻辑操作,这里不作研究。

信盈达靠手艺打天下
以下课程可收费试听C语言电子PCB、STM32、LinuxFPGA、JAVA、安卓等。
想学习的你和我联系预定便可以收费听课了。
宋工企鹅号:35--24-65--90-88   Tel/WX:173--17--95--19--08


您须要登录后才可以揭晓议论 登录 | 急速注册

关于我们  -  服务条目  -  应用指南  -  站点舆图  -  友谊链接  -  联系我们
庄家克星时时彩-时时彩qq群-时时彩平台推荐 © 版权一切   | 京公网安备110108881021702
回顶部