UC sıfırlandığında LED loş bir şekilde yanıyor
Üzerinde STM32G431CBT6 olan bir PCB tasarladım. Ayrıca gösterildiği gibi bağlanan kırmızı ve yeşil olmak üzere iki LED vardır:

İlk kez çalıştırdığımda (yani henüz uC'de program yok), kırmızı LED loş bir şekilde yanıyordu. UC'ye bir LED flaşör programı yükledikten sonra iyi çalışıyor (tam parlaklıkla), ancak sıfırlama düğmesine basarsam, kırmızı LED tekrar loş bir şekilde yanıyor ve R1 üzerindeki voltaj 120mV. Yani 120uA bir sebepten dolayı akıyor. Diğer LED bunu yapmaz ve R2 üzerindeki voltaj 0'dır.
Veri sayfasına baktığımda yalnızca PB4 ile ilgili şu notu buldum (sayfa 60):
"Sıfırlamadan sonra, bu pinler JTAG / SW hata ayıklama alternatif fonksiyonları olarak yapılandırılır ve PA15, PA13, PB4 pinlerindeki dahili yukarı çekme ve PA14 pinindeki dahili çekme etkinleştirilir."
Ancak PB4'te bir yukarı çıkma olsa bile, LED yanmamalıdır, peki bu davranışa ne sebep olur?
Düzenle:
Projeyi bir süre kenara koyduktan sonra şimdi yapmıyor ama neyin değiştiğini bilmiyorum. Sadece seçenek baytlarındaki (ST-Link Yardımcı Programıyla) önyükleme ayarlarıyla uğraşıyordum, ancak bunun UCPD açılır penceresiyle bir ilgisi olduğunu düşünmüyorum.
Bu arada, açılır menüyü devre dışı bırakmak için varsayılan ayarı buldum:
(ve evet, ayarlarda buna "yukarı çekme" deniyor, ancak bu bir hata gibi görünüyor)

İşaretlendiğinde (varsayılan),
HAL_PWREx_DisableUCPDDeadBattery();
HAL_MspInit işlevine işlev çağrısı.
İşaretli olmadığında, LED sıfırlamadan sonra bile loş bir şekilde yanıyordu, bu nedenle orijinal soruya kabul edilen yanıtı doğruladı. Ta ki loş aydınlatmayı bir daha asla yapmayana kadar.
Özet:
- Başlangıçta LED yalnızca sıfırlama sırasında loş bir şekilde yanıyordu.
- Bunun nedeni, "etkin olmayan UCPD'nin gücünden tasarruf - deaktif Ölü Pil yukarı çekme" onay kutusunun varsayılan olarak işaretlenmesiyle devre dışı bırakılan UCPD aşağı çekilmesiydi. Bunu işaretini kaldırarak ve LED için GPIO pinini yapılandırmayarak doğrulayabilirdim, bu da sıfırlamadan sonra bile loş ışıkla sonuçlandı.
- Bir şey oldu ve şimdi, onay kutusu veya sıfırlama işlemi ne olursa olsun bunu asla yapmıyor. Belki de aşağı çekme bir sebepten dolayı bozulmuştur? Sadece GPIO pininin kendisinin işlevsel olduğunu biliyorum, programlandığında LED'i doğru şekilde sürebilir.
Yanıtlar
Referans kılavuzunda, bu belirli MCU serisinin USB-C konektörü CC pinlerinden biri için PB4 kullandığını okur. Bu, pinin, sıfırlama zamanında varsayılan olarak açık bir dahili 5.1k aşağı çekme özelliği desteğine sahip olduğu anlamına gelir, aksi takdirde USB-C konektörü üzerinden bellenimi indirmek için önyükleyiciyi kullanmak mümkün olmayabilir. Bu nedenle, JTAG'ın kullanılması gerekiyorsa, aşağı çekme devre dışı bırakılabilir. Dolayısıyla LED'i de etkileyecektir.
Davranışa neden olan şey bir yerde yapılan bir hatadır. Ya düşündüğünüz pinlere gerçekten bağlı değilsiniz (en tecrübeli mühendis bile bunu yapabilir) ya da kılavuz hatalı. Haklısın. Bunların loş bir şekilde aydınlatılmasının tek yolu, bir aşağı çekmenin olmasıdır.
Bazen cevap, kılavuzun derinliklerine gömülüdür.
Eğer canınızı sıkıyorsa, üzerine güçlü bir çekme yapın.
Varsayılan olarak GND'ye aşağı çekilerek etkinleştirilirse (ve bu pinin başlangıçta bir aşağı çekilmesi varsa mikroişlemci veri sayfasında not edilmelidir) o zaman evet, led aracılığıyla bir miktar akım boşaltma olasılığı vardır. Normalde kod, herhangi bir çift işlevli pini doğru durumlarına başlatır ve / veya gerekli olmayan herhangi bir açılır kapanır / yukarı kaldırılır. Ama senin durumunda kod olmadığını söylüyorsun. Doğru yazılmış bazı başlatma kodlarıyla, LED doğru başlangıç durumuna getirilecektir (muhtemelen varsayılan olarak KAPALI). Eğer uykunuzu kaybediyorsanız, en iyisi, panoyu açıp kodu çalıştırdığınız anda güçlü bir çekme eklemek veya kodun çalıştığından emin olmaktır.