İki pim aynı alternatif işleve sahip olacak şekilde yapılandırıldığında STM32'de ne olur?


10

STM32F051 kılavuzunu okurken, aynı alternatif işlevi iki pim üzerinde yapılandırmak mümkün görünüyor; örneğin, aynı anda birden fazla USART1_TX pininiz olabilir. Veya örneğin iki USART_RX piminin daha sorunlu durumu. Kılavuz bu durumda sessizdir. Bu yasal / güvenli mi? Bu yararlı mı?


2
İlginç soru. Bazen neden TX çıktısını başka bir pime almanın veya birkaç yerde arabellekli saatler almanın hata ayıklama sırasında neden yararlı olacağını anlayabiliyorum. Aramak zorunda kalan herkesi kurtarmak için ilgili manuel bağlantıyı eklemeye değer olabilir.
PeterJ

Yine - İlginç bir soru. Peki iki farklı raptiyeden USART_RX atama durumu ne olacak? Çip tasarımcılarının, iki kaynaktan iç çekişmeye izin vermek yerine, diğeri için bir öncelik planı planladıklarını umuyoruz.
Michael Karas

Bunu hiç denemedim, ama pim diyagramlarından hatırladığım temelde, pimleri dahili olarak birbirine bağlarsınız.
rjp

Yanıtlar:


5

G / Ç işlevlerini seçmek için pim başına kayıt kullanan işlemcilerde, bir çıkış işlevini çakışma olmadan birden fazla pime yönlendirmek genellikle mümkündür; tüm pimler aynı çıkışı yankılanacaktır. Bir girişe birden fazla pimin bağlı olmasının etkisi genellikle belirtilmez; örneğin bir UART, bir UART'a bağlı G / Ç pimleri 3 ve 4'e sahipse, UART, 3 ve 4 numaralı pinleri giriş olarak alan bir "AND" geçidine bağlanmış gibi davranabilir veya bağlanmış gibi davranabilir bir pime bağlayın ve diğerini görmezden gelin, yoksa her iki pimi de ılımlı bir direnç direncine sahip transistörler aracılığıyla UART'ın giriş arabelleğine bağlayabilir veya pim 3 yüksek ve 4 düşük olduğunda ekstra akım çekebilir veya tam tersi akla gelebilecek her şeyi yapabilir. Yapmıyorum

Bazı Microchip parçalarında (belki de bazı STM parçalarında) kullanılan biraz daha hoş bir tasarım yaklaşımı, her bir G / Ç işlevinin hangi pimi giriş kabul etmesi gerektiğini seçmek için bir çoklayıcı içermesini ve I Veri çıkışı gereken / O işlevi. Böyle bir tasarım, bir iğnenin birden çok G / Ç işlevini beslemesini mümkün kılarken, aynı anda çakışan yapılandırmaların ortaya çıkardığı belirsizlikleri de ortadan kaldırır.


3

Evet, kullanışlıdır. STM32F407VGT6 üzerindeki deney sonucu: Her iki AF pini aynı anda AF olarak kullanılabilir, en azından bu pimler AF girişleri olarak kullanılıyorsa. Deney, harici tetikleyici - "TIM1_ETR" sinyalinin yükselen kenarında TIM1'i tetiklemekti. "TIM1_ETR" sinyali MCU paketinin PE7 ve / veya PA12 pinlerine eşlenebilir.

Deney: Her iki PE7 ve PA12 pimini TIM1 için AF "TIM1_ETR" olarak başlatın:

{
    GPIO_InitTypeDef GPIO_InitStruct = { 0 };
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

    GPIO_InitStruct.Pin = GPIO_PIN_7;
    HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); // configure PE7 as AF

    GPIO_InitStruct.Pin = GPIO_PIN_12;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // configure PA12 as AF
}

Sonuç - TIM1, PE7 veya PA12 pimlerinden herhangi birinde yükselen kenar ile başlatılır.

Bu, çalışma zamanında MUX (değiştir) AF pinlerinin yolunu gösterir:

