Picproje Elektronik Sitesi

PICPROJE PROGRAMLAMA DERSLERİ => STM32 Örnekleri => Konuyu başlatan: Gökhan BEKEN - 05 Mart 2015, 14:49:48

Başlık: HAL lib. ile birlikte Standard peripheral library
Gönderen: Gökhan BEKEN - 05 Mart 2015, 14:49:48
Merhaba arkadaşlar,
Cubemx programı ile yaptığım bir uygulama var(HAL kütüphanesi), bunu standart kütüphanelerle yapmam çok zor(yapamam yani).
bir de standart kütüphane ile yaptığım başka iki uygulamam var.
HAL ile ürettiğim projede standart kütüpaneyi manuel eklemeye çalışıyorum ancak çakışmalar oluyor, daha önce böyle birşey deneyen oldu mu?
Nasıl çözebilirim bu sorunu?
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: yamak - 05 Mart 2015, 15:00:22
Hocam denemedim de.Merak ettiğimden soruyorum std lib ile neden yapamıyosunuz.Açıkçası ben HAL e güvenip de büyük bi projede kullanamam.
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: Gökhan BEKEN - 05 Mart 2015, 15:13:01
Hocam yapacağımız proje normalde standartlarda yok, bu yüzden normalde HAL ile ürettiğimiz kodu da direkt kullanamıyoruz. Ama kütüphanede değişiklik yaparak çalıştırabildik.
USB ile ilgili bir proje, içindeki standart usb classları normalde işimi görmüyor. Çözümü ancak böyle sağladık.
Sorun ise standart kütüphane ile zamanında uğraşarak çözdüğümüz işleri bu projeye eklememiz gerekiyor, bu kısımları HAL ile yaparsak bizim için zaman kaybı olacak, dediğiniz gibi ben de çok güvenmiyorum, çalışacağı bile meçhul. Standart kütüphaneyi ekleyebilirsem sorunum çözülecek.
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: yamak - 05 Mart 2015, 15:36:48
Anladım hocam.Daha önce böyle bişey denemedim.Ama üşenmeyip std lib'deki tüm fonsiyonların başına STD_ gibi bişey eklenebilir.
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: Gökhan BEKEN - 09 Mart 2015, 10:20:05
Aslında çok fazla değişiklik yapmama gerek kalmadı, en önemli sorun, stm32f4xx.h dosyası hem hal lib'de var hem st perb. lib.'de var bunu önlemek için
standart lib'deki bütün h dosyalarını açtım içlerinde #include "stm32f4xx.h" kısımlarını #include "PICPROJE_stm32f4xx.h" yaptım. Tabi dosyanın gerçek adını da o şekilde değiştirdim.
Bir de stm32f4xx.h dosyası ve PICPROJE_stm32f4xx.h dosyasında aynı isimde olan tanımlamalar vardı, yine başına "PICPROJE_" ekleyerek, çakışan tanımlamaları düzelttim.
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: M.s.d - 26 Ağustos 2015, 16:36:25
Pic programlamayla uğraşıyorum bende arm a geçiş yapmak istiyorum. biraz araştırma fırsatım oldu benim gibi yeni başlayanlar için cubemx ile uygulama yapmak daha kolay gibi. en azından main kısmını aradan çıkarmış oluyorum bu sayede  :) ama sizin bu hal lib. e olan güvensizliğinizin sebebi nedir? yeni başlayacak biri için neyi önerirsiniz. maalesef daha development kiti alamadığım için sadece araştırmayla yetiniyorum. açıkçası bi led yakıp söndürmüşlüğüm bile yok. onun için yanlış bir şey yazdıysam lütfen bu söylediklerimi dikkate alarak cevaplamanızı istiyorum :)
teşekkürler.
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: piscopatos2 - 07 Ekim 2016, 15:49:27
hal'i bırak std per. lib'e de güvenmiyorum. CMSIS ten öte köy yok.
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: Cemre. - 07 Ekim 2016, 21:32:50
Hocam ne gibi sorunlar yaşadınız da bu kadar kızgınsınız HAL ve StdPLib'e?
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: skara1214 - 07 Ekim 2016, 23:17:05
Hal guzelce calisiyor sikinti goremedim ben, ticari projede de kullaniyorum
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: piscopatos - 08 Ekim 2016, 19:38:19
en basitinden HAL ve std lib'de pinleri giriş çıkış olarak ayarlamak için bir sürü kod yazmak gerekir. aşağıdaki 8 satır kod için ne kadar uğraşcağınızı düşünün. hata olarak ben henüz bir hataya rastlamadım fakat başka forumlarda sıkıntı yaşadıklarını söyleyenler vardı, bir daha karşılaştığımda linkini eklerim buraya. hal ve std lib kullanmayın demiyorum, fakat kullanılan tüm fonksiyonların içeride ne yaptığını bilmek lazım, bu kütüphaneleri çalışmak C dilinde kendimizi geliştirmek ve daha iyi öğrenmek için de çok güzel bir kaynak.


