#include "STM32F4xx.h"
// FCPU =168Mhz
// FAHB =FCPU
// FAPB2=FCPU/2
// FAPB1=FCPU/4
void SystemInit()
{
unsigned int i;
for (i=0;i<0x00100000;i++); // OSC oturtma ve kurtarma rutini
RCC->CFGR |= 0x00009400; // AHB ve APB hizlarini max degerlere set edelim
RCC->CR |= 0x00010000; // HSE Xtal osc calismaya baslasin
while (!(RCC->CR & 0x00020000));// Xtal osc stabil hale gelsin
RCC->PLLCFGR = 0x07402A04; // PLL katsayilarini M=4, N=168, P=2 ve Q=7 yapalim
RCC->CR |= 0x01000000; // PLL calismaya baslasin (Rehber Sayfa 95)
while(!(RCC->CR & 0x02000000)); // Pll hazir oluncaya kadar bekle
FLASH->ACR = 0x00000605; // Flash ROM icin 5 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
RCC->CFGR |= 0x00000002; // Sistem Clk u PLL uzerinden besleyelim
while ((RCC->CFGR & 0x0000000F) != 0x0000000A); // Besleninceye kadar bekle
RCC->AHB1ENR |= 0x0000000F; // GPIO A,B,C,D clock'u aktif edelim
GPIOB->MODER = 0x00000015; // GPIOB nin 0,1,2 pinleri cikis tanimlandi (LEDler icin)
GPIOB->OSPEEDR= 0xFFFFFFFF; // GPIOD nin tum cikislari en yuksek hizda kullanacagiz
RCC->APB2ENR|=0x4000; // SYSCFG Enable
}
void EXTI1_IRQHandler ()
{
EXTI->PR|=0x00000002; // EXTIO INT flagimizi silelim
GPIOB->ODR^=0x00000007;
}
int main()
{
// Butona basinca pinimiz H oluyor
GPIOA->MODER &=~0x0000000C; // GPIO pin ancak inp modunda interrupt uretebilir (Rehber 143)
//GPIOA->PUPDR &= 0x00000004;
SYSCFG->EXTICR[0]&=~0x000000F0; // GPIO A1 interrupt uretecek
EXTI->RTSR=0x00000002; // Yukselen kenar tetiklemesi yapacagiz. (EXTI1)
EXTI->FTSR=0; // Dusen kenar tetiklemesi istemiyoruz. (EXTI1)
EXTI->IMR=0x00000002; // EXTI1 Int enable (Rehber 202-203)
EXTI->EMR=0; // Event istemiyoruz
NVIC->ISER[0] = 0x00000080; // NVIC EXTI1_IRQ interrupti acalim
while(1);
}
Bülent hocamızın yapmış olduğu kodlardan yararlanarak toggle işlemini kart üzerinden değilde harici olarak bi buton bagladım ve yine harici bagladıgım üç ledi yakıyorum.Fakat bazı problemler var mesela butona ardarda basınca ledler çok kararlı ve hızlı bir şekilde yanıp sönme işlemi yapmıyo bazen bassamda sönmüyo ve yanmıyo parazitle ilgili olabilir ama yükselen kenardan sonra gecikme eklemek istiyorm bunu hangi satıra eklicem onu kestiremedim.yada bunun başka bir çözümü varmı.birde ekledigim butonun girişini dahili direnç ile pull-down yapmak istiyorum GPIOA->PUPDR &= 0x00000004; bu satırı ekledim debug yaparken bu satırda register a yazma yapmıyo GPIOA->PUPDR &= 0x00000004; böyle yaparsa yazıyo neden anlamadım.yardımcı olurmusunuz çok ihtiyacım var.