Danke euch allen...
Habe den Fehler gefunden!
Ich verwende hier ja einen ConnectivityLine Controller.
Deshalb ist STM32F10X_CL definiert.
Dies führt im File stm32f10x.h zu folgendem "Problem"
1 | #if !defined HSE_VALUE
|
2 | #ifdef STM32F10X_CL
|
3 | #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
|
4 | #else
|
5 | #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
|
6 | #endif /* STM32F10X_CL */
|
7 | #endif /* HSE_VALUE */
|
Hier wird dann ein 25MHz HSE (Quarz) definiert.
Ich verwende jedoch einen 8MHz Quarz.
Dies war mir jedoch schon vorher bewusst, deswegen habe ich VOR dem
includieren der stm32f10x.h Datei folgende Zeile hinzugefügt:
1 | #define HSE_VALUE ((uint32_t)8000000)
|
Nach dem Compilieren wurde nun der Abschnitt welcher den 25MHz Quarz
definiert hatte ausgegraut. Ich ging also davon aus, dass ich korrekt
den neuen Wert gesetzt hatte.
Die gesamte StdPeriphLib brechnet Ihre Taktspezifischen Werte mit dem
HSE_Value
Doch leider klappte die definition des 8MHz Quarzes nicht.
Obwohl diese Stelle nun Grau war, war das define HSE_Value an allen Code
Stellen 25MHz. Erst ein entfernen meiner definition vor dem Inkludieren
und ein anpassen des Files brachte abhilfe.
1 | #if !defined HSE_VALUE
|
2 | #ifdef STM32F10X_CL
|
3 | #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
|
4 | #else
|
5 | #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
|
6 | #endif /* STM32F10X_CL */
|
7 | #endif /* HSE_VALUE */
|
Kann mir jemand dieses Verhalten erklären?
Es wird in den Comments auf folgendes hingwiesen:
1 | /* Tip: To avoid modifying this file each time you need to use different HSE, you
|
2 | can define the HSE value in your toolchain compiler preprocessor. */
|
Doch wo liegt hier der Unterschied zu meinem vorgehen?
Danke schonmal :)
P.S. nach dem ändern des Abschnitts auf 8000000 funktionierte der USART
problemlos.