MikroC ile STM32F103C8 Harici Kesme

Başlatan mg1980, 05 Ocak 2017, 13:55:27

mg1980

Sayın Hocalarım ve ilgilenen arkadaşlar,
MikroC ARM kitabımızdaki açıklamalara benzeterek datasheet(el kitabı) yardımıyla A0 pininden harici kesme çalıştırdım. Ama bunun dışındaki port(A dahil) ve pinlerden datasheet açıklamalarını uyguladığım halde ne yaptıysam sonuç alamadım. Çalışan ve çalışmayan kodlardan örnek aşağıdadır. Burada eksik olan nedir ? İlgileneceklere şimdiden teşekkürler.
                      //STM32F103C8    8MHz HARİCİ Kristal PLL Açık
 // BUTON  A PORTU 0.pine bağlanacak Pull Down yapıldığı için +3V'dan verilecek

#define BUTON          Button(&GPIOA_IDR,0,100,1)    //KESMEDE GEREKLİ DEĞİL
#define BUTONB         Button(&GPIOB_IDR,1,100,1)


void buton_kesme() iv IVT_INT_EXTI0 ics ICS_AUTO
{
 EXTI_PR=1;     //Kesme bayrağını temizle

 GPIOC_ODR.B13=~GPIOC_ODR.B13;
 GPIOB_ODR.B0=~GPIOB_ODR.B0;
}

void main()                 //********************************************
{
 Delay_ms(500);
 GPIO_Digital_Output(&GPIOB_ODR,_GPIO_PINMASK_0);
 GPIO_Digital_Output(&GPIOC_ODR,_GPIO_PINMASK_13);
 GPIO_Digital_Input(&GPIOA_IDR,_GPIO_PINMASK_0);   //  ????????
 GPIO_Digital_Input(&GPIOB_IDR,_GPIO_PINMASK_1);   //  ????????

 GPIO_Set_Pin_Mode(&GPIOA_BASE,_GPIO_PIN_0,_GPIO_CFG_MODE_INPUT | _GPIO_CFG_PULL_DOWN);

 //GPIO_Config(&GPIOB_BASE,_GPIO_PINMASK_1,_GPIO_CFG_PULL_DOWN); //Bir başka Pulldown yapma usulü

 GPIO_Set_Pin_Mode(&GPIOB_BASE,_GPIO_PIN_1,_GPIO_CFG_MODE_INPUT | _GPIO_CFG_PULL_DOWN);

 AFIO_EXTICR1=0;     //PORTA İÇİN "0".PORTB İÇİN "1" VS.
 EXTI_FTSR=0;       //0 idi   DÜŞEN KENAR TETİKLEME YOK.
 EXTI_RTSR=1;       //1 idi   YÜKSELEN KENAR  TETİKLEEME VAR
 EXTI_IMR=1;        //1 idi
 EXTI_EMR=0;        //0 idi

 EXTI_PR=1;          //1 idi   //Kesmeye girince 0 oluyor.Kesme bayrağı
 NVIC_IntEnable(IVT_INT_EXTI0);  // Harici kesmeye izin ver.
 
 //RCC_APB2ENR.AFIOEN=1;             // ALTERNATİF FONK. I/O CLOCK (*)Açıklama aşağıda
 //RCC_APB2ENR.IOPBEN=1;           // B PORTU CLOCK ENABLE        (*)

 while(1)
{
 
 }
}
/*  (*) Kesme sadece A0 pininde çalışıyor. B portu 1. pini için dataseheet incelemesine göre benim yap
tığım ilave.Ancak sonuç alınamadı.*/


//STM32F103C8    8MHz HARİCİ Kristal PLL Açık
 // BUTON  B PORTU 1.pine bağlanacak Pull Down yapıldığı için +3V'dan verilecek

#define BUTON          Button(&GPIOA_IDR,0,100,1)    //KESMEDE GEREKLİ DEĞİL
#define BUTONB         Button(&GPIOB_IDR,1,100,1)


