打印

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

[复制链接]
2468|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
monkeypony|  楼主 | 2015-7-16 11:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
对着STM32,终于配置好了,还是很有趣的。工程如下,GD32103E-EVAL实验板开发平台

EXIT-按键.rar (4.11 MB)
沙发
monkeypony|  楼主 | 2015-7-16 11:38 | 只看该作者
PA0的外部中断的初始化
void EXTI_PA0_Config(void)
{
    GPIO_InitPara GPIO_InitStructure;//定义GPIO的配置选项,
    EXTI_InitPara EXTI_InitStructure;//定义EXTI的配置选项

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

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

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

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

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

}

使用特权

评论回复
板凳
monkeypony|  楼主 | 2015-7-16 11:39 | 只看该作者
NVIC的初始化和配置
static void NVIC_Configuration(void)
{
    NVIC_InitPara NVIC_InitStructure;

    NVIC_PRIGroup_Enable(NVIC_PRIGROUP_0);//优先级的第0组配置
   
    NVIC_InitStructure.NVIC_IRQ = EXTI0_IRQn;
    NVIC_InitStructure.NVIC_IRQPreemptPriority = 0;
    NVIC_InitStructure.NVIC_IRQSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQEnable = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

使用特权

评论回复
地板
monkeypony|  楼主 | 2015-7-16 11:40 | 只看该作者
外部中断函数的编写
//外部中断0的配置
void EXTI0_IRQHandler(void)
{
    if(EXTI_GetIntBitState(EXTI_LINE0) != RESET)//假如外部中断发生
    {
        if(GPIO_ReadOutputBit(GPIOF,GPIO_PIN_0) == ON)//读取LED的状态,进行LED的反转
        {
            LED1(OFF);
        }
        else
        {
            LED1(ON);
        }
        EXTI_ClearIntBitState(EXTI_LINE0);//清除中断标志
    }
}

使用特权

评论回复
5
王大熊| | 2015-7-17 09:27 | 只看该作者
下载看看,居然用的是新版的库文件,楼主辛苦了。

使用特权

评论回复
6
angerbird| | 2015-7-17 22:22 | 只看该作者
这个是采用GPIOX0口的EXTI0中断的,该终端为高级中断的。

使用特权

评论回复
7
smilingangel| | 2015-7-18 15:05 | 只看该作者
GPIO_EXTILineConfig(GPIO_PORT_SOURCE_GPIOA, GPIO_PINSOURCE0);//选择要设置为 EXTI线的端口及引脚,配置为PA0
这个很重要的。

使用特权

评论回复
8
1021256354| | 2015-7-26 16:16 | 只看该作者
LZ:怎么没看到时钟配置部分啊?

使用特权

评论回复
9
monkeypony|  楼主 | 2015-7-29 15:22 | 只看该作者
1021256354 发表于 2015-7-26 16:16
LZ:怎么没看到时钟配置部分啊?

系统初始化就配置好了。就不用管它了。

使用特权

评论回复
10
1021256354| | 2015-7-30 08:50 | 只看该作者
o,有点像51

使用特权

评论回复
11
clvert| | 2016-12-5 10:06 | 只看该作者
下载下来看看,正好在调外部中断。

使用特权

评论回复
12
comeon201208| | 2016-12-7 22:43 | 只看该作者
这个是采用外部中断实现的

使用特权

评论回复
13
vibra2016| | 2016-12-11 21:15 | 只看该作者
这个主要首先整的是IO口的中断功能的。

使用特权

评论回复
14
vivilzb1985| | 2016-12-11 22:36 | 只看该作者
这个软件上的实现到没啥的,都大同小异的

使用特权

评论回复
15
shenmu2012| | 2016-12-13 21:22 | 只看该作者
外部中断的是非常基础想的软件实现设计。

使用特权

评论回复
16
smilingangel| | 2016-12-14 22:03 | 只看该作者
monkeypony 发表于 2015-7-16 11:40
外部中断函数的编写

这个是直接在中断函数里面进行led灯的状态的变化设置的

使用特权

评论回复
17
smilingangel| | 2016-12-14 22:04 | 只看该作者
其实还有更好的办法就是采用flag的形式,,只是在中断函数里面对flag进行标志位的设置的,然后在main主函数中根据flag值的进行灯的状态设置的。

使用特权

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

本版积分规则

133

主题

715

帖子

0

粉丝