SWD Pinlerini I/O Olarak Kullanmak

Başlatan cagridinc, 25 Ekim 2014, 23:45:01

cagridinc

Merhaba,STM32F030 işlemci kullanıyorum.Resetten sonra SWD pinlerini(SWDIO ve SWCLK) I/O olarak kullanmak istiyorum. Datasheetinde resetten sonra I/O olarak kullanabileceğim yazıyor ancak SWDIO sürekli lojik 1, SWCLK lojik 0 da kalıyor.Bu konuyla uğraşan birisi varsa yardımcı olursa memnun olurum.İyi çalışmalar.Kod:

  RCC->AHBENR  |= 0x00020000;   //A  port clock enable
  GPIOA->PUPDR   = 0;            //A port No pull up, no pull down 
  GPIOA->MODER  |= 0x04000000;   //A13 output
  GPIOA->ODR    |= 0x00002000;   //A13 logic 1
  GPIOA->MODER  |= 0x10000000;   //A14 output
  GPIOA->ODR    |= 0x00004000;   //A14 logic 1

cagridinc

Buldum arkadaşlar, GPIO->MODER registerini ilgili pinlerini( A13 ve A14) çıkış olarak tanımlamadan önce resetlemek gerekiyormuş.Çok ilgilenen olmadı ama pin sıkıntısı çekip bu pinleri kullanmak zorunda kalanlar için faydası olması dileğiyle, iyi çalışmalar.
Kodun son hali:

  GPIOA->MODER  &= 0xC3FFFFFF;   //A13(SWDIO) ve A14(SWCLK) reset
  GPIOA->MODER  |= 0x14000000;   //A13 ve A14 output
  GPIOA->PUPDR  &= 0x00000000;   //A port No pull up, no pull down 
  GPIOA->ODR    |=   0x00004000;   //A14 logic 1
  GPIOA->ODR    |=   0x00002000;   //A13 logic 1

CLR

stm32F103 serisinde I/O'ya çevirdikten sonra swd'den tekrar program atılmıyordu yalnız STM32F030 serisinde de aynı olabilir. Program güncellemek için dahili bootloader'ı kullanmak zorunda kalabilirsin.
Knowledge and Experience are Power

z

Buna 2 şekilde engel olunabilmesi lazım.

1. yöntemde reset rutininin başında mesela yarım saniyelik gecikme konur.

2. Yöntemde SWClk ve SVDIO ya ilave olarak NRST pini kullanılır.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

cagridinc

Dediğiniz doğru STM32030 da da aynısı oluyor.Bunların hiçbirine gerek yok.Kullandığınız derleyicinin ST Link ayarlarında RESET ayarlarını "CONNECT DURING RESET" yapmanız yeterli olacaktır.

z

Sadece Clk ve DIO pinlerini kullanirken de oluyormu?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

CLR

Evet olur,

Bende j-link v8 var, st-link yok, normalde NRST yapıp connect yapınca gpiolar ayarlanmadan swd kullanılabiliyor olması gerekiyordu ama j-link ayarlarından, normal, NRST seçeneklerini denedim bir türlü tekrar atamamıştım, demek ki nrst'ten işlemci kalkıncaya kadar j-link connect yapamıyor, RESET DURING RESET kesin çalışması gerekir, nedense onu görmemişim ve denememişim.
Knowledge and Experience are Power

cagridinc

Herhangi bir tanesi çıkış olarak tanımlandığında bile bu durum oluyor.MODER çıkış olarak tanımlandığında AF moddan çıktığı için debug yapamıyorsun ve derleyici ST Link ayarları default değerinde(NORMAL) olarak kaldığında tekrar kod atamıyorsun.

halil82ist

Merhaba ;
anladığım kadarı ile buradaki arkadaşlar discovery boardtan gerçek hayata geçebilmiş arkadaşlar . Bir sorum olacak boot0 pini boş bıraksak çalışırmı yada direk şaseye birleştirsek ? şimdiden teşekkürler .

marecrisium

Boş bırakırsan çalışmaz. Datasheette boot modları var. Normal bi çalışma durumu için (flash hafızana başlama) boot0 pinini 10k gibi bi dirençle gndye bağlaman lazım.

Klein

Boot modunu değiştirmeyeceksen eğer, doğrudan GND'ye bağlayabilirsin.

serdararikan

gecikme rutinini SystemInit fonksiyonu içerisine mi yazmamız gerekiyor?

Zoroaster

Bu gecikme rutinini ilk başlarda koyuyorduk ama eğer programlaycıda NRST pinini de kullanıyorsak gerek yok galiba.

Bu durumu inceleyen oldu mu?

Besleme oturuncaya kadar  init işlemlerine geçmemeyi garantilediği için rutinlerimde hala bu gecikmeyi kullanıyorum.
Seytan deliginden kacti.

serdararikan

Alıntı yapılan: Zoroaster - 19 Kasım 2016, 15:30:49
Bu gecikme rutinini ilk başlarda koyuyorduk

stm32 konusunda yeniyim ilk başlarda derken

SystemInit

fonksiyonunun en başına mı yazmam gerekiyor?

Klein

Pin Init rutinlerinin hemen öncesine koyabilirsin.

Alıntı yapılan: Zoroaster - 19 Kasım 2016, 15:30:49
Bu gecikme rutinini ilk başlarda koyuyorduk ama eğer programlaycıda NRST pinini de kullanıyorsak gerek yok galiba.

Bu durumu inceleyen oldu mu?

Besleme oturuncaya kadar  init işlemlerine geçmemeyi garantilediği için rutinlerimde hala bu gecikmeyi kullanıyorum.
Reset pini kullanılıyorsa gerek olmayacaktır. Hiç programlayıcıda reset pini kullanmadım. Fakat SWD pinlerini kullandığım projeklerde elle reset yaparak programlıyorum.  Elle oluyorsa, programayıcı da yapabiliyordur.