Stm32L152 BaudRate hatası

Başlatan mistek, 13 Aralık 2014, 20:05:37

mistek

Stm32L152 NUCLEO kitinde Standart Peripheral Library kullanıyorum(Keilde derliyorum) tüm gün boyunca UART ayarlarını yapmaya çalıştım ne yaptığımdan eminim ama tekrar tekrar kontrol ettim yazılımda donanımda sorun yoktu.

En son Bilgisayarda bütün BaudRate değerlerini deneyerek teker teker bağlanmayı denedim. 115200 olarak ayarladığım baudrate değerine bilgisayar tarafında 57600 değerini ayarladığımda doğru iletişimi kurabildim. Yani mikroişlemci tam yarısına ayar yapıyor.

USART_InitStructure.USART_BaudRate = 115200;

SystemCoreClockUpdate();
Fonksiyonuyla işlemcinin saat frekansını kontrol ediyorum

SystemCoreClock Değeri tam 32MHz okunuyor.

Kart üzerinde kristal yok. Debug yapıyorum kodlar PLL giriş kaynağını HSE olarak ayarlıyor.
HSE değeri .h dosyasında 8MHz olarak tanımlanmış. PLL çarpanı 12 değerini alıyor PLL bölen değeri 3 oluyor. Böylelikle SystemCoreClock hesaplanırken 32MHz sonucu çıkıyor. Ama böyle olmaması lazım.

RCC ayarlarını HSI'den çalışacak şekilde kendim tekrardan ayarladım (32MHz).

İşlemcinin MCO pininden çıkış aldım ve aynı zamanda SystemCoreClock değerini ekrana yazdırıyorum.
Osisloskopta Yaklaşık 32MHz sinüs görüyorum. Ama SystemCoreClock değeri 20MHz   2MHz civarında bir değerle geri dönüyor.

Sorun kütüphanelerde mi bende mi?
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

mistek

Alıntı yapılan: gerbay - 13 Aralık 2014, 20:13:49
hocam uart ın bağlı olduğu bus ın frekansına göre yapacaksın hesabını

Hocam PLL çıkışı ile bütün Buslar aynı frekansta çalışıyor.
BaudRate hesabınıda ben yapmıyorum 115200 yazıyorum fonksiyonun içerisinde kütüphaneyi yazan arkadaşlar ona göre ölçüp biçiyor ayarlıyor.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

LukeSkywalker

#2
Hangi osilatörü kullanıyorsunuz?
Aynı şey benim de başıma Nucleo L053 kitinde geldi. Ben HSI ayarlayınca sorun çözüldü.

MrDarK

Çok büyük ihtimalle osilatör ayarlarını doğru yapamıyorsunuz, kart üzerinde takılı olan frekans ve pll ayarlarını kontrol edin derim. Kütüphane fonksiyonlarında hata aramayın :)

Bende ilk denerken çok zorlanmıştım.
Picproje Eğitim Gönüllüleri ~ MrDarK

Karamel

bende birsey merak ediyorum hocam. bu microcontrollerin stm32f407 den pin vs disinda onemli olarak ne farki var? bu microcontroller i ogrenmek gerekirmi? eger onemli ir microcontroller ise yazin bunu ogrenebilirim ::)

MrDarK

Alıntı yapılan: Karamel - 13 Aralık 2014, 21:23:23
bende birsey merak ediyorum hocam. bu microcontrollerin stm32f407 den pin vs disinda onemli olarak ne farki var? bu microcontroller i ogrenmek gerekirmi? eger onemli ir microcontroller ise yazin bunu ogrenebilirim ::)

32L serisi ultra low power özellikli cortex m3 serisi bir mikro, dahili custom lcd driver vb epey özellikli birşey. eğer ultra low powerla işin yoksa gerek yok :)
Picproje Eğitim Gönüllüleri ~ MrDarK

LukeSkywalker

Stm32f103 baslangic icin iyi bir islemci bence..

Karamel

hocam yazin zaten stm32f103 icin yaptigim pcb ile calisacagim. sizler bu microcontroller a gecmissiniz. bende belirgin farklari neler onlari ogrenmek istedim :)

LukeSkywalker

Ben elime kit gectigi için n kurcaladim. 32Mhz max hiz mesela stm32L053.

CLR

Büyük ihtimalle gerbayın dediği gibidir,
RCC içinde APB1 ve APB2 bus frekansları farklı ayarlanmış olabilir, bunu şöyle test edebilirsin, usart1 ve 2'yi aynı usart ayarlarını kullanaran init et ve çıkışı gözlemle
hangisinde karakterler yanlış geliyorsa o tarafın bus ayarı RCC registerleri içinde  /2 olabilir.   
Knowledge and Experience are Power

mistek

#10
Alıntı yapılan: MrDarK - 13 Aralık 2014, 21:02:20
Çok büyük ihtimalle osilatör ayarlarını doğru yapamıyorsunuz, kart üzerinde takılı olan frekans ve pll ayarlarını kontrol edin derim. Kütüphane fonksiyonlarında hata aramayın :)

Bende ilk denerken çok zorlanmıştım.

Niyetim kütüphanede hata var demek değil, kart üzerinde kristal yok ancak ayarlamayı doğrudan HSE bağlıymış gibi yapması garip geldi.
HSI'dan çalışacak şekilde ayarladığımda sorun yok işlemci 32MHz de çalışıyor ama SystemCoreClock yanlış değer alıyor.


mesaj birleştirme:: 13 Aralık 2014, 22:09:58

Alıntı yapılan: CLR - 13 Aralık 2014, 22:03:36
Büyük ihtimalle gerbayın dediği gibidir,
RCC içinde APB1 ve APB2 bus frekansları farklı ayarlanmış olabilir, bunu şöyle test edebilirsin, usart1 ve 2'yi aynı usart ayarlarını kullanaran init et ve çıkışı gözlemle
hangisinde karakterler yanlış geliyorsa o tarafın bus ayarı RCC registerleri içinde  /2 olabilir.   

Hocam usart1-2 ayarladım ayrı ayrı denedim ikiside 115200 ayarladığımda garip karakterler gösterdi. Bi ihtimal max232 çevirici ek kartımda sorun olabilir onuda değiştirip deneyeceğim.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

robomaster

Hocam STM den anlamam ama soft uart mı kullanıyorsun, donanım mı?
Eğer soft kullanıyorsan sorunun baud rate error istenilen sınır içinde değil.

mistek

Alıntı yapılan: robomaster - 13 Aralık 2014, 22:21:42
Hocam STM den anlamam ama soft uart mı kullanıyorsun, donanım mı?
Eğer soft kullanıyorsan sorunun baud rate error istenilen sınır içinde değil.

Donanım USART modülünü kullanıyorum.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

CLR

Osiloskop ile bit süresinden veya varsa logic analyzer ile kolayca bulabilirsin.
Knowledge and Experience are Power

Klein

https://www.picproje.org/index.php/topic,43088.msg313853.html#msg313853

Yukarıdaki linkte belirtilen düzenlemeyi yaparsanız  veya programın başına

#define HSE_VALUE    ((uint32_t)8000000)

satırını eklerseniz sorununuz çözülür muhtemelen. 
Not: buradki değer  kartın üzerindeki gerçek kristal frekansının değeri olmalı.