Forum: Mikrocontroller und Digitale Elektronik STM32f4 mit Cube HAL Programmierung. Neue Syntax


von Gerald G. (gerald_g)


Lesenswert?

Hallo,

es gibt ja mittlerweile schon eine ganze Zeit das Cube System vom ST.

Ich dachte ich setze meine Coocox Toolchain neu auf, und übernehme 
gleich die Cube Library, welche bereits in Coocox integriert ist.

Doch nun geht mein alter Code nicht mehr, da die Befehle teils etwas, 
teils deutlich anders sind.

statt
1
GPIO_InitStructure.GPIO_Pin
wird nun
1
GPIO_InitStructure.Pin

geschrieben. Statt:
1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
2
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
wird nun:
1
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
geschrieben.

Gibt es irgendwo ein Tutorial mit Beispielcodes, wie früher für die alte 
Library? Ich finde leider nirgens etwas für die neue. Es ist nämlich 
sehr mühsam die ganzen neuen Umsetzungen zu suchen/finden.

Danke schon mal

: Bearbeitet durch User
von innerand i. (innerand)


Lesenswert?

Mit dem Cube selbst kommen ein paar Beispielprojekte mit.
So richtige Tutorials sind allerdings auch mir nicht bekannt und die 
Doku der ganzen Cube-Geschichte ist generell- sagen wir mal - 
ausbaufähig.

von Gerald G. (gerald_g)


Lesenswert?

Ja, das ist das nächste. Ich kann Cube nicht von der ST Seite laden. Die 
paar MB dauern immer über eine Stunde, aber am Ende bricht der Download 
immer ab. Das geht schon seit Tagen so. Eine alternative Downloadquelle 
habe ich auch hierfür nicht gefunden. Ich komme also an die Beispiele 
garnicht ran.

edit: Ha, einmal besschwert und der download läuft dann. Wenigstens das.

: Bearbeitet durch User
von innerand i. (innerand)


Lesenswert?

Den F4 könnt ich hochladen wenn's hilft.

von Gerald G. (gerald_g)


Lesenswert?

Danke, hat dann doch geklappt (1MB/s).

von Marc O. (marcosfs)


Lesenswert?

Hey Gerald und alle,

ich selber bin ganz neu mit ST uCs, und bin gerade dabei mich mit den 
HAL_ADC Funktionen zu prügeln. Die Dokumentation ist, wie gesagt, 
scheußlich, vor allem wenn mit Atmels oder PICs verglichen.

Ich würd dich gerne fragen, wenn du es mal schaffst, mit den HAL 
Funktionen erfolgreich ADC zu machen, ob du nicht den Code hochladen 
könntest. Ich verstehe nicht mal wie die Variable aussieht, in die man 
angeblich die Daten speichert, nachdem man z.B. 8 Kanäle aus einem ADC 
Modul gespeichert hat.

Bei mir läuft nämlich gar nichts mit ADC, ich verstehe die Libraries 
nicht so gut und die HAL Anleitung ist ja trotz der 800 Seiten 
unglaublich begrenzt.

Würd mich freuen wenn jemand hier auch nur n einfachs PollForConversion 
ADC mal zeigen würde... Das Beispiel von ST für DMA hilft mir nicht 
weiter und für andere Wege des ADC gibt's soweit ich finden konnte 
keins.

Cheers

von Programmierer (Gast)


Lesenswert?

Als erstes möchte ich einmal loswerden, dass sich die Syntax der Sprache 
C nicht ändert, wenn man eine Library von ST einbindet oder austauscht. 
Die Syntax ist also nicht "neu". Was sich ändert ist das API.

Ich wollte auch letztens mal das STM32 Cube ausprobieren, und habe einen 
Blick in den CAN-Header geworfen, und gesehen:
1
typedef struct
2
{
3
  /* ... anderes Zeug ... */
4
5
  
6
  uint32_t TTCM;       /*!< Enable or disable the time triggered communication mode.
7
                            This parameter can be set to ENABLE or DISABLE. */
8
  
9
  uint32_t ABOM;       /*!< Enable or disable the automatic bus-off management.
10
                            This parameter can be set to ENABLE or DISABLE */
11
12
  uint32_t AWUM;       /*!< Enable or disable the automatic wake-up mode. 
13
                            This parameter can be set to ENABLE or DISABLE */
14
15
  uint32_t NART;       /*!< Enable or disable the non-automatic retransmission mode.
16
                            This parameter can be set to ENABLE or DISABLE */
17
18
  uint32_t RFLM;       /*!< Enable or disable the receive FIFO Locked mode.
19
                            This parameter can be set to ENABLE or DISABLE */
20
21
  uint32_t TXFP;       /*!< Enable or disable the transmit FIFO priority.
22
                            This parameter can be set to ENABLE or DISABLE */
23
}CAN_InitTypeDef;

Die Herren verwenden tatsächlich uint32_t als boolean-Typ, sprich, sie 
nutzen 1 Bit des uint32_t und verschwenden die 31 übrigen - wenigstens 
uint8_t hätten sie nehmen können, um nur 7 von 8 bits zu verschwenden 
statt 31 von 32.

Außerdem haben sie den ganzen Ablauf umgebaut, die Library verwurstet 
jetzt selbst die Interrupts und man hat selbst keine Kontrolle mehr 
darüber. Als ich das gesehen habe, wollte ich die weiteren 
Abscheulichkeiten gar nicht erst erforschen, und habe lieber wieder die 
alte StdPeripheral Library verwendet...

zB das Konfigurieren der CAN-Filter ist aber auch da so bescheuert, dass 
es per direktem Register-Zugriff einfacher und übersichtlicher geht...

von Schaulus Tiger (Gast)


Lesenswert?

Die minimale ADC-Ansteuerung dürfte ungefähr so aussehen, hier noch mit 
den "offiziellen" defines:
1
#include "stm32F205xx.h"
2
3
int
4
adc_read (int channel)
5
{
6
  RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;   /* Takt einschalten                */
7
  ADC->CCR = ADC_CCR_ADCPRE_1;          /* ADC-Takt = PCLK2 / 6            */
8
  ADC1->CR1 = 0;                        /* CR1 ist für Fortgeschrittene ;) */
9
  ADC1->SMPR1 = 6;                      /* 144 Takte lang samplen          */
10
  ADC1->CR2 = ADC_CR2_ADON;             /* Analogteil einschalten          */
11
  ADC1->SQR3 = channel;                 /* die Kanalnr. 0..18              */
12
  ADC1->CR2 |= ADC_CR2_SWSTART;         /* los geht's                      */
13
  while ((ADC1->SR & ADC_SR_EOC) == 0); /* Geduld...                       */
14
  return ADC1->DR;                      /* 12 Bit rechtsbündig abliefern   */
15
}

Programmierer schrieb:
> zB das Konfigurieren der CAN-Filter ist aber auch da so bescheuert, dass
> es per direktem Register-Zugriff einfacher und übersichtlicher geht...

Das gilt eigentlich für alles. Natürlich nimmt man für USB lieber eine 
Lib, aber da steckt ja der Aufwand in den höheren Schichten.

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.