打印
[STM32F1]

【转】GPIO外部中断的使用

[复制链接]
650|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TXQDM|  楼主 | 2016-12-29 12:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 TXQDM 于 2016-12-29 12:13 编辑

源起:项目中需要使用统一的时间触发信号使得采样时间同步,因此需要某一个管脚来进行触发。
硬件情况:采用PA11管脚
需要明确的是,PxN管脚共用外部中断线EXTIN和外部中断向量EXTIN_IRQn和中断服务程序入口EXTIN_IRQHandler,但是需要注意的是[9...5]共用EXTI9_5_IRQn和EXTI9_5_IRQHandler、[15...10]共用EXTI15_10_IRQn和EXTI15_10_IRQHandler
基本过程:
1、设置时钟
[size=1em]
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);




 注意需要打开AFIO时钟
2、配置GPIO
[size=1em]
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);




采用模拟输入方式
3、将GPIO管脚与外部中断线连接
[size=1em]
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource11);




  相当重要
4、配置EXTI
EXTI_InitStructure.EXTI_Line = EXTI_Line11;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);
包括触发方式等等
6、配置NVIC
[size=1em]
NVIC_InitTypeDef NVIC_InitStructure;   

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);


NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //PPP外部中断线

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);




7、写中断服务程序
[size=1em]
void EXTI15_10_IRQHandler(void)

{

    if (EXTI_GetITStatus(EXTI_Line11) != RESET)

    {

        EXTI_ClearITPendingBit(EXTI_Line11); //清除标志

        ...

    }

}





沙发
lt1231| | 2016-12-29 19:51 | 只看该作者
外部中断还是很简单配置的,但重要的是理解好STM32几个IO口共用的中断口,要搞清楚这个。

使用特权

评论回复
板凳
TXQDM|  楼主 | 2016-12-30 12:13 | 只看该作者
lt1231 发表于 2016-12-29 19:51
外部中断还是很简单配置的,但重要的是理解好STM32几个IO口共用的中断口,要搞清楚这个。 ...

中断内部在进行判断就可以了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

110

主题

593

帖子

11

粉丝