void buton_kesme() iv IVT_INT_EXTI1 ics ICS_AUTO
{
 EXTI_PR=1;     //Kesme bayrağını temizle

 GPIOC_ODR.B13=~GPIOC_ODR.B13;
 GPIOB_ODR.B0=~GPIOB_ODR.B0;
}

void main()                 //********************************************
{
 Delay_ms(500);
 GPIO_Digital_Output(&GPIOB_ODR,_GPIO_PINMASK_0);
 GPIO_Digital_Output(&GPIOC_ODR,_GPIO_PINMASK_13);
 GPIO_Digital_Input(&GPIOA_IDR,_GPIO_PINMASK_0);   //  ????????
 GPIO_Digital_Input(&GPIOB_IDR,_GPIO_PINMASK_1);   //  ????????

 GPIO_Set_Pin_Mode(&GPIOA_BASE,_GPIO_PIN_0,_GPIO_CFG_MODE_INPUT | _GPIO_CFG_PULL_DOWN);

 //GPIO_Config(&GPIOB_BASE,_GPIO_PINMASK_1,_GPIO_CFG_PULL_DOWN); //Bir başka Pulldown yapma usulü

 GPIO_Set_Pin_Mode(&GPIOB_BASE,_GPIO_PIN_1,_GPIO_CFG_MODE_INPUT | _GPIO_CFG_PULL_DOWN);

 AFIO_EXTICR1=1;     //PORTA İÇİN "0".PORTB İÇİN "1" VS.
 EXTI_FTSR=0;       //0 idi   DÜŞEN KENAR TETİKLEME YOK.
 EXTI_RTSR=1;       //1 idi   YÜKSELEN KENAR  TETİKLEEME VAR
 EXTI_IMR=1;        //1 idi
 EXTI_EMR=0;        //0 idi

 EXTI_PR=1;          //1 idi   //Kesmeye girince 0 oluyor.Kesme bayrağı
 NVIC_IntEnable(IVT_INT_EXTI1);  // Harici kesmeye izin ver.
 RCC_APB2ENR.AFIOEN=1;             // ALTERNATİF FONK. I/O CLOCK (*)Açıklama aşağıda
 RCC_APB2ENR.IOPBEN=1;            // B PORTU CLOCK ENABLE        (*)

 while(1)
{
 }
 }
/*  (*) Kesme sadece A0 pininde çalışıyor. B portu 1. pini için dataseheet incelemesine göre benim yap
tığım ilave.Ancak sonuç alınamadı.*/


https://drive.google.com/drive/folders/0B1XWQs68BUsobkRCUWI0U3BnTk0?usp=sharing
https://drive.google.com/drive/folders/0B1XWQs68BUsoeHhXN2JJQUlFWlU?usp=sharing

LukeSkywalker

#1
@mg1980
B portunun 0. pinini deniyorsunuz değil mi?
Çünkü B portunun 1. pini için şunu yazmanız gerek:
AFIO_EXTICR1=16;

mg1980

Hocam,
İlginize teşekkürler.
B portunun 1.pinini Pulldown yapmış olarak +3v veriyorum. 16 yazdığım halde olmadı. Neden 16 ?

LukeSkywalker

B0 olsaydi 1 yazmaniz yeterliyildi.
Ama siz b1 kullandiginiz icin registerin 4. bitini 1 yapmalisiniz. Reference manualde çok açık.
Ayrica kodun calisabilmesi icin diger duzenlemeleri de yapmalisiniz.

mg1980

Hocam,
Çalışan kod ve kitabınızdaki açıklamalar doğrultusunda B portu 1. pin için gerekeni (kullanıcı el kitabına uygun olarak)yaptığımı düşünüyorum. 4.bit konusuna biraz kafa yoracağım.İnşallah sonuç alırız.Saygılar.

LukeSkywalker

Alıntı yapılan: mg1980 - 05 Ocak 2017, 22:44:31

Çalışan kod ve kitabınızdaki açıklamalar doğrultusunda B portu 1. pin için gerekeni (kullanıcı el kitabına uygun olarak)yaptığımı düşünüyorum.

Kitaba uygun yapmamışsınız.
Registerlara iyi bakın.

ref manual s.210'dan itibaren inceleyin.
Ayrıca s.191'i de inceleyin.