STM32F407 Cortex M4 şamataları

Başlatan bunalmis, 16 Ekim 2011, 17:14:50

gambit1244

Alıntı yapılan: muhittin_kaplan - 22 Ekim 2011, 11:01:48
Bence bu frekans olayida guc tuketimiyle alakali


peki arkadaslar pic de budurum nasıldı boyle bi ozellik varmıydı yoksa
her bacakta sürekli clock varmıydı
mesela picinde low power modelleri var
o piclerde clocku kapatan registerlarmı vardı arm gibi
[email]tufan_ozbek@hotmail.com[/email] Yesterday is history. Tomorrow is a mystery. Today is a gift aslında bütün mesele bu.

z

#106
Bir portun cikisindaki yukun kapasitif degeri yuksekse;

porttan cikan sinyalin frekansi arttikca yuk uclarindaki sinyalimizin dalga sekli kare dalga sinyal seklinden uzaklasir ve genligi dusmeye baslar.

Ilk basta ST nin TI da oldugu gibi pinleri  surme kapasitesini (akim degerini) ayarladigini dusundum.

Bunun boyle oldugunu sinamak icin ledleri surekli yaktim ve OSPEEDR registerini bir 00 bir 11 degistirdim. Bu esnada led parlakligini gozledim ve degisen hic bir sey olmadi.
Demekki pin akimi yazilimla kontrol edilmiyordu.

Pinlerden 4Mhz sinyal cikacak sekilde bir kod yazdim. OSPEEDR ye once 00 yazarak  katalogdaki aciklamaya aykiri durum olusturdum.
Cunku 00 durumu max 2Mhz icin gecerli. Scopla led uclarindaki sinyale baktim.
Ardindan 11 yazarak portu 100Mhz moduna gecirdim ve gene led sinyaline baktim.

Arada hic fark yoktu.

Bu registerin amacini cok merak ediyorum.

Not: Biraz once ledler porta dogrudan bagli olduklari icin, portun cok fazla yuklendigini bu nedenle OSPEED registerine yapilan yuklemenin, led bagli pindeki dalga seklini gozleyemedigimi dusunup tamamen bos olan pinlerde bu registerin iceriginin etkisini gozledim.

PD11 pininden 4Mhz kare dalga cikarken

SPEED registerinin her bir iki bitine

00 yazinca 9ns rise ve fall time
01 yazinca 4ns rise ve fall time
10 yazinca 3.5ns rise ve fall time
11 yazinca 3.5ns rise ve fall time

degerlerini olctum.

Bu kez frekansi 18Mhz'e cikarttim ve

00 yazinca no sinyal !!!!!             
01 yazinca 4 ns rise ve 3 ns fall time  2.8v    !!!!
10 yazinca 4 ns rise ve 3 ns fall time  3.3v
11 yazinca 4 ns rise ve 3 ns fall time  3.3v

Frekansi 33Mhz yaptigimda

Gene 00 da hic sinyal yokken
diger modlarda sorun yok genlikler ve sureler hemen hemen ayniydi.

Bu durumda OSPEED registerinin etkisi tam olarak gozlenmis ve anlasilmis oldu.

Portun akim kapasitesini degistiriyor. Ancak bu etki ledde gozlemlenecek kadar etkili degil yada led portun bu ozelliginin duzgun calismasini engelleyecek derecede yukluyor.



Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/USER_MANUAL/DM00039084.pdf

Linkinde kartimizin semasi mevcut.

Bir arkadas CPU portlarinin hangileri bos hangileri kart uzerindeki diger ciplere baglanmis (kullanmamiz sakincali) bunun bir tablosunu cikartabilirmi?

Mesela

PB9 Audio_SDA
PB6 Audio_SCL
PC7 I2S3_MCK
PC10 I2S3_SCK
PC12 I2S3_SD
PA4 I2S3_WS

Pinleri kartta CS43L22 Audio cipi icin kullanilmis. Bunun gibi....

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

STM32F4 Clock Configuration Tool
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/DM00039457.pdf
http://www.st.com/internet/com/SOFTWARE_RESOURCES/TOOL/CONFIGURATION_UTILITY/stm32f4_clockconfig.zip

How to achieve the lowest current consumption with STM32F
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/DM00033348.pdf

Verdiğim linklerdeki 2. pdf de yazan açıklamaya göre (sf:19) OSPEEDR pinin akım tüketimini arttırıyormuş,
orada yazdığından anladığım kadarıyla pinden çıkan akım değilde, pinin sürülürken ihtiyaç duyduğu akım değerini arttırıyor
(yani bir mosfet sürücü ile çalışıyormuş gibi düşünürsek, mosfete basılan akımı değilde sürücüye girdiğimiz akım değeri arttırılıyor)
Eğer yanlış anlamadıysam...

Kartın üzerinde beslemeyi kesen jumpera bir ampermetre bağlayarak belki gözlemleyebiliriz.

Karttaki pinlerin kullanıldığı yerler sayfa 19daki tabloda belirtilmiş zaten hocam, bunu çiplere göre  mi düzenleyelim?

Prof.EleCTroN

