Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: Emre_Tuncay_ - 03 Şubat 2018, 23:41:36

Başlık: STM32F100RB Clock ile ilgili registerları değiştiremiyorum.
Gönderen: Emre_Tuncay_ - 03 Şubat 2018, 23:41:36
Merhaba üzerinde çalıştığım projem için STM32F100RB mikrodenetleyicimin çalışma frekansı yetmeyince max 24Mhz olan hıza erişmek için gerekli ayarları yaptım.Bu ayarları Mikrodenetleyicinin clock Ağaç diyagramına bakarak yaptım.İlgili kodları yazdığımda PLLMUL registerinın değişmediğini yükleme yapınca 0 a eşitlendiğini gördüm debug'ta.Bunun nedenini bilen varsa yardımcı olabilirmi.Kodlarımı ve clock ağacını aşağıya'ya ekliyorum.

void System_Clock_Cmd()
{
ErrorStatus Error;
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
Error = RCC_WaitForHSEStartUp();
if(Error==SUCCESS)
  {
//PLL Config
RCC_PLLConfig(RCC_PLLSource_PREDIV1,3);
RCC_PLLCmd(ENABLE);
RCC_GetFlagStatus(RCC_FLAG_HSERDY==RESET);
//AHB Config
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
}
else if(Error==ERROR)
  {
//HSE OSC not yet ready
while(1){}
}
}


(https://s17.postimg.cc/k1on3yxpn/clock.png) (https://postimg.cc/image/k1on3yxpn/)
Başlık: Ynt: STM32F100RB Clock ile ilgili registerları değiştiremiyorum.
Gönderen: Emre_Tuncay_ - 04 Şubat 2018, 01:26:38
Yaptığım hatayı buldum.Kod karmaşası olmasın diye RCC ayarlarını bir header dosyası içinden yapıp mainde çağırıyordum.Keil'de yeni fark ettiğim birşey header dosyası içinde syntax hatası olunca hata olduğunu söylemiyormuş.Oradan kaynaklı bir hata ve birde eksik kod yazmışım.Belki işine yarayan olur diye kodları buraya ekliyorum.

void System_Clock_Cmd()
{
ErrorStatus Error;
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
Error = RCC_WaitForHSEStartUp();
if(Error==SUCCESS)
  {
//PLL Config
RCC_PREDIV1Config(RCC_PREDIV1_Source_HSE,1);
RCC_PLLConfig(RCC_PLLSource_PREDIV1,RCC_PLLMul_5);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
//AHB Config
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
}
else
  {
//HSE OSC not yet ready
while(1){}
}
}

Hatalı yazdığım yer ise if in içindeki while satırıydı.