Hallo Kann ich in der Arduino IDE mit stm32duino Core ermitteln, welche Clock Source für HSC und LSC aktiv ist und welcher Takt? So ganz werde ich aus der KAL-Doku nicht schlau.
Hallo Kann ich in der Arduino IDE mit stm32duino Core ermitteln, welche Clock Source für HSC und LSC aktiv ist und welcher Takt? So ganz werde ich aus der KAL-Doku nicht schlau.
Das kannst du aus den relevanten Registern auslesen. Die Register sind im Reference Manual beschrieben.
Allerdings wundert mich, dass du diese Einstellung "ermitteln" willst, denn sie wird doch von deinem eigenen Programm eingestellt. Du musst doch wissen was du eingestellt hast.
Was ist KAL?
Allerdings wundert mich, dass du diese Einstellung "ermitteln" willst, denn sie wird doch von deinem eigenen Programm eingestellt.
Er hat vermutlich ein Arduino Projekt. Da wird das vermutlich für ihn übernommen und er will nun wissen was da eingestellt wird.
welche Clock Source für HSC und LSC aktiv ist und welcher Takt
Bluepill ist ein F103. Also hätte ich vermutet da: https://github.com/stm32duino/Arduino_Core_STM32/blob/main/system/STM32F1xx/system_stm32f1xx.c
Was ist KAL?
Kernel Abstraction Layer?
Bluepill ist ein F103. Also hätte ich vermutet da:
PLLCLK 72 MHz, LSI 40 kHz
Er hat vermutlich ein Arduino Projekt. Da wird das vermutlich für ihn übernommen und er will nun wissen was da eingestellt wird.
Genau. Und ich bin verwirrt, weil ich andere Ergebnisse bekomme.
1 |
|
2 |
|
3 |
|
liefert "1", was wenn ich mich zu https://github.com/stm32duino/Arduino_Core_STM32/blob/main/system/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h durchhangle und weiter zu rc.h: RCC_CFGR_SW_HSE für den System Clock Multiplexer bedeutet. Damit sind aber keine 72MHz möglich, wie bei HAL_RCC_GetSysClockFreq() oder F_CPU ausgegeben wird.
BTW: Die Bluepill nutzt einen STM32F103C8, was dann wohl https://github.com/stm32duino/Arduino_Core_STM32/blob/main/variants/STM32F1xx/F103C8T_F103CB(T-U)/variant_PILL_F103Cx.cpp bedeutet - aber gleiche Verwirrung
HAL_RCC_ClockConfig() liest nur die Felder die du gesetzt hast. Dein RCC_ClkInitStruct ist leer.
Aha. Ich habe mit dem hier rumexperimentiert:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
Nicht schick aber es gibt folgende Ausgaben:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
Wie geht es denn richtig?
Garbage in garbage out. HAL_RCC_OscConfig() und HAL_RCC_ClockConfig() sind rein zum setzen gedacht.
Wie geht es denn richtig?
Es gibt die HAL_RCC_GetOscConfig() und HAL_RCC_GetClockConfig() Funktionen, aber auch die nützen nur etwas wenn die Werte über HAL gesetzt wurden.
hier findest Du die passenden Makros um Register direkt auszulesen, z.B. __HAL_RCC_GET_SYSCLK_SOURCE()
... Wie geht es denn richtig?
Bare-metal fuer F1 und F3 etwa wie
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 |
|
72 |
|
73 |
|
74 |
|
75 |
|
76 |
|
77 |
|
78 |
|
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.