#109
mozkan87 ın verdiği pdf yararlı oldu.

Alıntı yapılan: bunalmis - 21 Ekim 2011, 03:24:30
Cipimizin ART modulunde prefetch ile ilgili BUG var.  Bu BUG'in islemcinin performansini nasil etkileyecegi konusunda arastirma yapan varmi? ...
Wait state süresi < okunan 128 bit içindeki kodların icra süresi olduğu zaman prefetch özelliği yararlı oluyor. Mesela 4 adet 32 bit komut işleniyor ve WS=3 ise 3. komut işlenirken tekrar okuma yapılıyor ve sıraya ekleniyor böylece hafızadan okuma yapmak için süre harcanmıyor.

168 MHz de WS=6 ve komutlar 32 bit ise, o zaman prefetch  kullanmanın anlamı kalmıyor (eğer her komut 1 cycle da icra ediliyorsa)

Alıntı YapYazılımla bir pini 80 Mhz de toggle ettim. ART daki sorun kendini nasıl gösteriyor anlamadım.
prefetch özelliği pasif olsada muhtemelen "Instruction cache memory" aktif olduğu için burada hiçbir gecikme oluşmuyor.

Not: Tekrar belirtelim prefetch şuanda kullanılamıyor. İlerdeki uyarlamada (revision) bu sınırlama çözülecek.

MC_Skywalker

Alıntı yapılan: bunalmis - 22 Ekim 2011, 12:05:00
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/USER_MANUAL/DM00039084.pdf

Linkinde kartimizin semasi mevcut.

Bir arkadas CPU portlarinin hangileri bos hangileri kart uzerindeki diger ciplere baglanmis (kullanmamiz sakincali) bunun bir tablosunu cikartabilirmi?

Mesela

PB9 Audio_SDA
PB6 Audio_SCL
PC7 I2S3_MCK
PC10 I2S3_SCK
PC12 I2S3_SD
PA4 I2S3_WS

Pinleri kartta CS43L22 Audio cipi icin kullanilmis. Bunun gibi....



şimdi çizimleri print alayım, akşam eve dönünce bir gözden geçirir tablo yaparım.

z

#111
Evet OSPEED deki degisim pinden cikan akimin surekli akimini değil de sadece inis ve cikislardaki andaki akim degerini degistirdiginden bu degisimi ledde parlaklik olarak goremiyoruz da olabilir.

Intel 8051 ailesinde her ne kadar  cikis akım kapasitesi ayarlanamıyorsada, portlardan çıkan sinyallerin yükselen ve inen kenarlarında son derece belirgin akım basma emme yeteneği var. Scopla bu etki son derece açık gözlemlenebiliyor.

----------------------------------------------------------------------------------------------------------------------------------------------------------------
Kullanmamizda risk olusturacak pinleri alt alta basit bir tabloda siralarsak her an gozumuzun onunde kalir ve ileride ornek program yazarken yanlislikla bu pinleri secmeyiz.
----------------------------------------------------------------------------------------------------------------------------------------------------------------



Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mcan

Kartımız gelene kadar bendeki m3 kartını denemeye çalışıyorum, Derleyici ile alakalı anlamadım bir nokta main.c ye herhangi bişey yazmayıp derlersem hata veriyor,zaten içinde hiç birşey yokki neden system init de bilmemne bulunamadı tarzında hatalar veriyor? Ayrıca projeye system_stm32f10x.c dosyasını eklersem hiç bir hata kalmadan boş main() derleniyor.Anlamadım diğer nokta ise ben hiçbir #include şeklinde dosyayı main.c içinde tanımlamadım ,system_stm32f10x.c dosyasını sadece projeye ekleyip kalasöründe içine attım,bu dosyayı kullanacağımızı nerden biliyor?

z

Alıntı yapılan: mcan - 22 Ekim 2011, 13:49:04
Kartımız gelene kadar bendeki m3 kartını denemeye çalışıyorum, Derleyici ile alakalı anlamadım bir nokta main.c ye herhangi bişey yazmayıp derlersem hata veriyor,zaten içinde hiç birşey yokki neden system init de bilmemne bulunamadı tarzında hatalar veriyor? Ayrıca projeye system_stm32f10x.c dosyasını eklersem hiç bir hata kalmadan boş main() derleniyor.Anlamadım diğer nokta ise ben hiçbir #include şeklinde dosyayı main.c içinde tanımlamadım ,system_stm32f10x.c dosyasını sadece projeye ekleyip kalasöründe içine attım,bu dosyayı kullanacağımızı nerden biliyor?

Startup.s dosyasına bakarsan

Reset_Handler    PROC
           EXPORT  Reset_Handler             [WEAK]
           IMPORT  SystemInit
           IMPORT  __main

satırlarını goreceksin.

Bu kod, SystemInit kodlarını kendine dahil ediyor ve çağırıyor.

Aynı şekilde main fonksiyonu da istiyor.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

#114
En basit örnekle ilgili soru kalmadığına göre aşağıdaki kod üzerinde tartışalım.

Fakat şu sorunun gelmiş olması lazımdı.

