Stm32L152 External interrupt sorunum

Başlatan Gökhan BEKEN, 21 Ocak 2015, 17:20:37

Gökhan BEKEN

PA0 kesmesini çalıştırabiliyorum, fakat bana A portundan başka bir porttaki harici kesme lazım, Örneği olan var mı?

Şuan ki işime yaramayan a0 kesmesi için kodum:
#include "stm32l1xx.h"

int main(void)
{
    EXTI_InitTypeDef   EXTI_InitStructure;
    GPIO_InitTypeDef   GPIO_InitStructure;
    NVIC_InitTypeDef   NVIC_InitStructure;

    /* Enable GPIOA and GPIOB clock */
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB, ENABLE);

    /* Configure PA0 pin as input floating */
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

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

    /* Connect EXTI0 Line to PA0 pin */
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);

    /* Configure EXTI0 line */
    EXTI_InitStructure.EXTI_Line = EXTI_Line0;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);

    /* Enable and set EXTI0 Interrupt to the lowest priority */
    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    /* Configure PB6 (BLUE LED) and PB7 (GREEN LED) */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    GPIOB->ODR &= ~GPIO_Pin_7;
    GPIOB->ODR |=  GPIO_Pin_6;

    /* Infinite loop */
    while(1);
}

void EXTI0_IRQHandler(void)
{
    if(EXTI_GetITStatus(EXTI_Line0) != RESET)
    {
        /* Clear the EXTI line 0 pending bit */
        EXTI_ClearITPendingBit(EXTI_Line0);

        GPIOB->ODR ^= GPIO_Pin_6 | GPIO_Pin_7; // Toggle
    }
}
Özel mesaj okumuyorum, lütfen göndermeyin.

X-Fi

PB3 pin örneği hemen hemen hepsi bu şekilde kurulur;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource3);

    EXTI_InitStructure.EXTI_Line = EXTI_Line3; /* PB3 UP button  */
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);

    NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

EXTI_ClearITPendingBit(EXTI_Line3);


void EXTI3_IRQHandler(void) // PB3 User Up button
{
    EXTI_ClearITPendingBit(EXTI_Line3);
    xSemaphoreGiveFromISR(xButtonSemaphore, NULL);
}
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

Gökhan BEKEN

Özel mesaj okumuyorum, lütfen göndermeyin.

Karamel

hocam ben bu kutuphanelerin nasil calistigini anlayamiyorum....  :-\  kutuphaneler hakkinda dokuman varsa nereden inceleyebilirim? mesela EXTI_InitStructure.EXTI_Line = EXTI_Line3; bu satirda external interrupt i line3 olarak seciyorda. line 3 ne? ben bu kod satirini ilk olarak nereden bakip programima yazacagim?

X-Fi

Line3 işlemcinin donanımında ayarlanan birşey pinden interrupt üretilebilmesi için içerden bir anahtarı kapatıyorsun. Çok girişli bir Ve kapısı gibi düşün bu line larda bu kapının birer girişleri aktif etmediğin girişlerden kesme alamıyorsun.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

Mucit23

Alıntı yapılan: Karamel - 21 Ocak 2015, 18:28:14
hocam ben bu kutuphanelerin nasil calistigini anlayamiyorum....  :-\  kutuphaneler hakkinda dokuman varsa nereden inceleyebilirim? mesela EXTI_InitStructure.EXTI_Line = EXTI_Line3; bu satirda external interrupt i line3 olarak seciyorda. line 3 ne? ben bu kod satirini ilk olarak nereden bakip programima yazacagim?

@Karamel
STM32 lerdeki yapıyı bilmediğinden kaynaklanıyor aslında. Bende zamanında bayağı zorlandım. Ama biraz işin mantığını anlayınca gerisi çorap söküğü gibi geliyor. ST'nin kütüphanesi kullanım açısından çok rahat. Alışmak için Bol bol örnek incelemelisin.

http://www.longlandclan.yi.org/~stuartl/stm32f10x_stdperiph_lib_um/index.html

Karamel

hocam mikroc de kutuphane fonksiyonlarini aciklayan. sayfanin en sonundada kucuk bir ornegi olan bir help dosyasi var. sunun gibi http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/pic/help/peripheral_pin_select_library.htm st libraryde de boyle birsey var mi? direk ornek uygulamardan kodlari calip yaparsam hic birsey anlayamam....

CoşkuN

Kütüphaneler işi kolaylaştırıyor olsa da önce datasheet'ten kullandığımız çevrebirimlerinin nasıl çalıştığını inceleyip anlamak gerekiyor. O zaman kütüphane fonksiyonlarında neler yapıldığını anlamak daha kolay hale gelir.