Forum: Mikrocontroller und Digitale Elektronik Keil-Simulator: Baudrate


von Martin (Gast)


Angehängte Dateien:

Lesenswert?

Zum Programmieren eines STM32F103C8 nehme ich einen Keil-ARM Compiler. 
Das Initialisieren des USARTs übernimmt die Library von ST (Code siehe 
unten).

Die Library sollte die Einstellung unter Target-Options verwenden (siehe 
Target.gif). Das Funktioniert jedoch nur mit 8 MHz. Gebe ich bei den 
Target-Options 12 MHz an, dann ist die Baudrate fehlerhaft (x 1,5).

Wo ist mein Problem? Wie kann ich mit 12 MHz im Simulator die korrekte 
Baudrate bekommen?

Irgendetwas mache ich falsch: kann ich der Library von ST z. B. 
mitteilen, welche Frequenz ich verwende?

1
  USART_InitStructure.USART_BaudRate = 9600;
2
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
3
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
4
  USART_InitStructure.USART_Parity = USART_Parity_No ;
5
  USART_InitStructure.USART_HardwareFlowControl =  USART_HardwareFlowControl_None;
6
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
7
  
8
  /* Configure the USARTx */ 
9
  USART_Init(USARTx, &USART_InitStructure);
10
  /* Enable the USARTx */
11
  USART_Cmd(USARTx, ENABLE);

von Stephan S. (stephan1008)


Lesenswert?

Hallo Martin,

die Frequenz die du unter Target angibst, ist die Frequenz deines 
Quarzes/Oszillators mit der dein Proz getaktet wird.

Das hat mit der Baudrate erstmal nix zu tun.

von Martin (Gast)


Lesenswert?

Stephan S. schrieb:

> Hallo Martin,
>
> die Frequenz die du unter Target angibst, ist die Frequenz deines
> Quarzes/Oszillators mit der dein Proz getaktet wird.
>
> Das hat mit der Baudrate erstmal nix zu tun.

das ist richtig, nur der Simulator nimmt diese Frequenz als 
Bezugsfrequenz für das Debugging.

Bleibt die Frage wie die Entwickler der Library sich das gedacht haben. 
In der Initialisierung wird nicht das Baudatenregister(BRR) angegeben, 
sondern die Baudrate (siehe Code der Initialisierung im Eingangspost). 
Wo weiß die Initialisierungsroutine die Frequenz bzw., wo muss ich die 
Frequenz in meinem Programm angeben?

von Martin (Gast)


Lesenswert?

Das Problem habe ich erst einmal so "gelöst":

baudrate = baudrate * 8 / 12;   // Pfusch: mal 8 MHZ geteilt 12 MHz

von Martin (Gast)


Lesenswert?

Keiner im Forum, der die Library für den STM32F103CB mit einem Quarz 
verwendet, das nicht 8 MHz hat?

von W.S. (Gast)


Lesenswert?

Nö.
Weswegen bist du eigentlich so scharf drauf, diese ST-Lib überhaupt zu 
verwenden? Ich hab hier schon x-mal geschrieben, das dieses Machwerk ein 
riesiger Obermist ist, alles gewaltig aufbauscht und dennoch die 
Probleme nicht löst, sondern nur vergrößert.

W.S.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.