STM32 & ST-LINK - Başarılı programlamadan sonra MCU'ya bağlanamıyor


13

STM32F7-45VGT6 ile kendi kartımı kurdum. ST-LINK v2 ile başarılı bir şekilde programladım (orijinal olanı değil) ve şimdi MCU ile bile bağlanamıyorum.

ST ve SWD arayüzünden ST-Link Utility kullanıyorum. SWD pinlerini çıkış olarak kullanmam ve kodumda bunları GPIO çıkışı olarak ayarlamam olabilir. Durum böyle olabilir mi?

Yine de sıfırlama pinimi GND'ye bağlayıp ST-Link Utility'de "Sıfırlama altında bağlan" seçeneğini ayarladım ancak çalışmıyor ... Ne yapabilirim?

İnternette BOOT0 Pin kullanımı hakkında bir şey buldum, ama tam olarak bilmiyorum ...


"Çıktı olarak SWD pinlerini kullanmam mümkün olabilir", ancak bunu bilen tek şey sensin, kasıtlı olarak bunu yapmayan, ancak bunun sonucu olabilecek bir ürün yazılımının bozuk bir yükünü kastetmedikçe. gerçekten olan hata. Genellikle bu, donanım sıfırlaması öngörüldüğünde elle veya otomatik olarak ilk SWD bağlantısı yapılarak kurtarılabilir. SWD pinlerini G / Ç'ler bu ayarı yapmadan önce birkaç saniye geciktirmek için kullanmak istiyorsanız, geliştirmeyi kolaylaştırabilir, ancak yine de hata ayıklayıcıyı kullanamayacağınız anlamına gelir.
Chris Stratton

Yanıtlar:


21

Bu sorunu çözmeyi başardım. Herhangi biri benzer bir sorunla karşılaşırsa, işte yaptığım şey:

ST-Link v2 ve ST-Link Utility'yi kullandım. Ayarda, "Sıfırlama altında bağlan" ve SWD arayüzünü ayarladım (frekanstan emin değilim).
Sonra tahta üzerinde sıfırlama düğmesine basın ve "Hedef" -> "Çip Sil" tıkladım ve hemen düğmesini tıkladıktan sonra - Çip sildi, böylece şimdi MCU yeniden programlayabilirsiniz.


Her neyse, çıktı olarak SWD pinlerini kullanmanız gerekiyorsa, programın başına biraz gecikme ekleyin veya bu pinleri çıkış olarak ayarlamayı devre dışı bırakmak / etkinleştirmek için bir atlama kablosu kullanın.


Evet, SWD pinlerini farklı bir amaç için kullanırsanız, bu beklenen bir şeydir. Deneyimler, bilerek yapmayan STM32 tasarımlarının bile, SWD pinlerinin yanıt vermediği (bozuk program?) Bir modda "takıldığını" ve kurtarma için böyle bir tedaviyi gerektirdiğini göstermektedir.
Chris Stratton

1
Linux'ta, bu bash komutunu çipi silmek için kullandım: st-flash erase
nathan

Sil çipi benim için çalışmadı. Hedef -> Sektörleri Sil -> Tümünü seç -> uygula'ya gittim. Bundan sonra kuruluma tekrar erişim sağladım. Neden çip silme söz vermedi emin değilim
andrew

6

Sıfırlama altında bağlantının çalışması için ST-Link'in sıfırlama pimi üzerinde kontrolü olmalıdır, eğer zemine bağlarsanız ST-Link'in hedefi çalıştırması ve ona erişmesi için bir şansı yoktur.


Açma sırasında BOOT0 pimini yüksek çekerseniz, MCU dahili önyükleyiciye başlar ve birkaç seri protokol kullanarak erişim elde edebilirsiniz (daha fazla bilgi için başvuru kılavuzuna bakın).

Önyükleyicinin içinde erişim sağlamak için SWD pinleri mevcut olmalıdır, ancak bundan% 100 emin değilim.

ST Flash Loader Demonstrator , UART arayüzünü kullanarak mikro silmenizi / programlamanızı sağlayan bir araçtır. Mikro cihazınızın UART'larından hiçbirine erişemiyorsanız, bu çözüm sizin için çalışmaz.


Önyükleyici tarafından desteklenen USART3'e erişebiliyorum, bu yüzden daha sonra deneyeceğim - çünkü zor olacak, çünkü BOOT0 PCB'de GND'ye bağlı ... Ama neyin yanlış olduğunu bilmek istiyorum. Ne yanlış yaptım? SWD / JTAG pinlerini main () fonksiyonumdaki çıkışlar olarak ayarladım. Ancak kılavuzda, sıfırlama sırasında tüm pinlerin varsayılan işlevlerine sahip olduğunu ve hemen kullanılabileceğini söylüyor. Peki neden sıfırlama altında flaşı silemiyorum? Ayrıca U-LINK 2 programlayıcısını ve uVision 5'i de test ettim. Umarım herhangi bir koruma seviyesi - bir şekilde yanlışlıkla - ayarlanmamıştır. Böyle bir bit ayarlamamıştım, ancak koruma bitlerinin iyi olup olmadığını test etmenin bir yolu var mı?
zupazt3

@ zupazt3 Kulağa kaba gelmek istemiyorum, ama lütfen ilk cümleyi tekrar okuyun. Sıfırlanan bağlantıda soruna bir cevap içerir. Eğer anlamadıysanız, daha özel bir yorum gönderin.
Arsenal

