CoIDE ni kurulumu ve ayarları ile ilgili yapılması gerekenleri bir önceki yazıda elimden geldiğince yazmıştım.
Bu yazımda ise STM32f100RB işlemcisini barındıran discovery kit ile basit bir uygulama yapacağız.
CoIDE açtıktan sonra yeni bir proje oluşturunuz. Daha sonra CMSIS Boot, CMSIS core u Ripository penceresinden ekleyiniz. Aynı pencerede Others sekmesinden de GPIO, RCC, FLASH dosyalarınıda eklemeniz gerekmektedir. Tüm bunları yaptığınızda kod yazmaya hazırız demektir.
CoIDE nin kendiliğinden oluşturduğu ve Project penceresinden ulaşabileceğimiz main.c dosyasını açarak aşağıdaki kodları yapıştırınız. Kodların açıklaması görüldüğü üzre mevcut.
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 |
#include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_flash.h" GPIO_InitTypeDef GPIO_InitStructure; //Kalıtım Sağlanıyor void SetSysClockTo24(void) { int i; /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------*/ /* RCC system reset(for debug purpose) */ RCC_DeInit(); /* Sistem reset Durumuna getiriliyor */ RCC_HSEConfig(RCC_HSE_ON); /* High Speed External OSC Çalıştırılıyor */ for(i=0;i<0x000FFFF;i++); /* HSE Stabil Olana Kadar Bekleniyor */ FLASH_SetLatency(FLASH_Latency_0); /* 0 wait state*/ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* HCLK = SYSCLK */ RCC_PCLK2Config(RCC_HCLK_Div1); /* PCLK2 = HCLK */ RCC_PCLK1Config(RCC_HCLK_Div1); /* PCLK1 = HCLK */ /* PLLCLK = (8MHz/1) * 3 = 24 MHz */ RCC_PREDIV1Config(RCC_PREDIV1_Source_HSE,RCC_PREDIV1_Div1); /* PLLDIV1 bölme yok */ RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_3); /* PLL_in * 3 */ RCC_PLLCmd(ENABLE); /*Pll Açık */ while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) /* PLL Hazır olana kadar bekle */ { } RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /*Sistem Clock için PLL seçildi*/ while (RCC_GetSYSCLKSource() != 0x08) /* PLL sistem Clock u olarak çalışıncaya kadar bekle */ { } } int main(void) { int i; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /*APB2 bus hattı üzerindeki GPIOA ya çalıştır*/ /* Output clock on MCO pin ---------------------------------------------*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /*GPIOA.8 i Alternate function çıkış olarak ayarla*/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /*50mhz max*/ GPIO_Init(GPIOA, &GPIO_InitStructure); RCC_MCOConfig(RCC_MCO_PLLCLK_Div2); /*GPIO.8 i PLL/2 şeklinde clock verecek şeklinde ayarla*/ // // ****************************************************************************** RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);/*APB2 bus hattı üzerindeki GPIOC ya çalıştır*/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All ;/*GPIOC i tüm pinleri çıkış (PullUp) 50mhz ayarla*/ GPIO_Init(GPIOC, &GPIO_InitStructure); while(1) { GPIO_SetBits(GPIOC,GPIO_Pin_8); for (i = 0; i < 0x0000FFFF; ++i) { } GPIO_ResetBits(GPIOC,GPIO_Pin_8); for (i = 0; i < 0x0000FFFF; ++i) { } GPIO_SetBits(GPIOC,GPIO_Pin_9); for (i = 0; i < 0x0000FFFF; ++i) { } GPIO_ResetBits(GPIOC,GPIO_Pin_9); for (i = 0; i < 0x0000FFFF; ++i) { } } } |
Kodları yüklediğinizde GPIOC.8 ve GPIOC.9 a bağlı olan ledler yanıp sönecektir.
iyi çalışmalar.