GD32的外部中断配置

[复制链接]
3500|10
 楼主| sunmeat 发表于 2015-3-16 14:59 | 显示全部楼层 |阅读模式
一.配置中断
  1. void NVIC_Configuration(void)
  2. {
  3.   NVIC_InitTypeDef NVIC_InitStructure;
  4.   /* Set the Vector Table base location at 0x08004000
  5.   NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x4000);     // 1.分配中断向量表
  6.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);      //设置中断优先级
  7.   /* Enable the EXTI1 Interrupt
  8.   NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQChannel; // 中断通道
  9.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 指定抢占式优先级别1
  10.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;    //次优先级为0
  11.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;      //通道中断使能
  12.   NVIC_Init(&NVIC_InitStructure);                  //初始化中断
  13. }


 楼主| sunmeat 发表于 2015-3-16 15:02 | 显示全部楼层
注意:
如果外部中断针脚是PA1,PB1,PC1,PD1 那么中断就要用EXTI1。
如果我们配置的外部针脚为PA4,或PB4,或PC4,PD4等,那么采用的外部中断也必须是EXTI4;
因为GPIO和中断线的对应如下:
QQ截图20150316150150.png
QQ截图20150316150201.png
 楼主| sunmeat 发表于 2015-3-16 15:03 | 显示全部楼层
二.配置GPIO针脚
  1. void GPIO_Configuration(void)
  2. {
  3. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;       //选择IO针脚
  4. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //配置中断脚,配置为浮空输入
  5. GPIO_Init(GPIOA,   &GPIO_InitStructure);  //初始化针脚
  6. }

注意:如果的针脚是端口的1号针脚,配置的中断一定是EXTI1.
 楼主| sunmeat 发表于 2015-3-16 15:04 | 显示全部楼层
三.配置EXIT线,使中断线和IO管脚连接在一起
  1. void EXIT1_Configuration(void)
  2. {
  3.   EXTI_InitTypeDef EXTI_InitStructure;
  4. //Connect EXTI Line1 to PB.01
  5. GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1); //将EXTI线1连接到端口GPIOD的第1个针脚上
  6. // Configure Key Button EXTI Line to generate an interrupt on both rising and falling edge  
  7. EXTI_InitStructure.EXTI_Line = EXTI_Line1; //注意:如果配置的1号针脚,那么必须是EXTI_Line1
  8. EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  9. EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; //下降沿和上升沿都触发
  10. EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  11. EXTI_Init(&EXTI_InitStructure);    //初始化中断
  12. }
 楼主| sunmeat 发表于 2015-3-16 15:05 | 显示全部楼层
四:编写中断处理函数
  1. void EXTI1_IRQHandler(void)
  2. {
  3.   if(EXTI_GetITStatus(EXTI_Line1) != RESET)
  4.   {
  5.     // Clear the EXTI line 9 pending bit
  6.     EXTI_ClearITPendingBit(EXTI_Line1);
  7.      _485_Baud_Check() ;              //调用处理函数
  8.   }
  9. }
 楼主| sunmeat 发表于 2015-3-16 15:08 | 显示全部楼层
/***********************
总感觉这个版本的有问题,因为没有开时钟
***********************/
clvert 发表于 2016-12-5 11:06 | 显示全部楼层
设置外部中断源时必须是来了个AFIO功能,否则中断得不到响应
comeon201208 发表于 2016-12-7 22:45 | 显示全部楼层
这个相应GPIO口的外部配置的,需要在硬件设计的时候注意
comeon201208 发表于 2016-12-7 22:46 | 显示全部楼层
这中断是按照组来设置的,,所以PIN1脚的只能选择一个作为中断的响应管脚的
vibra2016 发表于 2016-12-11 21:17 | 显示全部楼层
sunmeat 发表于 2015-3-16 15:02
注意:
如果外部中断针脚是PA1,PB1,PC1,PD1 那么中断就要用EXTI1。
如果我们配置的外部针脚为PA4,或PB4 ...

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

评论

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

本版积分规则

208

主题

2132

帖子

13

粉丝
快速回复 在线客服 返回列表 返回顶部