STM32F103C USB BOOTLOADER

26357 eklentisine bak

bu girişler ile iletişim detaylarını görmek istiyorum abi çıldırdım

yanlışlıkla saçma sapan bi kod yazmak istiemiyorum kartları hackleerim yanlışlıkla :D



yardım et
@jiyan :D :D
Kartla iletişim kurmak zor değil. Bunu kart üzerindeki usb girişinden de yapmak mümkün, usb-uart dönüştürücü ile de yapmak mümkün. Ama şu aşamada bunun anlamı yok.
Elindekilerle karta ancak program yükleyebilirsin. Kartı yeni doğmuş bebek gibi düşün. Bootloader yüklemek bebeğe dil öğretmeye benziyor. Bootloaderi olan kart artık iletişim kanallarından karta öğretmek istediklerini öğrenebilir. Ama sadece konuşmayı bilen çocuk gibi olur. Ne elini ne ayağını kullanmayı bilir.
Sadece bootloader yüklü karta "elini kaldır" dersen bunu anlamaz. İletişimle bir şey yaptırmak için önce karta "elini kaldırmanın" ne demek olduğunu tanımlamalasın ve bu komut geldiğinde elini nasıl kaldıracağının, kaldırdıktan sonra indirip indirmeyeceğinin vs. bilgisini de programlamalısın.
 
  • Beğen
Reactions: nt
anlıyorum ben dün işi bilmediğimden ve biraz heyecan dan olsa gerek bir adım fazla gittim sanırım cihazlarlar iletişim konusunda daha yeni başlıyorum ama soru sormaya korkar oldum

Soru sormayı bıraktığın anda öğrenmeyi de bırakmışsın demektir, o yüzden bunu yapma. Öğrenme zamanla lineer artan birşey değil. Ben yeni bir konuyu öğrenirken bazan haftalarca yerinde sayıyorum, moralim bozuluyor, ümitsizliğe kapıldığım da oluyor, ama sonraki gün birden bir aydınlanma yaşıyorum ve büyük bir basamak atlıyorum. Belki de o basamağı atlaman o sormaya çekindiğin soruya bağlı, o yüzden sana ne kadar saçma da görünse sorunu sor.
 
cihazlarlar iletişim konusunda daha yeni başlıyorum ama soru sormaya korkar oldum

Run Forrest run... Şaka şaka dur bir yere gitme. :D

Kartlarla iletişim kurmak bilenler için tabii olarak zor değil. Bende dahil, bizim gibi bilmeyenler içinse tabii ki zor yada henüz keşvedilmemiş.

Bu doğal haller ile tanıştıktan, sonra sormaya devam etmek en güzeli. Çünkü duvarın öbür tarafına sıçramanın yegane yolu sorup öğrenmek.
 
  • Haha
Reactions: nt
USB de vendor id, "USB consortium" denen bir kurum tarafından firmalara atanır. Mesela Apple'ın, Logitech'in vs birer vendor id si vardır. Listeyi USB.org veya başka yerlerden görebilirsin.


product id ise, vendor id ye sahip olan firmalar tarafından kendi ürünlerine atanır. Mesela benim şirket Acme Corp, 17AF vendor id sini satın aldı. Sonra da "Flykey" USB klavyesini yapmaya karar verdim ve product id olarak da 4858 düşündüm. O zaman benim klavyeyi senin linux makinaya bağlayım lsusb yaparsan 17AF:4858 Acme Corp Flykey Keyboard göreceksin.
 
  • Beğen
Reactions: nt
Blink led ile başlaman gereken yerde usb iletişimi yapmaya çalışarak başlıyorsun ve bu tam olarak işin ortasından başlamak oluyor. Blink led belki basit gelebilir ben okula başladığımda da Blink ile başladık ben okulda ilk blinki yaparken öncesinde yaptığım yüzlerce projenin güveniyle yapıyordum 5 6 ders sonra Blink bir hesap makinesine kadar evrildi.