Ama her zaman bağlamıyorum :) İlk yazımda, yardım edip etmediğini kontrol etmek için doğrudan GND'ye bağladım demek istedim. Ama normalde NRST'yi GND'ye değil, bir programcıya bağlarım, bu yüzden sıfırlama üzerinde kontrolü vardır. Ve hala bağlanmayacak. Ayrıca U-Link 2 ve Keil uVision 5'i kullanmaya çalıştım, ancak aynı sonuçla. Sebebi ne olabilir?
zupazt3

@ zupazt3 Bu, sorunuzdan pek açık değildi. Belki SWD saatini artırmak yardımcı olabilir, çünkü hedef çıkışa geçmeden önce bağlantıyı alabilir. Ama yanlışlıkla SWD pinlerini çıkışa ayarladım ve hedefimle bağlantı kuramadım ve sadece BOOT0'ı kullanarak, doğrudan toprağa bağladıysanız (direnç olmadan) bu et zorlu.
Arsenal

1
Sonunda çipi silmeyi başardım! ST-Link Utility ile - sıfırlama düğmesine bastım, "tam silme" ve bırakma düğmesine tıkladım ve bir şekilde kendini sildi ve şimdi çalışıyor. Bunu daha önce denedim ama sadece şimdi işe yaradı.
zupazt3

3

stmcubemx kullanıyorsanız, stmcube pinout sekmesinde seri kabloyu yapılandırmanız gerekir. pinout sekmesinde SYS'yi tıklatın ve hata ayıklama seçeneğini seri kablo olarak değiştirin. benim sorunumu düzeltmek ve belki de sorununuzu.


Bu bir sorun olsa da, SWD pinlerini SWD modunun açılış varsayılanında bırakmak bu yazılım paketinin varsayılan ayarı değilse, bu muhtemelen bir hata raporu ve düzeltmesi gerektiren oldukça ciddi bir kullanılabilirlik hatasıdır. Ayarları orijinal değerlerinden değiştirmediğinizden veya bu iğneleri varsayılan olmayan bir şekilde kullanmanız gereken belirli bir projeyle başladığınızdan emin misiniz?
Chris Stratton

Öncelikle iğnelerimi SYS_SW olarak ayarladım .... ama turuncu renkliler. Ayrıca kodu yükledikten sonra çip bağlanma sorunu vardı. SYS-Serial Wire'da hata ayıklama modunu seçtiğimde, çip şişirildikten sonra normal olarak bağlanır.
GTU

1

Kendi kodumu kendi STM32F427 kartıma indirdim. Sonra artık ST-LINK Utility kullanarak kartımı bağlayamıyorum. Kodumu hata ayıklama bağlantı noktası pin yapılandırmalarını (? Onaylayamıyorum) messup düşünüyorum. Bağlantıyı yapmak ve kartımı yeniden programlamak için aşağıdakileri yaptım:

  1. ST-LINK Yardımcı Programını açın ve Hedef menüsünde "Bağlanmaya" hazır olun.
  2. Kartınıza güç verin (benim durumumda, bir USB kablosu kullanıyorum) ve AYNI ZAMANDA ST-LINK Yardımcı Programından "Bağlan" ı tıklayın.

Bu hile ile 2 panoyu restore ettim. Bu yardımcı olur umarım. --Bob


1

Dediğim gibi:

stmcubemx kullanıyorsanız, stmcube pinout sekmesinde seri kabloyu yapılandırmanız gerekir. pinout sekmesinde SYS'yi tıklatın ve hata ayıklama seçeneğini seri kablo olarak değiştirin. benim sorunumu düzeltmek ve belki de sorununuzu.

STM32CubeMx hata ayıklama bağlantı noktasını varsayılan olarak yapılandırmaz, bu nedenle kodunuzu yanıp söndükten sonra ST-Link çalışmayı durduracaktır. Örneğin çipi ST-link Utility ile silmeniz gerekir. MCU ile bağlantı kurmak için, açılış sırasında önyükleyiciyi etkinleştirmek için BOOT0 pimini yüksek çekmek zorunda kaldım. Sonra gidip Tarjet menüsü ve Sil çip .


0

MCU'yu yeniden programlamak için sıfırlama düğmesini basılı tutun ve ST-Link Utility'de cihaza bağlan'ı seçin veya IDE'nizdeki indirmeye basın (örneğin Keil) ve ardından sıfırlama düğmesini bırakın.


-1

Önyükleme pimleri (bazı sürümlerde bitler) hata ayıklayıcının başlamasını engelleyebilir. Önyükleme desenini başlangıçta uygulamadığınızdan emin olun (boot0 ve boot1 pimlerindeki belirli ikili desen), aksi takdirde MCU'nuz önyükleme durumuna geçer.


GND'ye bağlı boot0 pinim var ... Ne yazdığından emin değilim, çünkü - dediğim gibi - flaşımı başarıyla programlamayı başardım ve program hala MCU'da kendini yürütüyor - STU ile MCU'ya bağlanamıyorum SWD arayüzü üzerinden bağlantı. Sıfırlama altında önyükleme yapmamalı ve pimler varsayılan durumda olmalıdır, bu yüzden neden bağlanmadığını anlamıyorum.
zupazt3

Bundan emin misin? Hangi kombinasyonun SWD'yi sıfırlama işleminin geçersiz kılamayacağı şekilde devre dışı bırakacağına inanıyorsunuz?
Chris Stratton
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.