www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik stm32f103 hse clock


Autor: mikro111 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich möchte die hse clock nutzen (8Mhz Quarz).
ich habe dafür folgende routine geschrieben die im main aufgerufen wird.
als hsi/2 clock config funktioniert es!


void clock_init(){



  FLASH_SetLatency(FLASH_Latency_1);


   * Enable PLL, wait till it's stable, then select it as system clock*/

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
  RCC_PLLCmd(ENABLE);
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {}
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

  /* Set HCLK, PCLK1, and PCLK2 to SCLK (these are default */
  RCC_HCLKConfig(RCC_SYSCLK_Div1);
  RCC_PCLK1Config(RCC_HCLK_Div2);
  RCC_PCLK2Config(RCC_HCLK_Div1);

  /* Set ADC clk to 12MHz (14MHz max, 18MHz default)*/
  RCC_ADCCLKConfig(RCC_PCLK2_Div6);

  /*To save power, use below functions to stop the clock to ceratin
   * peripherals
   * RCC_AHBPeriphClockCmd
   */
  //RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ALL, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_ALL, ENABLE);

}

Autor: mikro111 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also es sollen 72Mhz als sysclk genutzt werden.

ADCclock sollen 12 Mhz sein.

PCLK1 müssen 36Mhz sein


oder muss ich den controller zunächst als hsi konfigurieren????

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mikro111 schrieb:

> Also es sollen 72Mhz als sysclk genutzt werden.

Wofür 1 Waitstate meiner Erinnerung nach zu wenig ist.

Autor: mikro111 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
??? was muss ich ändern??

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FLASH_SetLatency();

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mikro111 schrieb:

> oder muss ich den controller zunächst als hsi konfigurieren????

Ja, wenn er's nicht schon ist. Vorzugsweise immer aus HSI heraus 
woanders hin schalten. Aus dem Powerup/Reset kommt er allerdings sowieso 
mit HSI.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du den HSE überhaupt eingeschaltet?

Höflicherweise reduziert man den/die Periphieriebustakte bevor man den 
Sysclk auf Maximum stellt.

Code als Code posten, sieht sonst schrecklich aus.

Autor: mikro111 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void clock_init(){

  


                               

  /* Set HCLK, PCLK1, and PCLK2 to SCLK (these are default */
  RCC_HCLKConfig(RCC_SYSCLK_Div1);
  RCC_PCLK1Config(RCC_HCLK_Div2);
  RCC_PCLK2Config(RCC_HCLK_Div1);                                                             

  /* Set ADC clk to 12MHz (14MHz max, 18MHz default)*/
  RCC_ADCCLKConfig(RCC_PCLK2_Div6);                                                           

  
  /* First set the flash latency to work with our clock*/
   /*000 Zero wait state, if 0  MHz < SYSCLK <= 24 MHz
     001 One wait state, if  24 MHz < SYSCLK <= 48 MHz
     010 Two wait states, if 48 MHz < SYSCLK <= 72 MHz */
   FLASH_SetLatency(FLASH_Latency_2);                                                         

   /* Start with HSE clock (external 8mhz),  multiply by 9 to
    * get maximum allowed frequency: 72Mhz
    * Enable PLL, wait till it's stable, then select it as system clock*/
   RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);//9
   RCC_PLLCmd(ENABLE);
   while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {}
   RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);                   
  
  
  
  /*To save power, use below functions to stop the clock to ceratin
   * peripherals
   * RCC_AHBPeriphClockCmd
   */
 // RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ALL, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_ALL, ENABLE);                                         

  
}






scheint immernoch nicht zu laufen

Autor: mikro111 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A. K. schrieb:
> Hast du den HSE überhaupt eingeschaltet?

Wie geht das???

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Augen zu und durch ist der falsche Ansatz. Es gibt Doku. Und massenhaft 
Democode.

Autor: Hannes S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also auf jeden Fall fehlt da mal das:  RCC_HSEConfig(RCC_HSE_ON);

Die ganze Clock-Initialisierung kannst Du auch durch die ST-Lib machen 
lassen, schau Dir mal das File system_stm32f10x.c an.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.