Hallo liebe Forum User,
im Rahmen eines Projektes habe ich vor eine Servo (Quadcopter-Treiber)
Ansteuerung mit Discovery-Board (STM32F4-Discovery) zu realisieren.
Arbeite mit Atolic Truestudio IDE. Zuerst habe ich mit einer
"stm32f4_discovery.h" LIB in C++ folgende Funktionen realisiert:
- Blink-LED
- PWM-Signal (Timer) (2/20ms+1/20ms Initialisierung + variable Werte von
1/20ms bis 2/20ms)
- PIN-Interrupt durch ein externen Taster.
Neue Aufgaben führte mich zu Benutzung von CubeMX und damit
eingebundenen HAL-Library und C.
Folgende Aufgaben müssen realisiert werden:
1. Blink-LED (Erledigt)
2. PWM-Signal (Timer) (2 zu 18ms+ 1 zu 19ms Initialisierung + variable
Werte von 1 zu 19ms bis 2 zu 18ms Drehzahl) - bin gerade dabei.
3. Interrupt Zähler mit einer Lichtschranke - steht noch vor.
4. Übergabe von PWM Werten über UART-Schnittstelle via Terminal (PUTTY)
mit Interrupt (Umdrehungszahl des Motors)
Momentan stecke ich bei Aufgabe 2, der Oszilloskop misst kein
PWM-Signal. Fragen:
-Was könnte im Code Falsch sein?
-Lohnt sich in Berücksichtigung auf 4-8 Motoren in der Zukunft auf C++
umzusteigen (Klassen)?
-Lohnt sich HAL-Library zu verwenden? (habe bereits im Forum Gelesen das
die HAL viele Fehler mitgeschleppt)
Bin für sämtliche Vorschläge Dankbar!
Viele Dank im Voraus! Grüß, NJ
main-Funktion:
1
intmain(void)
2
{
3
4
HAL_Init();
5
6
SystemClock_Config();
7
8
MX_GPIO_Init();
9
10
MX_USART2_UART_Init();
11
12
MX_TIM4_Init();
13
14
15
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_1);//Timer4/CH1 Starten
16
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_2);//Timer4/CH2 Starten
Nikita J. schrieb:> Neue Aufgaben führte mich zu Benutzung von CubeMX und damit> eingebundenen HAL-Library und C.>> Folgende Aufgaben müssen realisiert werden:> 1. Blink-LED (Erledigt)> 2. PWM-Signal (Timer) (2 zu 18ms+ 1 zu 19ms Initialisierung + variable> Werte von 1 zu 19ms bis 2 zu 18ms Drehzahl) - bin gerade dabei.> 3. Interrupt Zähler mit einer Lichtschranke - steht noch vor.> 4. Übergabe von PWM Werten über UART-Schnittstelle via Terminal (PUTTY)> mit Interrupt (Umdrehungszahl des Motors)
Ich würde auch gleich noch mittels CubeMX das FreeRTOS einbinden lassen
und dann alles dort drin implementieren.
Wenn Du mit CubeMX den Code für PWM-Ausgabe erzeugen lässt, musst Du
noch zusätzlich den Timer sowie die PWM-Einheit (CCR) mittels passenden
HAL-Funktionen starten.
stromverdichter schrieb:> du hast doch einen eingebauten Debugger an einem Board. Schau doch> einfach in den Registern nach, wo es klemmt.
Dazu muss man diese aber erstmal verstehen. Und wer nur HAL macht, wird
das wohl nicht tun.
Nikita J. schrieb:> -Lohnt sich HAL-Library zu verwenden? (habe bereits im Forum Gelesen das> die HAL viele Fehler mitgeschleppt)
Ein Fehler ist ganz sicher, dass Leuten wie dir der Eindruck vermittelt
wird, man bräuchte das Reference-Manual nicht zu lesen, weil CubeMX/HAL
alles vollautomagisch macht.
Nikita J. schrieb:> sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_ETRMODE2;
Dein Code ist unvollständig. Die Deklaration von sClockSourceConfig
fehlt aber weißt du denn überhaupt wofür das gut ist? Ich fürchte nicht,
weil man es für das was du machen willst erstmal gar nicht benötigt.
Nikita J. schrieb:> /**TIM4 GPIO Configuration> PB6 ------> TIM4_CH1> [...]> Hier könnte Ihre Werbung sein!
Ja ne, is klar.
Hi,
ob sich die HAL lohnt oder nicht ist wohl eine Glaubensfrage.
Ich programmiere viel damit, im Regelfall funktioniert das auch,
mindestens genauso viel mache ich aber auch direkt mit den Registern.
Um einen Blick in das Reference Manual kommst du aber so oder so nicht
drum herum.
Der Init-Code ist aber so nicht von CubeMx erzeugt oder?
Gruß
Erstmals vielen Dank für ihre zahlreiche Antworten!
stromverdichter schrieb:> du hast doch einen eingebauten Debugger an einem Board. Schau doch> einfach in den Registern nach, wo es klemmt.
Hmm, ich befürchte das ich etwas bei Initialisierung falsch gemacht
habe. Da werde ich aber kaum was verstehen =( Bin in Mikrocontroller
Bereich ziemlich frisch.
Johnny B. schrieb:> Nikita J. schrieb:>> Neue Aufgaben führte mich zu Benutzung von CubeMX und damit>> eingebundenen HAL-Library und C.>>>> Folgende Aufgaben müssen realisiert werden:>> 1. Blink-LED (Erledigt)>> 2. PWM-Signal (Timer) (2 zu 18ms+ 1 zu 19ms Initialisierung + variable>> Werte von 1 zu 19ms bis 2 zu 18ms Drehzahl) - bin gerade dabei.>> 3. Interrupt Zähler mit einer Lichtschranke - steht noch vor.>> 4. Übergabe von PWM Werten über UART-Schnittstelle via Terminal (PUTTY)>> mit Interrupt (Umdrehungszahl des Motors)>> Ich würde auch gleich noch mittels CubeMX das FreeRTOS einbinden lassen> und dann alles dort drin implementieren.> Wenn Du mit CubeMX den Code für PWM-Ausgabe erzeugen lässt, musst Du> noch zusätzlich den Timer sowie die PWM-Einheit (CCR) mittels passenden> HAL-Funktionen starten.
FreeRTOS -> das ist doch eigenes kleines Betriebssystem, richtig? Bittet
dies größere Vorteile? Ich dachte das die Aufgaben relativ leicht mit
normalem C-Programm realisierbar sind!?
Timer habe ich doch mit dem Befehl
1
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_1);
gestartet!?
Curby23523 N. schrieb:> stromverdichter schrieb:>> du hast doch einen eingebauten Debugger an einem Board. Schau doch>> einfach in den Registern nach, wo es klemmt.>> Dazu muss man diese aber erstmal verstehen. Und wer nur HAL macht, wird> das wohl nicht tun.Christopher J. schrieb:> Nikita J. schrieb:>> -Lohnt sich HAL-Library zu verwenden? (habe bereits im Forum Gelesen das>> die HAL viele Fehler mitgeschleppt)>> Ein Fehler ist ganz sicher, dass Leuten wie dir der Eindruck vermittelt> wird, man bräuchte das Reference-Manual nicht zu lesen, weil CubeMX/HAL> alles vollautomagisch macht.>>> Nikita J. schrieb:>> sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_ETRMODE2;>> Dein Code ist unvollständig. Die Deklaration von sClockSourceConfig> fehlt aber weißt du denn überhaupt wofür das gut ist? Ich fürchte nicht,> weil man es für das was du machen willst erstmal gar nicht benötigt.>>> Nikita J. schrieb:>> /**TIM4 GPIO Configuration>> PB6 ------> TIM4_CH1>> [...]>> Hier könnte Ihre Werbung sein!>> Ja ne, is klar.
Reference Manual habe ich. Vollständig durchgelesen - nicht.
- wähle ich nicht damit die Clock-Quelle was mein Timer verwendet?
Warum brauche ich das für meine Realisierung nicht?
PSiem schrieb:> Hi,>> ob sich die HAL lohnt oder nicht ist wohl eine Glaubensfrage.> Ich programmiere viel damit, im Regelfall funktioniert das auch,> mindestens genauso viel mache ich aber auch direkt mit den Registern.> Um einen Blick in das Reference Manual kommst du aber so oder so nicht> drum herum.>> Der Init-Code ist aber so nicht von CubeMx erzeugt oder?>> Gruß
OK, ohne Reference Manual komme ich anscheinend nicht weiter...
Also, ich habe zwar GPIOs, UARTs, EXTIs und TIMs mit CubeMX erzeugt aber
dabei etwas rumgebastelt, den es nicht so funktioniert hat wie ich mir
vorstellte.
Wenn wir gerade beim Thema sind. Ich bin auch neu in der HAL Umgebung.
Habe einen fertigen code der mir Sensordaten ausließt den ich auf mein
NUCLEO-F411RE drauf gesteckt habe. Wie gehe ich da am besten ran? Ich
kenne mich ja schon nicht mit der HAL library aus, deswegen tu ich mir
gerade sehr schwer. Soll ich den Sensor erstmal weglassen und mich mit
meinem Board auseinandersetzen?