bir buton girişi butona basıldığı sayı x 2 kadar led Blink yapacak hale geldik devam ettik 7 segment display ekledik böyle böyle ilerledi dersimiz.
En temel bana kolay gelir diyip ilerisini kaçırma
 
c++zaten pythonun "}{" hali neden mikropyhton kullanıyoruz direk python ile yapmak istiyorum yavaş ama olmazmı yani yazdıgım bişeyi led aç led kapa gibi yada basit bir yz :D bunu pythonla yapıp kartın anlıcagı şekilde ardunio yada C ve değişik bitlerdeki verilere bölmek zorundamıyım

micropython, python3 ün bir alt kümesi. Yani farklı bir python değil. Tüm kütüphaneler yok, tüm özellikler yok. Ama var olan özellikler de standart python3 ün aynısı. Ben böyle anlıyorum.
 
  • Beğen
Reactions: nt
Kafan karışık ise, kafanın karışmadığı son noktaya geri dönmen lazım ve oradan tekrar ilerlemen lazım. Şu anda micropython ile bir blink kodu yazabilir misin? yazamazsan önce onu hallet.
 
  • Beğen
Reactions: nt
@nt STM 32 ye bu LED yakıp söndürmeyi ben bile yazmıştım sanırım :)
 
  • Beğen
Reactions: nt
Tek LED blink edebiliyorsan, 8 LED de kontrol edebilirsin. 7 segment display de zaten budur, 7 tane rakam segmenti 1 tane nokta. Birden fazla segmenti kontrol etmek için de eğer 16 pin varsa doğrudan kontrol edersin. Yoksa da taramalı yapman lazım. Bu noktada da python ile sıkıntı yaşarsın, muhtelemen yeterince hızlı tarayamazsın. Veya program farklı işler yaparken dijitlerde parlaklık değişimleri olur.

Aslında python'u zaten biliyorsun, sen neden doğrudan Arduino ve C++ ile başlamıyorsun?
 
  • Beğen
Reactions: nt
zahmet olmazsa rica etsem bu kartlar hakkında 0 dan 100 e yazısı yazarmısın basit şekilde

benimm elimde
stm32f103c8t6
stm32f103c6t6a
stm32F401/411 bulunacak
stlınk de var
kusura bakmayın ama kod iyi güzelde işin içinde bilinmeyen bir x var benim için kafam okadar karıştı ki soru soramıyorum
denemelerimi bunlar üzeinde yapıccagım ama kafamda hala oturtamadım
Bence şuan olduğun yerde kal sana işten çıkınca yazarım ne adımlar izlemelisin ne projeler etkili olur ne noktada durmalısın
 
  • Beğen
Reactions: nt
PC de PySimpleGUI kullanınız. Diğerleri
başlangıç için gereksiz ve karmaşıktır.
 
  • Beğen
Reactions: nt
@nt öğlen dediğim gibi yol haritası oluşturayım senin için;

Önceliğin aslında programlamaya olan yatkınlığın sebebiyle basitte olsa kendine bir debug portu oluşturman.
Bunun için kullancağın IDE'yi bilmeliyiz. Arduino IDE'mi kullanacaksın, Keil'mi, STM Cube IDE'mi?
Buna karar verdikten sonra debug şekline bakarız.

Neden debug portu işe başlamalıyız?
Bir değişken değerini izlemek, Dijital ve Analog pin durumunu görmek, Fiziksel input yapamayacağız, karakter veya sayısal giriş yapmamız gerektiği zaman kullanmak için debug portuna ihtiyacımız var. Öncelikle bunu halletmen mcu içindeki program seyrini izlemene çok yardımcı olur.

Debug portunu hallettikten sonra "Led Blink" ile başlamanı tavsiye ederim blink yaptıktan sonra bekleme süresi program içinde döngüsel olarak değişen örn: 5 değer artarak giden ve tepe değeri 500 ms olan 500ms beklemeyi yaptıktan sonra 10ms süreye kadar değişken olarak blink sürelerini işleyen bir şekle evirebilirisin.

