اطلاعیه

Collapse
No announcement yet.

راه اندزی interrupt_ stm32

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

    راه اندزی interrupt_ stm32

    سلام بر همگی. من با کمک دوستان این فروم دارم از avr به arm مهاجرت میکنم و تجربمم خیلی کمه تو اولین برنامه چند تا led را با pushbotton روشن خاموش کردم. الان میخوام همین led هارو با راه اندای interrupt روشن و خاموش کنم(toggle)
    برناممو به صورت زیر نوشتم ولی جواب نمیگیرم. ممنون میشم بازم راهنماییم کنید.

    #include <stdio.h>
    #include "diag/Trace.h"
    #include "stm32f0xx.h"
    #include "stm32f0xx_conf.h"
    // ----------------------------------------------------------------------------
    void Delay(__IO uint32_t nCount) {
    while(nCount--) {
    }
    }


    int main(int argc, char* argv[])
    {




    GPIO_InitTypeDef GPIO_InitStructure;




    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOB, &GPIO_InitStructure);





    NVIC_InitTypeDef NVIC_InitStructure;
    EXTI_InitTypeDef EXTI_InitStructure;


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


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; // PA10 is connected to high, so use pulldown resistor
    GPIO_Init(GPIOA, &GPIO_InitStructure);



    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource10);



    EXTI_InitStructure.EXTI_Line = EXTI_Line10; //
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // Interrupt mode
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; // Trigger on Rising edge (Just as user presses btn)
    EXTI_InitStructure.EXTI_LineCmd = ENABLE; // Enable the interrupt
    EXTI_Init(&EXTI_InitStructure); // Initialize EXTI



    NVIC_InitStructure.NVIC_IRQChannel = EXTI4_15_IRQn; // Function name for EXTI_Line10 interrupt handler
    NVIC_InitStructure.NVIC_IRQChannelPriority = 0x01; // Set priority
    // Set sub priority
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // Enable the interrupt
    NVIC_Init(&NVIC_InitStructure); // Add to NVIC






    // Turn on LED


    if(EXTI_GetITStatus(EXTI_Line10) != RESET){
    GPIO_SetBits(GPIOB, GPIO_Pin_0);


    EXTI_ClearITPendingBit(EXTI_Line10);}






    while(1){
    // Do nothing here, using interrupts
    }


    return 0;




    // Infinite loop, never return.
    }


    #pragma GCC diagnostic pop


    // ----------------------------------------------------------------------------



    جدیدترین ویرایش توسط nm272; ۰۱:۳۱ ۱۳۹۹/۰۲/۱۹.

    #2
    پاسخ : راه اندزی interrupt_ stm32

    نوشته اصلی توسط nm272 نمایش پست ها
    سلام بر همگی. من با کمک دوستان این فروم دارم از avr به arm مهاجرت میکنم و تجربمم خیلی کمه تو اولین برنامه چند تا led را با pushbotton روشن خاموش کردم. الان میخوام همین led هارو با راه اندای interrupt روشن و خاموش کنم(toggle)
    برناممو به صورت زیر نوشتم ولی جواب نمیگیرم. ممنون میشم بازم راهنماییم کنید.
    تو چه محیطی کد میزنین ؟ سرویس اینتراپت رو ننوشتین. صرفا فلگ اینتراپت رو چک میکنید که با توجه به اینکه تو حلقه هم نیست، قطعا عمل نمیکنه
    Si vis pacem, para bellum

    دیدگاه


      #3
      پاسخ : راه اندزی interrupt_ stm32

      نوشته اصلی توسط tiranoid نمایش پست ها
      تو چه محیطی کد میزنین ؟ سرویس اینتراپت رو ننوشتین. صرفا فلگ اینتراپت رو چک میکنید که با توجه به اینکه تو حلقه هم نیست، قطعا عمل نمیکنه
      تو eclipce
      ممنون با راهنمایی شما حلش کردم و جواب گرفتم.

      دیدگاه

      لطفا صبر کنید...
      X