main
{
  GPIO_InitTypeDef GPIO_InitStruct = { 0 };

// Deactivate PA12 input (set as regular input):
        GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
        GPIO_InitStruct.Pin = GPIO_PIN_12;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

// select PE7 as a trigger source,
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pin = GPIO_PIN_7;
        HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

// Arm the timer
    arm_tim1();

/* Now timer will be started by rising edge only on PE7 */

// ... later one can select PA12 as trigger source. Deactivate PE7 (set as regular input):
        GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
        GPIO_InitStruct.Pin = GPIO_PIN_7;
        HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

// Activate PA12
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pin = GPIO_PIN_12;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

// Arm the timer
    arm_tim1();
/* timer will be started by rising edge only on PA12 */
}

Bu, zamanlayıcı tetiklemesi için iki farklı kaynağa ihtiyaç duyulduğunda yardımcı olabilir, bu bizi MUX IC dışına kurtarabilir :). Gönderinin başında gösterildiği gibi başlatılırsa, her iki giriş de aynı anda kullanılabilir. Girişler birbirine bağlı değil, yani PA12'deki sinyal PE7'ye aktarılmıyor veya tersi (GPIO'lar giriş olarak ayarlandığından).

Kod, "STM32CubeF4 v5.3" + "Yazılım Paketi V1.24.0 / 08-Şubat-2019" tarafından oluşturulur.


2

Temel olarak, pimler alternatif işlevlere atanabilen GPIO'lardır, örneğin UART_RX. Her alternatif işlevin varsayılan pimi ve işlevin yeniden eşlenebileceği alternatif pimleri vardır. Eğer check out STM32F103 referans kitabını bölümünde 9.1.5 derler:

Farklı aygıt paketleri için çevresel G / Ç işlevlerinin sayısını en iyi duruma getirmek için, bazı alternatif işlevleri diğer bazı pimlere yeniden eşleştirmek mümkündür. Bu, ilgili kayıtların programlanmasıyla yazılım tarafından gerçekleştirilir (bkz. AFIO kayıtları sayfa 177. Bu durumda, alternatif işlevler artık orijinal atamalarıyla eşlenmez .


Bunu yapmamın yolu: yeni pimleri atadıktan sonra, önceki atama kaldırılır, böylece teknik olarak aynı çevresel fonksiyona bağlı birden fazla pim olamaz.
dext0rb

1
Bu mümkün değil, çünkü (en azından F103'te, STM32'nin diğer türevleriyle çalışmadım), alternatif pin, yeniden eşleme özelliğini kullanmadan, AF_Output olarak ayarlasanız bile fonksiyona atanamaz. GPIO kurulumu. Yeniden eşledikten sonra i i fonksiyonu artık orijinal pimde mevcut değil. Umarım bu ne demek istediğimi açıklar.
Manu3l0us

1
Bunun yapılma şekli farklı alt ailelerde çok farklıdır . F1 kayıt yapısı bunu yasaklayabilir, ancak F3 yapısı farklıdır, burada pimi bir pim işlevi yerine alternatif bir işleve yapılandırırsınız, bu nedenle yinelenen eşlemeler mümkündür. Aslında, kayıt yapısının izin verdiği bir kısım gibi görünen, sorulan sorunun durumuna cevap vermiyorsunuz.
Chris Stratton

1
@Chris Stratton STM32F302 Ref Manuel bölüm 8.3.2: "Cihaz G / Ç pimleri, tek seferde yalnızca bir çevre biriminin alternatif işlevine (AF) bağlı olan bir çoklayıcı aracılığıyla yerleşik çevre birimlerine / modüllerine bağlanır. bu şekilde aynı G / Ç pininde bulunan çevre birimleri arasında çakışma olmaz . " Ama aslında, bu bir AF'de birden fazla G / Ç hakkında bir şey söylemiyor. Giriş pimleri için birden fazla seçenek var mı?
Manu3l0us

1
Ben de F1x bilgi için teşekkür ederiz, ben de kullandım :-)
joeforker
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.