Daha blink işlemini çok detaylandırırım fakat uğraşıp-uğraşıp 1 tane ledin yanıp söndüğünü izlemek heves etmemeni sağlayabilir.

1 Buton, 1 Direnç, 2 Jumper kablo ile yapabileceğin bir uygulama,:
Butona bastığında led yanıyor bıraktığında sönüyor.

Bu uygulamayı 1 adım daha ilerletip, butona 1 kez bastığında led yanacak 2. kez bastığında led sönecek.

Biraz daha ileri gidelim butona 1 kez bastıktan sonra led 1 saniye bekleyip yanacak tekrar bastığında beklemeden sönecek.

Çok daha ileri gidelim butona 1 kez bastığında led blink yapmaya başlayacak eğer uzun süre basılı tutarsan led kapanacak (long press), eğer hızlı şekilde 2 kez basarsan led sönecek led söndükten sonra tek bir basış ile bu döngünün başına geçecek.

Buton ile bu uygulamaları yaparsan dijital giriş ile ilgili ilerleme kat etmiş olursun.

Yine elektronik bilgisine dayalı gidelim bu sefer dijital çıkış;
Bu sefer ihtiyacımız olanlar 470R(ohm) direnç ve 1 adet 5mm Led.
Artık harici bir ledimiz daha var yani kullanabileceğimiz 2 adet ledimiz oldu birisi kartın üstündeki dahili led diğeride kendi bağladığımız fiziksel led.

Önce harici olarak bağladığımız led'e blink yaptıralım nereye bağladığımız önemli artık dijital olarak çıkış yapabilen bir pin'e bağlamış olmalıyız konunun devamında nasıl pin seçilir neye göre seçmeliyiz bunlara değineceğim.

Bağladığımız lede blink yaptırarak başlayalım yine bunu daha önce yaptığımız için kolay olacaktır sadece bağlı pini doğru olarak atamalıyız yazdığımız programa.

Bu zamana kadar öğrendiğimiz buton ve kullanabildiğimiz 2 led ile uygulama gerçekleştirelim.
Butona 1 kez bastığımızda blink yapmaya başlasın ama nasıl?
2 ledimizden 1 tanesi yanık konumdayken diğeri sönük olacak şekilde.
Yani birbirini izleyecekler biri yanarken diğeri sönük olacak ve sürekli yer değiştirecekler.

Bunuda döngü halinde yavaş konum değiştirirken belli oranda hızlanarak güzel bir görüntüde ortaya çıkarabiliriz.
Led ve buton ile yazabildiğim başlangıç için aklıma yatan projeler bunlar.

Mcu hakkında değineceğim detaylara bakalım elimizdeki kart dahilinde;
1699290161087.png

Bir cpu seçim sihirbazı aslında bu inceleyeyelim;
32F103'ün farklı modellerini kıyaslıyor.
Biz elimizdekinden yola çıkalım.
103Cx ibaresi yani C8 'mi C6 mı soldaki taraf C6 sağdaki C8 bunu tecrübeyle yazıyorum kendisi belirtmemiş.

Flash yani programı saklayacağımız hafıza;
C6-> 32 Kb.
C8-> 64 Kb. C8 daha fazla program hafızasına sahip.

SRam önce SRam'den bahsedeyim bizim programımızın çalışmasında ortaya çıkan verileri ENERJİSİ KESİLMEDİĞİ SÜRECE DEPOLAR. Elektrik kesildiği an SRam içinde yazdığı herşeyi unutur gider sadece enerjiliyken veri dapolar.
C6->10 Kb.
C8->20 Kb.

Gelelim bence bizim çok haşır neşir olacağımız Timer'lara;
Timer aslında adından anlayacağımız gibi zamanlayıcı verdiğimiz süre boyunca veya adet boyunca sayar biz bu saymayı programımızda veya donanım kontrolümüzde kullanırız.
Timer'ın bir avantajı sayarken ana programı işgal etmez! o bizim kurduğumuz ve say dediğimiz alanda kendi kendine sayar biz lazım olduğunda kullanırız ve programımıza kesintisiz devam ederiz.

