Bir omuz kazanın sırt çantası
Bu ne kadar zor?
Bir şans ver!
_
Uzun basın tanıma
Bugün sorunun nedenini bulmaya devam ediyorum.Seri port tarafından alınan veriyi görüntülemek için hexadecimal sistemi kullanın.Aslında ASCII kodu değil. Önceki fikre göre saat konfigürasyonunu bulmaya başladım: Önce daha önce fark edilmeyen bir problem buldum.Nucleo-144'ün kristal X3'ü kaynaklanmamıştı. , ST-Link'in MCO'sunun saat (8MHz) çıkışını kullanarak, HSE'nin BYPASS moduna ayarlanması gerekir; değişiklikten sonra, hala yanlış olduğu anlaşılır ve ardından tek adımlı hata ayıklama sistem saati şu şekilde olur:
Açıkçası yanlış! Maksimum 216MHz nasıl bu kadar büyük olabilir! !
Şunları bulmak için tek adımlı izlemeye devam edin:
Burada bir hata oluştu. Pllvco, HSE_VALUE makrosu temel alınarak hesaplandı:
1
2
3
4
5
eğer (__ HAL_RCC_GET_PLL_OSCSOURCE! = RCC_PLLCFGR_PLLSRC_HSI)
{
/ * HSE, PLL saat kaynağı olarak kullanılıyor * /
pllvco = ((HSE_VALUE / pllm) * ((RCC- > PLLCFGR ve RCC_PLLCFGR_PLLN) > > POSITION_VAL (RCC_PLLCFGR_PLLN)));
}
Suçluyu bulmak için HSE_VALUE izleyin:
1
2
3
4
5
6
7
8
9
/ * ########################## HSE / HSI Değerleri uyarlaması ################ #### * /
/ **
* @brief Uygulamanızda kullanılan Harici Yüksek Hızlı osilatörün (HSE) değerini ayarlayın.
* Bu değer, RCC HAL modülü tarafından sistem frekansını hesaplamak için kullanılır
* (HSE, sistem saat kaynağı olarak doğrudan veya PLL aracılığıyla kullanıldığında).
* /
# if! tanımlıysa (HSE_VALUE)
#define HSE_VALUE ((uint32_t) 25000000U) / *! < Harici osilatörün Hz cinsinden değeri * /
#endif / * HSE_VALUE * /
O zamandan beri biraz kafam karıştı, MDK'da ayarlanan kristal frekansı çalışmıyor mu?
Yapmayın, makroyu doğrudan değiştirebilirsiniz:
1
2
3
4
5
6
7
8
9
/ * ########################## HSE / HSI Değerleri uyarlaması ################ #### * /
/ **
* @brief Uygulamanızda kullanılan Harici Yüksek Hızlı osilatörün (HSE) değerini ayarlayın.
* Bu değer, RCC HAL modülü tarafından sistem frekansını hesaplamak için kullanılır
* (HSE, sistem saat kaynağı olarak doğrudan veya PLL aracılığıyla kullanıldığında).
* /
# if! tanımlıysa (HSE_VALUE)
#define HSE_VALUE ((uint32_t) 8000000U)
#endif / * HSE_VALUE * /
Derleyin ve indirin:
Doğru göster! Peki, bunu bugün yapalım! Öğrenmek için bu kadar çok materyal sağladığın dakikliğe teşekkürler. MDK'daki kristal frekansı ayarının neden işe yaramadığı sorusuna gelince, umarım bunu bilenler bana biraz tavsiye verir!