RCC->APB2ENR = 0 |RCC_APB2ENR_IOPCEN |RCC_APB2ENR_IOPAEN | RCC_APB2ENR_USART1EN|RCC_APB2ENR_AFIOEN;
GPIOC->CRH = 0x00200000;//pinC13 çıkış
GPIOA->CRH = 0x000034B0;//pinA11 çıkış, pinA9 pinA10 uart tx rx
GPIOA->CRL = 0x88888888;//A0---A7 anahtar girisleri
AFIO->EXTICR[1] &=0xFFFF0000; //exti port source  exti0-exti3 (pinA0-dan pinA3'e)
AFIO->EXTICR[2] &=0xFFFF0000; //exti port source exti4-exti7 (pinA4-den pinA7'ye)
//interrupt mask register---rising trigger register
EXTI->IMR |= 0x000000FF;
EXTI->RTSR |= 0x000000FF;

Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: quarko - 09 Temmuz 2017, 13:31:46
Aradan zaman geçmiş ama olsun. HAL ve SPL nin birbirine göre üstünlükleri var. Hala Standart Peripheral Library leri tercih eden bir sürü kullanıcı mevcut. Fakat artık ST, HAL e destek veriyor. Belki bir zaman geçmek gerekecek. Şu sıralar uğraştığım bir problemle araştırma yaparken bu konuya denk geldim. :) HAL ile yaptığım i2c oled uygulamasını, std peripheral library ile bir türlü yapamadım. i2c biriminin clock unun aktif ettiğimde, busy biti 1 de çakılı kalıyor. HAL ile yaptığım projedeki aynı adımları uygulasam bile maalesef çözülmedi.
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: muhittin_kaplan - 09 Temmuz 2017, 14:37:35
std lib ile i2c çalıştırabilen var mı ?  ???
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: okg - 09 Temmuz 2017, 16:41:19
Alıntı yapılan: muhittin_kaplan - 09 Temmuz 2017, 14:37:35
std lib ile i2c çalıştırabilen var mı ?  ???

hocam ben arada yanlışlıkla çalıştırabiliyorum  ;D
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: MC_Skywalker - 09 Temmuz 2017, 17:37:05
HAL iyi güzelde flash belkeği sömürüyor.


