İki gündür bir şey yazmıyordum. sanırım bir müddet sonra bağımlılık yapıyor. Sabah titreyerek uyandım ve laptop u kucağıma alınca kendime geldim. Kucağa bir şeyler almak gerekiyor sanırım.
Daha önceden yaptığımız bir çalışmanın biraz farklı bir uygulamasını yapacağız. EXTI0 ile PA0,PB0,PC0,PD0,PE0 pinlerinin herhangi birine ilişkilendirerek kullanabiliyoruz bunu daha önce görmüştük. bir zorunluluktan dolayı PC12 yi interrupt girişi olarak kullanmam gerekti. Biraz data incelemesinden sonra işin içinden çıkamayınca www.picproje.com adresindeki dostlara sordum. hala cevap gelmedi. yazıyı bitirince orayada çözümü aktaracağım.
stm32f103rb nin reference manuel in içeriğini ve NVIC bölümünde tabloyu incelediğimizde EXTI12 gibi bir kesme vektörünün olmadığı, bunun yanısıra exti15_10 kesme vektörünün olduğu görülür. (40. sırada)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
#include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_exti.h" #include "stm32f10x_flash.h" #include "misc.h" #define EXTI15_10_IRQChannel ((u8)0x28) // NVIC tablo 40.sıra hex 28 #define LED_PORT GPIOD //Global değişkenler GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; //Prototipler void Delay(__IO uint32_t); void SetSysClockHSI(void); void GPIO_Configuration(void); void NVIC_Configuration(void); void SetSysClockHSI(void) { RCC_DeInit(); RCC_HSICmd(ENABLE); RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCKL(AHB) 64mhz RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK2(APB2) 32Mhz RCC_PCLK1Config(RCC_HCLK_Div1); //PCLK1(APB1) 64Mhz FLASH_SetLatency(FLASH_Latency_2); FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_CFGR_PLLMULL12);//64mhz RCC_PLLCmd( ENABLE); while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { } RCC_SYSCLKConfig( RCC_SYSCLKSource_PLLCLK); while (RCC_GetSYSCLKSource() != 0x08) { } /* * GPIOA,B,C,D,E ile AFIO ya clock uygulanıyor */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC| RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE); } void GPIO_Configuration(void) { /* * GPIOC12 giriş olarak GPIOD.2 çıkış olarak ayarlanıyor */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); } /* * kesme ayarları */ void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); /* * Kesme NVIC ayarlamaları */ NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /* * Zaman Geeçikmesi */ void Delay(__IO uint32_t nCount) { for (; nCount != 0; nCount--); } /* * interrupt alt programı * GPIOC.12 ye basıldığında buraya dallanacak */ void EXTI15_10_IRQHandler() { if (EXTI_GetITStatus(EXTI_Line12) != RESET) { Delay(0xFFFFF); GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_SET); Delay(0xFFFFF); GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_RESET); Delay(0xFFFFF); GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_SET); Delay(0xFFFFF); GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_RESET); Delay(0xFFFFF); GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_SET); Delay(0xFFFFF); GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_RESET); /* * kesme bayrağının temizlenmesi */ EXTI_ClearITPendingBit(EXTI_Line12); } } void main() { SetSysClockHSI(); // Clock ayarları NVIC_Configuration(); //kesme ayarları GPIO_Configuration();//pin ayarları //EXTI line i GPIOC12 ile ilişkilendir GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource12); EXTI_InitStructure.EXTI_Line = EXTI_Line12; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); //sistemin çalıştığını anlamak için konulmuş boş bir led yakma söndürme işlemi Delay(0xFFFFF); GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_SET); Delay(0xFFFFF); GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_RESET); Delay(0xFFFFF); GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_SET); Delay(0xFFFFF); GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_RESET); Delay(0xFFFFF); GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_SET); Delay(0xFFFFF); GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_RESET); while(1); } |