STM32 miniDev’de PB8 ve PB9 pinleri JP7 konnektörüyle kullanıcı uygulamaları için dışarı verilmiş olmasının yanı sıra sırasıyla DS2 ve DS3 LED’lerine de bağlanmıştır. Bu uygulamada DS2 LED’i sürekli yanmakta, DS3 LED’i de flash yapmaktadır. uVision4′te Project -> New uVision Project seçilerek yeni bir proje yaratılır. Proje yaratılırken, projenin hangi klasöre kaydedileceği ve proje adı girilir. Ardından işlemci seçilir (STM32F103C8). Daha sonra uVision4 startup kodunu projeye dahil etmek isteyip istemediğimizi sorar, buna OK dediğimizde yeni proje STM32F10x.s dosyasıyla açılmış olur. GPIO uygulamasında ..\Keil\ARM\Boards\Keil\MCBSTM32\Blinky projesi referans alınmıştır. Bu proje içerisinden STM32_Init.c, STM32_Init.h, STM32_Reg.h yeni oluşturulan projeye dahil edilir. Bu uygulamada GPIO_main.c projenin main kısmı olarak oluşturularak projeye dahil edilir. Kaynak kodları projeye dahil etmek için menüden Project -> Manage -> Components, Environment, Books… kullanılır.
Project -> Options for Target ile donanım ve yazılımla ilgili gerekli ayarlar yapılır. STM32 miniDev’de 4MHz kristal kullanıldığından aşağıdaki resimdeki gibi bu değer girilir.
GPIO uygulamasında PB8 ve PB9′a bağlı LED’leri kontrol etmek için bu pinleri output olarak seçmek gerekir. Seçim işlemi STM32_Init.c kaynak kodunda Configuration Wizard sekmesinden yapılabilir. Aşağıdaki resimde görüldüğü gibi PB8 ve PB9 output yapılmıştır. Diğer pinler bu uygulamada bizim için önemli olmadığından dikkate almaya gerek yoktur. Configuration Wizard’la ayrıca clock, usart, timer, vs. ayarları yapmak mümkündür.
merhabalar, çok yararli çalişmalar ve basit anlaşilir anlatiminiz var sitenizi çok yararli buldum, burda verdiğiniz program sayesinde keil de bişeyler anlamaya başladim, acaba şöyle biraz geliştirsek bloğu,
#define PIN_B7 (1 <ODR = (GPIOB->ODR & ~PIN_B7) | (x ? PIN_B7 : 0);
yukarda out tanimlamasi gibi acaba input nasil yanimlayabiliriz?
Merhaba,
Input tanimlamayla ilgili küçük bir fonksiyon kullanılabilir. İlgili Keil örneğini biraz sadeleştirirsek:
#define S2 0x0001 // PA0 : S2
/*----------------------------------------------------------------------------*/
int S2Pressed (void)
{
static int S2KeyPressed = 0;
if (S2KeyPressed)
{
if (!((GPIOA->IDR & S2) == 0 )) // Check if S2 is not pressed
S2KeyPressed = 0;
}
else
{
if (((GPIOA->IDR & S2) == 0 )) // Check if S2 is pressed
{
S2KeyPressed = 1;
return (1);
}
}
return (0);
}
/*----------------------------------------------------------------------------*/
Bu fonksiyonu S2Pressed() şeklinde çağırırsak ve PA0′a bağlı S2 butonu basıldıysa bize “1″ değerini
geri dönüş değeri olarak verir.
evt örnek çok basit ve güzel yeni başlayanlarin anlayacaği türden ..katki sağlamak açisindan bende bir örnek ekliyorum, deneyip çaliştirdim.
#define BUTON (GPIOD->IDR & 0×0001) /* pORTD_0 */
#define GPIO_1(x) GPIOB->ODR = (GPIOB->ODR & ~PIN_B8) | (x ? PIN_B8 : 0);
#define GPIO_2(x) GPIOB->ODR = (GPIOB->ODR & ~PIN_B9) | (x ? PIN_B9 : 0);
#define PIN_B8 (1 << 8)
#define PIN_B9 (1 << 9)
/*******************************************************************************
* DELAY FUNCTION *
*******************************************************************************/
static void delay_for_main (int cnt)
{
int i;
while (cnt--)
{
for (i = 0; i < 1000; i++);
}
}
/*******************************************************************************
* MAIN FUNCTION *
*******************************************************************************/
int main (void)
{
stm32_Init ();
delay_for_main(5000);
while (1)
{
if (BUTON == 1)
{
delay_for_main(5000);
GPIO_1(1)
delay_for_main(2000);
GPIO_1(0)
}
}
}
Paylaşımınız için teşekkür ederim. (Daha kolay okunabilmesi açısından bazı düzeltmeler yaptım.)
keil içinde birçok örnek var fakat sizin kodlama mantiğiniz çok öğretici geldi bana, şuanda ds18b20 isi sensöründen bilgi okumaya çalişiyorum, elimde hazir örnek var ve çalişiyor fakat internal kesmeler olduğu için karişik geldi (şimdilik) acaba bu sensör için sizin kurmuş olduğunuz basit ve anlaşilir bir kod varmidir elinizde…