C6-> 2 Adet Genel sayaç barındırıyor 1 Adet Gelişmiş Timer barındırıyor.
C8-> 3 Adet Genel sayaç barındırıyor 1 Adet Gelişmiş Timer barındırıyor.

Haberleşme çok geniş bir dünya bu gün ona değinmeyeceğim. Kafa karışıklığı yaratacaktır.

GP-IO;
Buradan sonrası 2 model içinde aynı devam ediyor.
2 modelde 32 adet GPIO barındırıyor.

GP-IO nedir?
Önce açılımını yapayım "General Purpose Input/Output" Yani genel amaçlı giriş çıkış.
GPIO etiketi taşıyan pinler Giriş veya Çıkış olarak çalışabilir yani Bir ledi yakabilir veya buton girişi yapabilirsin GPIO etiketi taşıyan pinden. Bu pinlerin farklı özellikleri'de bulunabiliyor aynı pin hem haberleşme hattı olarak çalışıp hem I/O olarak çalışıp hemde bir uyandırma dürtüsü özelliğine sahip olabiliyor.

ADC kısmına değinmeyeceğim çünkü temel elektronikden biraz fazlası gerekiyor analog işlerle uğraşmak için bir sonraki yazıda buna değinirim.
 
26382 eklentisine bakbasit bir pyton kodu ile bır buton koydum stm32 yı usb core ile cekıyorum
bana kartın içi lazım değil o bir sonraki aşama ben kendi yaptıgım prg ıle kartı konusturmak ıstıyorum
Python:
import usb.core
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button

VENDOR_ID = 0x1eaf
PRODUCT_ID = 0x0004

class Buton(App):
    def build(self):
        layout = BoxLayout(orientation='vertical')      
        self.report_label = Label(text='Report Sonuc: ')
        layout.add_widget(self.get_report_label)
        self.report_button = Button(text='Report')
        self.report_button.bind(on_press=self.report)
        layout.add_widget(self.report_button)
        return layout
   
    def get_report(self, instance):
        device = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID)
        if device is not None:
            try:
                data = device.ctrl_transfer(0x80, 1, 0, 0, 8)
                formatted_data = ' '.join([str(byte) for byte in data])
                self.get_report_label.text = 'Sonuc: {}'.format(formatted_data)
            except Exception as e:
                self.get_report_label.text = 'Hata: {}'.format(str(e))
        else:
            self.get_report_label.text = 'cihazı bulunamadı!'

if __name__ == '__main__':
    Buton().run()
Daha kimin ne kadar anlatması lazım bilmiyorum.

KARTIN İÇİNDE ÇALIŞAN BİR USB İLETİŞİMİ SAĞLAYAN PROGRAM YOKSA O KART SANA HİÇBİR CEVAP VEREMEZ NE KONUŞACAĞINI NE SÖYLEYECEĞİNİ BİLMİYOR
@Mikro Step 'in Dediği gibi sen ST-LINK ile iletişim kuruyorsun bundan 32F103'ün haberi bile yok olsa da içinde bir program olmadığı için hiç bir şeye yaramayacak.
 
@nt iki adet program yazman lazım 1.si Piton ile oluşturacağın arayüz 2. Side mikrodenetleyici için PC ye nasıl işletim sistemi kurmadan kullanamıyorsak mikrodenetliyiciye de uygun bir program yazmadan kulanamayiz
 
nasıl yapabilirrim iki kartada bana ben s yazınca onlar selam yazsın c++ kodu gpt yazdı dogrumu bılmıyorum stlink taktım Geany yukledım ide olarak


C++:
#include "stm32f4xx.h" // STM32F401 için kütüphane
//#include "stm32f1xx.h" // STM32F103C için kütüphane

extern "C" {
void USART2_IRQHandler(void) {
    // USART2 kesme işleyicisi
    if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) {
        char receivedChar = USART_ReceiveData(USART2);
       
        // Eğer gelen veri 's' ise "Selam" mesajını gönder
        if (receivedChar == 's') {
            USART_SendData(USART2, 'S');
            while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
            USART_SendData(USART2, 'e');
            while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
            USART_SendData(USART2, 'l');
            while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
            USART_SendData(USART2, 'a');
            while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
            USART_SendData(USART2, 'm');
            while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
        }
    }
}
}

