打印

GD32的外部中断配置

[复制链接]
2918|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sunmeat|  楼主 | 2015-3-16 14:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一.配置中断
void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  /* Set the Vector Table base location at 0x08004000
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x4000);     // 1.分配中断向量表
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);      //设置中断优先级
  /* Enable the EXTI1 Interrupt
  NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQChannel; // 中断通道
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 指定抢占式优先级别1
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;    //次优先级为0
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;      //通道中断使能
  NVIC_Init(&NVIC_InitStructure);                  //初始化中断
}


沙发
sunmeat|  楼主 | 2015-3-16 15:02 | 只看该作者
注意:
如果外部中断针脚是PA1,PB1,PC1,PD1 那么中断就要用EXTI1。
如果我们配置的外部针脚为PA4,或PB4,或PC4,PD4等,那么采用的外部中断也必须是EXTI4;
因为GPIO和中断线的对应如下:

使用特权

评论回复
板凳
sunmeat|  楼主 | 2015-3-16 15:03 | 只看该作者
二.配置GPIO针脚
void GPIO_Configuration(void)
{
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;       //选择IO针脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //配置中断脚,配置为浮空输入
GPIO_Init(GPIOA,   &GPIO_InitStructure);  //初始化针脚
}

注意:如果的针脚是端口的1号针脚,配置的中断一定是EXTI1.

使用特权

评论回复
地板
sunmeat|  楼主 | 2015-3-16 15:04 | 只看该作者
三.配置EXIT线,使中断线和IO管脚连接在一起
void EXIT1_Configuration(void)
{
  EXTI_InitTypeDef EXTI_InitStructure;
//Connect EXTI Line1 to PB.01
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1); //将EXTI线1连接到端口GPIOD的第1个针脚上
// Configure Key Button EXTI Line to generate an interrupt on both rising and falling edge  
EXTI_InitStructure.EXTI_Line = EXTI_Line1; //注意:如果配置的1号针脚,那么必须是EXTI_Line1
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; //下降沿和上升沿都触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);    //初始化中断
}

使用特权

评论回复
5
sunmeat|  楼主 | 2015-3-16 15:05 | 只看该作者
四:编写中断处理函数
void EXTI1_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line1) != RESET)
  {
    // Clear the EXTI line 9 pending bit
    EXTI_ClearITPendingBit(EXTI_Line1);
     _485_Baud_Check() ;              //调用处理函数
  }
}

使用特权

评论回复
6
sunmeat|  楼主 | 2015-3-16 15:08 | 只看该作者
/***********************
总感觉这个版本的有问题,因为没有开时钟
***********************/

使用特权

评论回复
7
clvert| | 2016-12-5 11:06 | 只看该作者
设置外部中断源时必须是来了个AFIO功能,否则中断得不到响应

使用特权

评论回复
8
comeon201208| | 2016-12-7 22:45 | 只看该作者
这个相应GPIO口的外部配置的,需要在硬件设计的时候注意

使用特权

评论回复
9
comeon201208| | 2016-12-7 22:46 | 只看该作者
这中断是按照组来设置的,,所以PIN1脚的只能选择一个作为中断的响应管脚的

使用特权

评论回复
10
vibra2016| | 2016-12-11 21:17 | 只看该作者
sunmeat 发表于 2015-3-16 15:02
注意:
如果外部中断针脚是PA1,PB1,PC1,PD1 那么中断就要用EXTI1。
如果我们配置的外部针脚为PA4,或PB4 ...

这个终端设置的,在实际的设计中要注意的,一组中断中不能同时响应两个1管脚的

使用特权

评论回复
评论
碎花长裙 2023-1-11 10:22 回复TA
你好,请教一下,GD32管脚PA8和PD8配置到外部中断线line8,结果,PD8可以触发中断,PA8触发不了中断,并且不是同时触发的,请问可能是什么原因呢?从示波器和GPIOA寄存器的仿真结果来看,PA8确实产生了中断信号,但是没有触发中断外部中断线9-5的中断 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

208

主题

2132

帖子

13

粉丝