STM32f4 mit Cube HAL Programmierung. Neue Syntax

#3868094
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
#3868108
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.
#3874376
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
Gast #3874399
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...
Gast #3874758
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren