اطلاعیه

Collapse
No announcement yet.

مشکل در وقفه خارجی میکرو STM32F030K6

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل در وقفه خارجی میکرو STM32F030K6

    سلام دوستان،
    من دارم رو یه پروژه کار میکنم با میکرو STM32F030K6. برای راه اندازی وقفه خارجی به شدت دچار مشکل شده ام. با CMSIS هم کارکرده ام. هر چی کد بوده رو بالا پایین کرده ام اما وقفه خارجی EXTI_0_1 کار نمیکنه. وقفه رو روی پایه PA1 گذاشته ام و یکی از پایه های دیگه میکرو رو به این پایه وصل کردم که وقتی با برنامه اون رو 1 کنم وقفه بزنه. به محض 1 کردن این پایه برنامه میره تو HardFault_Handler. بعد نکته جالبتر اینه که اصلا تو فانکشن EXTI0_1_IRQHandler من اصلا نمیذاره breakpoint بذارم. یعنی انگار اصلا این فانکشن جزئی از برنامه نیست. کامپایلرم IAR Workbench 8.30.1 هست و نحوه تنظیم رو هم اینجوری نوشتم:


    void Configure_PA1(void)
    {
    /* Set variables used */
    GPIO_InitTypeDef GPIO_InitStruct;
    EXTI_InitTypeDef EXTI_InitStruct;
    NVIC_InitTypeDef NVIC_InitStruct;


    /* Enable clock for GPIOA */
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    /* Enable clock for SYSCFG */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);


    /* Set pin as input */
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct);


    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource1);


    EXTI_InitStruct.EXTI_Line = EXTI_Line1;
    /* Enable interrupt */
    EXTI_InitStruct.EXTI_LineCmd = ENABLE;
    /* Interrupt mode */
    EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
    /* Triggers on rising and falling edge */
    EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
    /* Add to EXTI */
    EXTI_Init(&EXTI_InitStruct);


    /* Add IRQ vector to NVIC */
    NVIC_InitStruct.NVIC_IRQChannel = EXTI0_1_IRQn;
    /* Set priority */
    NVIC_InitStruct.NVIC_IRQChannelPriority = 0;
    /* Enable interrupt */
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    /* Add to NVIC */
    NVIC_Init(&NVIC_InitStruct);


    NVIC_EnableIRQ(EXTI0_1_IRQn);
    // NVIC_SetVector(EXTI0_1_IRQn, EXTI0_1_IRQHandler);
    // NVIC_IntEnable(IVT_INT_EXTI15_10);
    }


    void EXTI0_1_IRQHandler(void)
    {
    if (EXTI_GetITStatus(EXTI_Line0) != RESET)
    {
    EXTI_ClearITPendingBit(EXTI_Line0);
    }
    }


    نیاز شدید به کمک دارم!!!
    جدیدترین ویرایش توسط alireza.tt; ۰۲:۳۳ ۱۳۹۷/۱۱/۰۹.
لطفا صبر کنید...
X