GD32 外部中断翻转IO例程赏析

[复制链接]
3023|16
 楼主| monkeypony 发表于 2015-7-16 11:37 | 显示全部楼层 |阅读模式
对着STM32,终于配置好了,还是很有趣的。工程如下,GD32103E-EVAL实验板开发平台

EXIT-按键.rar (4.11 MB, 下载次数: 67)
 楼主| monkeypony 发表于 2015-7-16 11:38 | 显示全部楼层
PA0的外部中断的初始化
  1. void EXTI_PA0_Config(void)
  2. {
  3.     GPIO_InitPara GPIO_InitStructure;//定义GPIO的配置选项,
  4.     EXTI_InitPara EXTI_InitStructure;//定义EXTI的配置选项

  5.     /* 使能GPIOA和AFIO的时钟                   */
  6.     RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOA |RCC_APB2PERIPH_AF, ENABLE);
  7.                                                                                        
  8.         /* 配置向量中断寄存器,中断的优先级 */
  9.         NVIC_Configuration();

  10.         /* 进行外部中断的占用IO的配置*/       
  11.     GPIO_InitStructure.GPIO_Pin = GPIO_PIN_0;//设置P0口,实际为PA0
  12.     GPIO_InitStructure.GPIO_Mode = GPIO_MODE_IN_FLOATING;//由于按键IO已经硬件上拉,所以设置IO为浮空
  13.     GPIO_Init(GPIOA, &GPIO_InitStructure);

  14. //        /* 外部中断总线的模式设置 */

  15.     GPIO_EXTILineConfig(GPIO_PORT_SOURCE_GPIOA, GPIO_PINSOURCE0);//选择要设置为 EXTI线的端口及引脚,配置为PA0

  16.     EXTI_InitStructure.EXTI_LINE = EXTI_LINE0;//配置为线0,因为PA0连接带了线0,总共为线0-15
  17.     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//配置为外部中断模式,分为中断模式和事件模式
  18.     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  19.     EXTI_InitStructure.EXTI_LINEEnable = ENABLE;
  20.     EXTI_Init(&EXTI_InitStructure);

  21. }
 楼主| monkeypony 发表于 2015-7-16 11:39 | 显示全部楼层
NVIC的初始化和配置
  1. static void NVIC_Configuration(void)
  2. {
  3.     NVIC_InitPara NVIC_InitStructure;

  4.     NVIC_PRIGroup_Enable(NVIC_PRIGROUP_0);//优先级的第0组配置
  5.    
  6.     NVIC_InitStructure.NVIC_IRQ = EXTI0_IRQn;
  7.     NVIC_InitStructure.NVIC_IRQPreemptPriority = 0;
  8.     NVIC_InitStructure.NVIC_IRQSubPriority = 0;
  9.     NVIC_InitStructure.NVIC_IRQEnable = ENABLE;
  10.     NVIC_Init(&NVIC_InitStructure);
  11. }
 楼主| monkeypony 发表于 2015-7-16 11:40 | 显示全部楼层
外部中断函数的编写
  1. //外部中断0的配置
  2. void EXTI0_IRQHandler(void)
  3. {
  4.     if(EXTI_GetIntBitState(EXTI_LINE0) != RESET)//假如外部中断发生
  5.     {
  6.         if(GPIO_ReadOutputBit(GPIOF,GPIO_PIN_0) == ON)//读取LED的状态,进行LED的反转
  7.         {
  8.             LED1(OFF);
  9.         }
  10.         else
  11.         {
  12.             LED1(ON);
  13.         }
  14.         EXTI_ClearIntBitState(EXTI_LINE0);//清除中断标志
  15.     }
  16. }
王大熊 发表于 2015-7-17 09:27 | 显示全部楼层
下载看看,居然用的是新版的库文件,楼主辛苦了。
angerbird 发表于 2015-7-17 22:22 | 显示全部楼层
这个是采用GPIOX0口的EXTI0中断的,该终端为高级中断的。
smilingangel 发表于 2015-7-18 15:05 | 显示全部楼层
GPIO_EXTILineConfig(GPIO_PORT_SOURCE_GPIOA, GPIO_PINSOURCE0);//选择要设置为 EXTI线的端口及引脚,配置为PA0
这个很重要的。
1021256354 发表于 2015-7-26 16:16 | 显示全部楼层
LZ:怎么没看到时钟配置部分啊?
 楼主| monkeypony 发表于 2015-7-29 15:22 | 显示全部楼层
1021256354 发表于 2015-7-26 16:16
LZ:怎么没看到时钟配置部分啊?

系统初始化就配置好了。就不用管它了。
1021256354 发表于 2015-7-30 08:50 | 显示全部楼层
o,有点像51
clvert 发表于 2016-12-5 10:06 | 显示全部楼层
下载下来看看,正好在调外部中断。
comeon201208 发表于 2016-12-7 22:43 | 显示全部楼层
这个是采用外部中断实现的
vibra2016 发表于 2016-12-11 21:15 | 显示全部楼层
这个主要首先整的是IO口的中断功能的。
vivilzb1985 发表于 2016-12-11 22:36 | 显示全部楼层
这个软件上的实现到没啥的,都大同小异的
shenmu2012 发表于 2016-12-13 21:22 | 显示全部楼层
外部中断的是非常基础想的软件实现设计。
smilingangel 发表于 2016-12-14 22:03 | 显示全部楼层
monkeypony 发表于 2015-7-16 11:40
外部中断函数的编写

这个是直接在中断函数里面进行led灯的状态的变化设置的
smilingangel 发表于 2016-12-14 22:04 | 显示全部楼层
其实还有更好的办法就是采用flag的形式,,只是在中断函数里面对flag进行标志位的设置的,然后在main主函数中根据flag值的进行灯的状态设置的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

133

主题

715

帖子

0

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