打印

为什么我复位后自动进入中断了?

[复制链接]
1008|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
monkeypony|  楼主 | 2015-7-14 16:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pi, IO, TI, gp, GPIO
本来是想利用外部中断来翻转IO的,结果复位后调试发现,自动进入中断了,参考的官方的例程代码
/**
  ******************************************************************************
  * [url=home.php?mod=space&uid=288409]@file[/url]    EXTI/EXTI_demo/main.c
  * [url=home.php?mod=space&uid=187600]@author[/url]  MCU SD
  * [url=home.php?mod=space&uid=895143]@version[/url] V1.0
  * [url=home.php?mod=space&uid=212281]@date[/url]    26-DEC-2014
  * [url=home.php?mod=space&uid=247401]@brief[/url]   Main program body..
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/
#include "gd32f10x.h"

/* Private variables ---------------------------------------------------------*/
GPIO_InitPara GPIO_InitStructure;
EXTI_InitPara EXTI_InitStructure;
NVIC_InitPara NVIC_InitStructure;

/* Private function prototypes -----------------------------------------------*/
void EXTI0_Config(void);
void EXTI14_Config(void);

/* Private functions ---------------------------------------------------------*/
/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */
int main(void)
{
    /* Enable GPIOC clock */
    RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOC, ENABLE);
   
    /* Configure the LED2 and LED3 GPIO */
    GPIO_InitStructure.GPIO_Pin = GPIO_PIN_0 | GPIO_PIN_2;
    GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
   
    /* Turn on LED2 and LED3 */
    GPIO_SetBits(GPIOC, GPIO_PIN_0);
    GPIO_SetBits(GPIOC, GPIO_PIN_2);
   
    /* Configure the EXTI line0 and EXTI line14 */
    EXTI_DeInit(&EXTI_InitStructure);
    EXTI0_Config();
    EXTI14_Config();
   
    EXTI_SWINT_Enable(EXTI_LINE0);
   
    while(1)
    {
    }                                    
}

/**
  * @brief  Configure the EXTI line0.
  * @param  None
  * @retval None
  */
void EXTI0_Config(void)
{
    /* Enable GPIOC and AFIO clock */
    RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOA |
                               RCC_APB2PERIPH_AF, ENABLE);

    /* Configure PA0 pin */
    GPIO_InitStructure.GPIO_Pin = GPIO_PIN_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_MODE_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
   
    /* Connect EXTI Line0 to PA0 pin */
    GPIO_EXTILineConfig(GPIO_PORT_SOURCE_GPIOA, GPIO_PINSOURCE0);

    /* Configure EXTI Line0 and its interrupt to the lowest priority*/
    EXTI_InitStructure.EXTI_LINE = EXTI_LINE0;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
    EXTI_InitStructure.EXTI_LINEEnable = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
   
    NVIC_InitStructure.NVIC_IRQ = EXTI0_IRQn;
    NVIC_InitStructure.NVIC_IRQPreemptPriority = 0x0F;
    NVIC_InitStructure.NVIC_IRQSubPriority = 0x0F;
    NVIC_InitStructure.NVIC_IRQEnable = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

/**
  * @brief  Configure the EXTI line14.
  * @param  None
  * @retval None
  */
void EXTI14_Config(void)
{
    /* Enable GPIOB and AFIO clock */
    RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOB |
                               RCC_APB2PERIPH_AF, ENABLE);
   
    /* Configure PB14 pin */
    GPIO_InitStructure.GPIO_Pin = GPIO_PIN_14;
    GPIO_InitStructure.GPIO_Mode = GPIO_MODE_IN_FLOATING;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    /* Connect EXTI Line14 to PB14 pin */
    GPIO_EXTILineConfig(GPIO_PORT_SOURCE_GPIOB, GPIO_PINSOURCE14);

    /* Configure EXTI Line14 and its interrupt to the lowest priority*/
    EXTI_InitStructure.EXTI_LINE = EXTI_LINE14;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    EXTI_InitStructure.EXTI_LINEEnable = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
   
    NVIC_InitStructure.NVIC_IRQ = EXTI15_10_IRQn;
    NVIC_InitStructure.NVIC_IRQPreemptPriority = 0x0F;
    NVIC_InitStructure.NVIC_IRQSubPriority = 0x0F;
    NVIC_InitStructure.NVIC_IRQEnable = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

/******************* (C) COPYRIGHT 2014 GIGADEVICE *****END OF FILE****/




沙发
long009| | 2015-7-15 10:47 | 只看该作者
EXTI_SWINT_Enable(EXTI_LINE0);
你仔细看看这个函数,他会人为的进去中断的。

使用特权

评论回复
板凳
monkeypony|  楼主 | 2015-7-16 11:21 | 只看该作者
long009 发表于 2015-7-15 10:47
EXTI_SWINT_Enable(EXTI_LINE0);
你仔细看看这个函数,他会人为的进去中断的。

我看了看,果然是这个函数的原因,去掉就好了。

使用特权

评论回复
地板
monkeypony|  楼主 | 2015-7-16 11:23 | 只看该作者
long009 发表于 2015-7-15 10:47
EXTI_SWINT_Enable(EXTI_LINE0);
你仔细看看这个函数,他会人为的进去中断的。

我以为这个是开启中断的函数,那么久有个疑问,每个中断莫非是不需要开启的么?

使用特权

评论回复
5
王大熊| | 2015-7-17 09:32 | 只看该作者
monkeypony 发表于 2015-7-16 11:23
我以为这个是开启中断的函数,那么久有个疑问,每个中断莫非是不需要开启的么? ...

好像只有开全局中断的函数。单独的中断没有这个函数

使用特权

评论回复
6
王大熊| | 2015-7-17 09:32 | 只看该作者
EXTI_SWINT_Enable(EXTI_LINE0);//SWINT是软件中断的意思,就是软件开启中断,software

使用特权

评论回复
7
monkeypony|  楼主 | 2015-7-24 07:51 | 只看该作者
王大熊 发表于 2015-7-17 09:32
EXTI_SWINT_Enable(EXTI_LINE0);//SWINT是软件中断的意思,就是软件开启中断,software

学习了,原来是我理解错啦。

使用特权

评论回复
8
long009| | 2015-7-29 17:29 | 只看该作者
monkeypony 发表于 2015-7-24 07:51
学习了,原来是我理解错啦。

这个在调试的时候用得着,一般不用的。

使用特权

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

本版积分规则

133

主题

715

帖子

0

粉丝