Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Stm32f10x

Başlatan yldzelektronik, 16 Haziran 2014, 15:07:21

yldzelektronik

Merabalar,

Stm32f103 için STM32F10x_StdPeriph_Lib_V3.5.0 indirdim.

İçerisindeki örnek programları inceliyordum.Ancak kafama takılan bazı kısımlar var.

Main içinde hiçbir yerde system init veya RCC_Configuration gibi bir çağrı yok.

Mcunun çalışma frekansını define ile system_stm32f10x.c dosyasında yapılmış.

Ancak main içinde hiç bir yerde bir çağrı yok.

Şimdi birşey fark ettim.Startup dosyasında;

IMPORT  SystemInit şeklinde bir bildirim var.Bu ne demek?Bütün hali şöyle;

                
; Reset handler
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                IMPORT  SystemInit
                LDR     R0, =SystemInit
                BLX     R0               
                LDR     R0, =__main
                BX      R0
                ENDP


Acaba keil derlerken kendisi mi hallediyor?Nasıl oluyor da mcunun osc init kısmı falan halediliyor?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

fgokcegoz

Yazılım main e düşmeden önce startup kısmına düşüyor. Bu aşamada system init fonksiyonu çağrılıyor. RCC Konfigürasyonu burada hallediliyor. Ondan sonra kod, main e düşüyor... Ve senin yazdığın kod dan devam ediyor...
"Vicdanın ziyası, ulûm-u diniyedir. Aklın nuru, fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder." (Bediüzzaman Said Nursi)

yldzelektronik

Anladım.Teşekkürler.

Peki mcu ayaklandırmak için izlememiz gereken yol nedir?

Basit bir buton kontrolünü ele alalım.Butona basıp ledi yakalım.

İlk önce system init ile mcunun clock ayarlarını yapıyoruz.

Daha sonra gpio init etmemiz gerekicek.Bunun için en başta hangi bus üzerinde ise onun clockunu aktif etmemiz gerekicek;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx, ENABLE); gibi.

Daha sonra GPIO_InitTypeDef yapısını kullanarak GPIO ları port port init edeceğiz.

Buraya kadar doğru mudur?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Mucit23

Evet Doğrudur,
GPIO'yu init ettikten sonra GPIO kütüphanesindeki fonksiyonları kullanarak işlemlerini yapabilirsin

muhittin_kaplan

Alıntı Yap
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);
}


yldzelektronik

Anladım.

Ancak kafamı karıştıran bir nokta var.Input için 4 mod var.

Floating,Pull Up, Pull Down. Bunlar tamam. GPIO_Mode_AIN dediği nedir?

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; ile pin pull up oldu, doğru mu?

Peki ben dışarıda pini pull up yaptım.GPIO init ederken de pull up olarak belirtmek durumundayım sanırım?Floating yapsam ne olur?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

fgokcegoz

Floating, Pull-Up, Pull-Down modları işlemciye göredir. Yani dışarıdan pull-up veya pull-down yapacaksanız floating olarak ayarlayabilirsiniz. Pull-Up veya Pull-Down moduna alacaksanız, dahili olarak zayıf pull (up/down) yapılmış olur. İlgili pini analog input olarak kullanacaksanız da, GPIO_Mode_AIN olarak ayarlayacaksınız.
"Vicdanın ziyası, ulûm-u diniyedir. Aklın nuru, fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder." (Bediüzzaman Said Nursi)

muhittin_kaplan

1.Analog Input
IPU, Input Pull UP
Hayır değilsin, Eğer Dışardan PullUp Yaparsan Programda Float Yapabilirsin.

yldzelektronik

Alternate function ile bir donanımı kullanmak istersek süreç nasıl olacak?

Örneğin tft için fsmc ihtiyacım var.Bunun için pin yapılandırması nasıl yapılmalı?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

kimlenbu

fsmc ayarları için forumda ssd1963 için verilmiş kodlar var, oradan feyz alabilirsin. Ben olsam ilgili lcd için direkt hazır proje arardım , fsmc yapılandırmasından yazma, çizme fonksiyonlarına kadar hazır geliyor.

yldzelektronik

Buldum aslında fakat indiremiyorum.Dosya.tc falan iş yerinde blocklu.

Rica etsem bir yere upload eder misiniz?Veya code tag ile buraya koysanız?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Müh. müh.

#11
yldzelektronik

Bende şuan st peripheral lib i öğrenmeye çalışıyorum.

Tavsiye edeceğim yöntem şu, öncelikle chip in reference manual ini okuyun. Orada register seviyesinde anlatım mevcut. Led yakıp söndürmek için adım adım neler yapılacağını anlıyorsunuz. Sonrasında, ST lib te, RCC->AHB1ENR gibi direk register a erişmiyorsunuz, RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); böyle basitçe erişim sağlıyorsunuz.


Şuan librarlerin içersini açıp, tek tek analamaya çalışıyorum. Sanırım st liblerin help dosyaları gibi birşey yok? Nette mcu nun her birimi için yapılmış önekler varmıdır? (mesela uart, spi, i2c, fsmc vs..)
Destiny of white is dirtied. Destiny of black is found guilty...

X-Fi

#12
Alıntı yapılan: Müh. müh. - 17 Haziran 2014, 21:13:37
....RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); ....

Hocam yukarıdaki yazım STM32F10x için yanlış doğrusu şu olacak; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);


Aşağıdaki sayfanın design resource kısmında stdlibrary ile yapılmış yazılımlar mevcut öğrenmenizde yardımcı olur.

http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1031/LN1565/PF206936
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

Müh. müh.

Alıntı yapılan: X-Fi - 17 Haziran 2014, 21:20:58
Hocam yukarıdaki yazım STM32F10x için yanlış doğrusu şu olacak; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);


Aşağıdaki sayfanın design resource kısmında stdlibrary ile yapılmış yazılımlar mevcut öğrenmenizde yardımcı olur.

http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1031/LN1565/PF206936

Yukarıda anlattığım bilgileri stm32f407 yi baz alarak verdim. Elimin altında reference manuel i ve st lib. i olduğundan oldu. Mesajım zaten, nasıl yapacağımızı anlatmayı amaçlıyordu.

Evet örnekler varmış. İnceleyip, öğrenmek gerekli. Yalnız mcu içersinde 15-20 kadar birim var. Düzgün bir help dosyası ve içersine çok basit kod satırları ile, hiç birşey bilmeden bile 15 dk da yazılım yazılabilirdi..
Destiny of white is dirtied. Destiny of black is found guilty...

muhittin_kaplan

Hocam 103 ile 100 un lib ayni. Bu acidan yukarda kensi blogumu ornek gosterdim. Ayni yazilar forumda da var ama bulmasi uzun suruyor. Eger lib kullanarak debug yaparsaniz yine gorecek oldugunuz Tim2->cnt gibi register erisimidir.