Tamam bu kodları çok iyi anladık da ledleri yakıp söndürmek için yüzlerce register içinden sadece bu registerleri seçip kullanarak  kod yazılacağını nasıl bildin?
Örnek verdiğim kısa programda satırların yerlerini değiştirirsek o program çalışmaz.
Peki bu registerlere hangi sıra ile değer yükleneceğini nasıl bildin?

Bu iki sorunun cevabını aşağıdaki kodu da anlaşıldıktan sonra vereceğim.

Aşağıdaki program kendi halinde yanıp sönen led projesi. http://www.youtube.com/watch?v=g88ILHmWE98  Kodun SysInit rutinleri, registerleri düzenleyerek 8Mhz Xtal Osc ile CPU ve BUSları en yüksek hızda çalışmasını sağlar. LEDlerin bağlı olduğu pinleri (PD15,14,13,12) çıkış moduna ayarlar. ve 4 led yanıp sönmeye başlar.

#include "STM32F4xx.h"

void SystemInit()
{
volatile int i, DBG;
    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 = 0x07405408;       // PLL katsayilarini M=8, N=336, P=4 ve Q=7 yapalim
    RCC->CR |= 0x01000000;             // PLL calismaya baslasin  (Rehber Sayfa 95)
    while(!(RCC->CR & 0x02000000));  // Pll hazir oluncaya kadar bekle
//  FLASH->ACR = 0x00000705;         // Flash ROM icin 6 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
    FLASH->ACR = 0x00000605;         // Flash ROM icin 6 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
    GPIOD->MODER = 0x55000000;     // GPIOD nin 15, 14, 13, 12 pinleri cikis tanimlandi (LEDler icin)
    GPIOD->OSPEEDR= 0xFFFFFFFF;   // GPIOD nin tum cikislarinı en yuksek hizda çalışacak moda geçirelim
}

void Delay()
{
unsigned int i;

     for(i=0;i<0x800000;i++);
}

int main()
{
    while(1)
   {
     GPIOD->ODR= 0x0000F000;     // Ledler yansin
     Delay();
     GPIOD->ODR= 0x00000000;     // Ledler sonsun
     Delay();
   }
}

Not: Hiç C bilmeseniz dahi bu tartışmaya katılın. Hiç bir satır anlaşılmaz kalmasın.

Muhakkak sorun. Fakat soru sormadan önce ilgili registeri Rehberden bulup o registerde ne olup bitiyor bakın fikriniz olsun.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mcan

system_stm32f10x.c gibi dosyaların içinde hazır system_init bölümü vede bazı default ayarlamalar var sanırım. Ayrıca stm32f10x_RCC.H gibi dosyalar da var bunlar bizim ayarladığımız yazmaşları otomatik ayarlayan fonksiyonları mı barındırıyor? Forumda bahsedilen st nin hazır driverları bunlarmı?

z

mcan sanki icimden bir his bu register olaylarini sevemedigini soyluyor. Dogrumu? Hazir kutuphaneler kullanip isin bu kismindan kacmak gibi bir niyetin mi var?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

elimde 32f100 kit mevcut
üzerinde kendim anlayarak bir bilinky yapmaya çalışıyorum. zor, anlayamıyorum.

z

#118
Kitiniz gelipte verilen ornekleri derleyip kite yukleyip calistiklarini gorunce ve burda anlatilanlari anladikca isler cok kolaylasacak.

(Bu arada kitimizde STM32F407 den baska bir de STM32F103  var ve bunu SWD islemleri icin kullaniyor.)

ARM islemciyle projemiz sayesinde tanisan ozellikle de daha onceleri kullandiklari cipin registerlerinin anlatildigi dokumanlari okuma aliskanliklari olmayan arkadaslarin su anda
inanilmaz zorlandiklarini biliyorum.

Su anda tartistigimiz konularda adi gecen registerleri Rehber dokumanindan acip anlamaya calismaz ve sormazsaniz anlayamazsiniz.

Bu arada  eger elektronik temelli olmayip sadece yazilimci temelli arkadaslar varsa onlar daha da zorlanabilir.

Fakat hazir kutuphaneler bir cozumdur bunlardan yararlanarak uygulama kodlarını yazabilirler, ancak ne olursa olsun registerleri anlamalarini oneriyorum.

Sonucta ST firmasinda kutuphane fonksiyonlarini yazan adamlar registerden yola cikiyorlar.

Register programlama konusuna ısınırsanız, önünüze hangi firmanin hangi çipi konulursa konsun şıkır şıkır çipe kod yazabilirsiniz. Yeterki çipin rehber tarzında dokümanı olsun.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

#119
Pin Çıkışlarını Modüllere göre düzenleyerek yükledim, ayrıca yanlarına kullanılabilecek fonksiyon tiplerini de belirttim
eğer bir modülle çalışmak istersek bulunması kolay olsun diye,
bir de siz gözatın yanlış yazdığım bir nokta var mı bunun kontrolünü de yapmış oluruz

http://www.4shared.com/file/8MeEKyr8/STM32F4Discovery_Pinouts.html
(Not: Eğer sayfayı açamıyorsanız DNS'inizi değiştirin)


Edit:hatalı dosya