
Merhaba Arkadaşlar,
Bu yazımızda tasarımımızda istenen bir parametre olan USB üzerinden programlama ve haberleşme görevini gerçekleştirecek olan ST-Link bölümünü yapacağız. Sağ olsun STM firması bize kartların çizimlerini verdiği için donanım bölümünü bu tasarımları inceleyerek anlayabiliriz, ancak ST-Link yazılımı paylaşılmadığı için bu yazılımı bir şekilde ele geçirmemiz lazım. Sakin olun yasa dışı bir şey yapmayacağız. 🙂
İlk olarak ST-Link bölümünün donanımını tasarlayarak başlayalım. Burada STM firmasının referans tasarımlarından yararlanacağız, ancak doğrudan onlara baktığınızda kafanız karışabileceği için (benim bayağı karışmıştı) bir ön tanıtım yapmak istiyorum. Bunun için Şekil 1’de görülen blok diyagramı inceleyerek işe başlayalım.

ST-Link işlemcisinin çalışabilmesi için ilk olarak içerisine uygun yazılımın yüklenmesi gerekmektedir. Bunun birkaç farklı yöntemi bulunmaktadır. Bunlardan bir tanesi elimizde bulunan harici bir ST-Link ile programlamak, bir diğeri ise UART üzerinden programlamaktır. Biz yaptığımız tasarımda UART üzerinden programlamayı tercih ettik. UART üzerinden programlama yapılabilmesi için ise “BOOT0” pininin VCC’ye çekilmesi gerekmektedir. Bunun için tasarıma bir jumper ekledik. Bu konuya programlama kısmında tekrar geleceğiz.
Daha sonra ise ST-Link USB üzerinden gönderilen programı alarak hedef işlemciyi programlaması gerekmektedir. Bunun için yeşil renk ile gösterilen “PA5” ve “PB14” pinlerinin hedef işlemcinin uygun pinlerine (“SWCLK” ve “SWDIO”) bağlanması gerekmektedir. Şekil 2’nin (1) numaralı bölümünde gösterilen 1×6 header’ın görevi ise kartın üzerinde bulunan ST-Link ile harici bir işlemciyi programlamaktır. Bunu yapabilmek için (2) numaralı bölümdeki jumper’ları çıkarmanız yeterli olacaktır. Yani isterseniz Nucleo kartlarında bulunan ST-Link bölümünü kırarak programlayıcı olarak kullanabilirsiniz.

Son olarak bizim USB üzerinden UART haberleşmemizi sağlayan sanal UART portunu (ST-Link’in PA2 ve PA3) kartın üzerindeki işlemcinin UART özellikli pinlerine bağlayarak ST-Link bölümünün donanım kısmını tamamlıyoruz. Sonuç olarak bu bilgilere göre oluşturulan şematik tasarımı Şekil 3’te görülmektedir.

Şimdi programlama işlemine geçebiliriz. Bunun için birkaç tane programa ve ST-Link yazılımına ihtiyacımız var. Neyse ki bazı dostlarımız bizim için bu yazılımı elde etmeyi başarmışlar. 🙂 O zaman malzeme listesini vererek programlama işlemine başlayalım.
- UART ile programlama için STM32CubeProgrammer
- ST-Link yazılımını güncellemek için ST-Link Upgrade
- ST-Link yazılımı burada
- Bir adet USB-TTL dönüştürücü
Programlama adımlarına gelecek olursak. İlk olarak işlemcimizi UART üzerinde programlayabilmek için “BOOT0” pinini Şekil 4’te görülen P6 header’ını kullanarak VCC’ye çekiyoruz. Daha sonra USB-TTL dönüştürücünün Rx-Tx pinleri yine Şekil 4’te görülen P7 header’ını aynı pinlerine bağlıyoruz. Yani Rx pini Rx’e, Tx pini de Tx’e gelecek şekilde bağlantı yaparak STM32CubeProgrammer programını çalıştırıyoruz.

Bağlantıları doğru şekilde yaptığınızda ve eğer tasarımda bir problem yoksa Şekil 5’in (1) numaralı bölümünden işlemcinizin bulunduğu portu seçip “Connect” butonuna bastığınızda işlemcinize UART üzerinden bağlanmış olacaksınız. Daha sonra işlemciye ST-Link yazılımını yüklemek için Şekil 5’te (2) ile numaralandırılmış “Erasing & Programming” aracına tıklıyoruz.

Şekil 6’da görülen “Browse” butonu ile yukarıda verdiğim ST-Link yazılımını seçip, “Start Program” butonuna tıklayarak yazılımı kartımıza yüklüyoruz. Şanslıysanız yazılımı ilk denemede kartınıza yüklersiniz, ancak ben hiçbir zaman o kadar şanslı olmadım. 🙂

Son olarak ST-Link yazılımını güncellememiz gerekmektedir. Bunun için USB-TTL bağlantılarını çıkartarak “BOOT0” pinini GND’ye bağlıyoruz. Daha sonra kartı bilgisayara USB üzerinden bağlayarak ST-Link Upgrade programını çalıştırıyoruz. Şekil 7’de görüldüğü gibi ilk olarak “Device Connect” butonu ile cihazımıza bağlanıyoruz ve “Nucleo” seçeneğini seçtikten sonra yazılım güncellemesini gerçekleştiriyoruz.

Burada dikkat edilmesi gereken bir nokta ST-Link ile sanal port ile UART haberleşme yapabilmek için “Nucleo” seçeneğinin seçilmesi gerektiğidir, ancak “STM32F103C8T6” işlemcisi 64KB hafızası olduğu için bu yazılıma güncelleme yapılamamaktadır. Bu nedenle sana port özelliğini kullanabilmek için 128 KB hafızası olan “STM32F103CBT6” işlemcisini kullanmak gerekir.
Böylelikle tasarımımızın ST-Link bölümü kullanıma hazır. Yaptığımız kartı harici bir programlayıcı olmadan USB üzerinde programlamak gerçekten eğlenceli oluyor. Tabii ki bunun gerçekleşmesini sağlayan asıl kişi olan Oğuzhan Başer’e teşekkür etmeden yazıyı sonlandırmak olmaz. Hala ElektRobot sitesini ziyaret etmediyseniz, şu an ziyaret ederek bu tasarımı bitirmeden önce STM32 programlama yetenekleriniz geliştirebilirsiniz. 🙂