int main(void) {
    // USART2 için yapılandırma
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
   
    GPIO_InitTypeDef GPIO_InitStruct;
    USART_InitTypeDef USART_InitStruct;
    NVIC_InitTypeDef NVIC_InitStruct;
   
    // USART pini yapılandırma
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
   
    // USART2 pinlerini alternatif fonksiyon olarak ayarlama
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2); // USART2_TX
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2); // USART2_RX
   
    // USART yapılandırma
    USART_InitStruct.USART_BaudRate = 9600;
    USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    USART_InitStruct.USART_Parity = USART_Parity_No;
    USART_InitStruct.USART_StopBits = USART_StopBits_1;
    USART_InitStruct.USART_WordLength = USART_WordLength_8b;
    USART_Init(USART2, &USART_InitStruct);
   
    // USART2 RX kesme konfigürasyonu
    USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
   
    // USART2 kesme öncelik ayarları
    NVIC_InitStruct.NVIC_IRQChannel = USART2_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStruct);
   
    // USART2'yi başlat
    USART_Cmd(USART2, ENABLE);
   
    while (1) {
        // Ana döngü
    }
}
Çok ortadan başlıyorsun yine daha haberleşme hakkında fikrin dahi yok, bunu çalıştırmak için usb/uart dönüştürücüye ihtiyacın var usbdeb veri çıkmıyor bu programda çıksa da bence bunun bir öğreticiliği yok.
 
Bluepill i PC ana kart gibi dusun. Bunun ramini, diskini, guc kaynagini vs vs herseyini ekledin. Ama HDD bos.

Simdi bu sartlarda PC ana kartin seri portuna yada usb portuna disaridan data yolluyorsun ve PC nin cevap vermesini bekliyorsun.
Olmaz boyle bir sey. Once HDD icine isletim sistemi yada hic olmazsa bir program atmaliyiz.

Bluepill deki durum da tipa tip ayni. Icindeki Flashi HDD gibi dusun icine bir kod atman gerekiyor. Bu kodu STLink ile atacagiz.
Peki neye ihtiyacimiz var. Senin istedigin isleri yapacak programin HEX dosyasina. Bunu bir kere atacagiz ve artik HEX dosya ile isin bitecek.

Cipe atilacak program da oyle bir iki registere veri yuklenip hallolacak bir sey degil. Hele hele USB hic oyle bir sey degil.
USB organizasyonu binlerce sayfalik talimatlar yayinlamis. O talimatlarin bir kismini yerine getiren bir program yazilacak.
 
  • Beğen
Reactions: nt
Bir başka yolda var phytonda yapılan configlerden sonra config dosyalarını c ye çevirip daha sonra o dosyayı derleyip işlemciye boot etmeniz lazım ama bu çok ileri bir konu ve bunun içinde işlemci tarafında belli bir kod olması lazım. Yani pyhtondan işlemciyi kontrol etmek çok ileri bir konu onun yerine ikisi arasında haberleşme kurmanız lazım.
 
  • Beğen
Reactions: nt
O senin yazdığın hello world, desktop sistemleri için. Gömülü sistemlerde her durumda çalışan bir printf yoktur. Çalıştırmak için takla gerekir. Gömülü sistemlerin hello world'ü LED blink yapar. Sen şimdi sıfırdan başla, bluepill kartını Arduino ide ile çalıştır, blink programını da yükle ve blink'i gör. Hatta video isteriz :D Ama ayrı bir konuda yap bunu. Acemi birisi olarak senin yaşayacağın sorunları başkaları da yaşayacak, onlara yardımcı olur açacağın konu.
 
  • Beğen
Reactions: nt

Çevrimiçi personel

Forum istatistikleri

Konular
6,951
Mesajlar
118,753
Üyeler
2,824
Son üye
selocan32

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top