(http://i.hizliresim.com/RPPdLZ.jpg)
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: quarko - 09 Temmuz 2017, 20:33:19
Alıntı yapılan: muhittin_kaplan - 09 Temmuz 2017, 14:37:35
std lib ile i2c çalıştırabilen var mı ?  ???

@muhittin_kaplan Hocam madem bu kadar problemli. Neden bir güncelleme yapmıyorlar. HAL ile bu i2c güzel çalışabiliyorsa, sıkıntının nerede olduğu aşikar... Çözülebilmesi lazım aslında.  :-\
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: muhittin_kaplan - 09 Temmuz 2017, 20:35:12
Ben nezaman i2c calismasi yapsam beceremedim std ile, gittim register seviyesi kodladim.
Hata bende de olabilir.
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: quarko - 09 Temmuz 2017, 20:39:21
Yapılan şeyler aynı aslında. Ama problem olmaması lazım. Büyük bir ihtimalle stm32 lerin i2c birimlerinde bug var. Ve hal ile bunu çözmüşler. O kadar. Araştırma yaparken, bu tarz sorunla karşılaşanlara çok denk geldim. Genelde de bu busy flag sorunu. Errata sheet lerde bununla alakalı bir prosedür bile var.
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: mr.engineer - 11 Ocak 2020, 23:07:55
Alıntı yapılan: okg - 09 Temmuz 2017, 16:41:19hocam ben arada yanlışlıkla çalıştırabiliyorum  ;D

Merhaba,
Şu anda ben de spl (standart perip. lib.) kullanarak I2C çalıştırmaya çalışıyorum. Simülasyonu proteus üzerinden deniyorum. Kodu kendim yazdım, hazır kodlar kullandım fakat bir türlü olmadı. İnternette araştırırken yorumlarınızı gördüm. Elinizde hazır kod varsa paylaşır mısınız?

Alıntı yapılan: muhittin_kaplan - 09 Temmuz 2017, 20:35:12Ben nezaman i2c calismasi yapsam beceremedim std ile, gittim register seviyesi kodladim.
Hata bende de olabilir.

Register seviyesinde ben de denedim ama başarılı olamadım. Elinizde hazır bir kod varsa siz de paylaşır mısınız?

Teşekkürler.
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: ibocakir - 12 Ocak 2020, 00:12:19
Şu dersi izleyerek I2C registerlarına erişerek kodunuzu yazabilirsiniz:

https://www.udemy.com/course/embedded-systems-bare-metal-programming/

I2C'nin tam anlamda nasıl çalıştığını anlamak için ise şu dersi önerebilirim:

https://www.udemy.com/course/mastering-microcontroller-with-peripheral-driver-development/
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: mr.engineer - 12 Ocak 2020, 00:21:43
Alıntı yapılan: ibocakir - 12 Ocak 2020, 00:12:19Şu dersi izleyerek I2C registerlarına erişerek kodunuzu yazabilirsiniz:

https://www.udemy.com/course/embedded-systems-bare-metal-programming/

I2C'nin tam anlamda nasıl çalıştığını anlamak için ise şu dersi önerebilirim:

https://www.udemy.com/course/mastering-microcontroller-with-peripheral-driver-development/

Teşekkürler ama bunun için  bu kadar para vermeye gerek yok. Zaten nasıl çalıştığını anladım biliyorum. Dediğim gibi kendim de yazdım hazır kodları da kullandım fakat olmadı. Bu konuda da yazanlar olmuş I2C'de sıkıntı var diye. O yüzden çalışır bir kod arıyorum veya kendi kodumu da paylaşabilirim.

Kendi kodumdaki sıkıntıyı da yazayım. Start generation yaptıktan sonra gördüğüm kadarıyla start bit set edilmiyor. Yani en baştan hata alıyorum. Aşağıda kodun bir parçasını paylaşıyorum. Son döngüde sonsuz loop'a giriyor.




    // Wait until I2Cx is not busy anymore
    while (I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY));
      
    // Generate start condition
    I2C_GenerateSTART(I2Cx, ENABLE);

    while (!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT));
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: mr.engineer - 12 Ocak 2020, 13:30:02
günceldir.
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: muhittin_kaplan - 12 Ocak 2020, 18:48:27
HAL ile örnek yapmıştım bir ara
https://www.youtube.com/watch?v=C12m2lpSHqc
https://yadi.sk/d/XZaPISO13At8PN
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: Yuunus - 12 Ocak 2020, 18:49:23
Kutuphane yerine dogrudan registerler lara bakin.
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: mr.engineer - 12 Ocak 2020, 19:24:53
Alıntı yapılan: digiman - 12 Ocak 2020, 18:49:23Kutuphane yerine dogrudan registerler lara bakin.

Denedim, fakat olmadı ne yapsam aynı yerde hata alıyorum. Start condition verdikten sonra start bit set edilmiyor. Sanki I2C peripheral hiç açılmıyor gibi bir durumla karşılaşıyorum.
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: mr.engineer - 12 Ocak 2020, 19:27:08
Alıntı yapılan: muhittin_kaplan - 12 Ocak 2020, 18:48:27HAL ile örnek yapmıştım bir ara
https://www.youtube.com/watch?v=C12m2lpSHqc
https://yadi.sk/d/XZaPISO13At8PN

Teşekkürler. CubeMx düzgün çalışmadığı için silmiştim. Tekrar yükleyip bir de ordan deneyeceğim. Açıkcası Cubbemx'i hiç sevmiyorum ama deneyeceğim.
 
Başlık: Ynt: HAL lib. ile birlikte Standard peripheral library
Gönderen: HAKKITANIR - 12 Ocak 2020, 23:26:11
kullandığınız kütüphaneyi bilmiyorum.
yalnız I2C standartlaşmış bir seri haberleşme olduğundan, aşağıdaki toplam 7 fonksiyonla haberleşme sağlanıyordur diyebilirim.
sizin kütüphane içerisinde altdaki fonksiyonların hepsi eksiksiz olarak tanımlanmış mı?
sizin kütüphanedeki yazımları tam olarak böyle olmayabilir, ama bunlara benzer yazımda olmalı ve işlevleri aynı bunlar gibi olmalı diyebilirim.
Bu fonksiyonların içerisinde de bir kaç satır I2C registerleri ve while(x) gibi bekleme döngüsü olmalı.
Ben sizin kütüphanenizi kullanmadığımdan fonksiyon içlerindeki register kod satırlarını burada karışıklık olmasın diye göstermedim.

Sizdeki I2C fonksiyonlarını ve bu fonksiyonların içerisindeki register / wehile(x) yazım kodlarını görebilirsek belki daha fazla yardımcı olunabilir.

StartI2C_(void);
StopI2C_(void);
AckI2C_(void);
NotAckI2C_(void);
RestartI2C_(void);         
MasterWriteI2C_(unsigned char data_out);
MasterReadI2C_(void);

Bunların dışında Main içerisinde I2C baudrate ve control register ayarları gerektiği gibi yapılması gerekir.

Bunların haricinde gerisi sadece okuma ve yazma rutin kodları şeklinde ve okuduğunuzu atayacağınız sizin tanımladığınız bir değişken kullanımı halinde olması yeterli olmalı diye düşünüyorum.
Okuma yazma işlemleri mikroişlemci ile haberleşme yapacağınız çipin özelliklerine göre değişebilir.
Bu kısım haberleşilecek çipe göre değiştiğinden while(1) içerisindeki kullanıcı kodlarınıda henüz değinmedim.

Siz öncelikle I2C kütüphane içerisinde yukarıdaki kontrol fonksiyonlarını ve bu fonksiyonların içerisindeki kod-komut bloklarını görebiliyor musunuz? Açıkça görülüyorsa sonuca ulaşılması daha kolay olacaktır.
Daha farklı bir C kütüphanesinde CAN SPI ve I2C kütüphanesi vardı. Ama içerisindeki fonksiyon ve bunların açılımlarına ulaşılamıyordu.
Sizdeki kütüphanede  her şey açıkça yazılıdır umarım. Yazılıysa çözüm çok zor olmasa gerek.

genelde en çok yapılan hatayı yukarıdaki fonksiyon içlerinde bulunan while(x) ile beklenilmesi gereken kısımlar oluyor.
bu uygulanmadığında sürekli sağlıklı bağlantı ya kurulamıyor yada kopuk bir şekilde kurulabiliyor. olarak gördüm ben.