Hur använder man GPIO pinnarna inom STM32?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Hur använder man GPIO pinnarna inom STM32?

Inlägg av Al_Bundy »

Jag har genererat ett litet projekt med STMCubeMX till mitt STM32 Nucleo kort och hittat ett exempelkod på internet.

Kod: Markera allt

while (1)
  {
    /* USER CODE END WHILE */
	  HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
	  HAL_Delay(500);
    /* USER CODE BEGIN 3 */
  }
Men vad betyder just denna del:
GPIOA
?

Jag förstår att STM32 använder något bibliotek vid namn HAL. GPIO_TogglePin är alltså en GPIO som behåller sin status.
På mitt STM32 kort så finns det dock ingen GPIO_PIN_5, utan D5. Borde man inte skriva D5 då istället? Precis som Arduino?

Någon som kan vägleda mig hur man använder GPIO pinnarna? Läsa, skriva digitalt och analogt tänker jag börja med. Där efter blir det SPI, I2C, CAN och UART.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43148
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Hur använder man GPIO pinnarna inom STM32?

Inlägg av sodjan »

"D5", "GPIO_PIN_5" (o.s.v.) är ju bara symboler som sannolikt har ett
värde som pekar ut pinnen i fråga. De (symbolerna) kan ju heta precis
vad f-n som helst och det finns absolut ingen som helst anledning att
de skulle råka heta samma sak i olika miljöer. Du får väl helt enkelt
lära dig och hålla dig till den miljö/processor som du använder just nu.

Så varför nämna Arduino alls då du ju faktiskt använder STM32 !?

> GPIO_TogglePin är alltså en GPIO som behåller sin status.

Låter som en väldigt märklig tolkning! Min spontana gissning är att
det är en funktion som togglar en pinne...

> Men vad betyder just denna del: "GPIOA"

http://embedded-lab.com/blog/stm32-gpio-ports-insights/

"In any microcontroller there is at least one general purpose input-output port.
STM32 is a not different breed and as expected it also has several GPIO ports.
These ports are usually named GPIOA, GPIOB, etc. but unlike most 8/16-bit micros
these ports are 16 bit wide. Thus, in general, every port has 16 IO pins. Port pins
have several modes of operation and this is what that makes them both robust and
complex at first. In development boards the IO port pin naming is cut short and so
we’ll find PA0, PB12, etc. instead of GPIOA0, GPIOB12, etc. Even in the reference
manuals this short naming is used widely. In the end every I/O pin is general
purpose in nature."
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur använder man GPIO pinnarna inom STM32?

Inlägg av Al_Bundy »

Finns det ingen referensmanual till att använda pinnarna? När jag menar referensmanual så menar jag en tydlig välskriven lista med exempel. Inte massa teori och bortförklaringar ;)
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43148
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Hur använder man GPIO pinnarna inom STM32?

Inlägg av sodjan »

Det var ju en tråd om STMCubeMX för ett par månader sedan.
http://elektronikforumet.com/forum/view ... =7&t=92907
Jag utgår från att du såg det och har läst det. Om inte, gör det.
Sen kan du ställa frågor. Det var en intressant tråd, för övrigt.
Användarvisningsbild
AndLi
Inlägg: 17044
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Hur använder man GPIO pinnarna inom STM32?

Inlägg av AndLi »

Registrena du behöver sätta för att styra funktioner i uc finns beskrivna i referensmanualen.

Sen har väl din kompilator leverantör exempel på hur du sätter register hanterar interrupt osv? Den kompilator jag använder för stm32 har det i alla fall (iar's)

Halen är beskriven i en separat dokumentation, personligen tycker jag den strular till mer än underlättar... men jag kommer ju så att säga underifrån, och inte från någon abstrakt windowsutveclling....
Rick81
Inlägg: 746
Blev medlem: 30 december 2005, 13:07:09

Re: Hur använder man GPIO pinnarna inom STM32?

Inlägg av Rick81 »

Det är inte så svårt:
  HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);

första argumentet är porten A och argumentet är pinne 5. Dvs pinne A5 tooglar...


Jag tror det står i kommentar ovanför funktionen om jag inte minns fel...
Mr Andersson
Inlägg: 1394
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: Hur använder man GPIO pinnarna inom STM32?

Inlägg av Mr Andersson »

> Jag tror det står i kommentar ovanför funktionen om jag inte minns fel...

Måste man läsa?!
Jag föredrar mitt TI-kort. Jag viftar lite med armarna och sjunger besvärjelser och då händer det grejer.

Men för att vara on-topic..
Description of STM32F4 HAL and LL drivers
Kapitel 29.2.2 How to use this driver
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur använder man GPIO pinnarna inom STM32?

Inlägg av Al_Bundy »

Rick81 skrev:Det är inte så svårt:
  HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);

första argumentet är porten A och argumentet är pinne 5. Dvs pinne A5 tooglar...


Jag tror det står i kommentar ovanför funktionen om jag inte minns fel...
Men är inte A5 själva anslog pin 5 på kortet mitt?
Användarvisningsbild
AndLi
Inlägg: 17044
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Hur använder man GPIO pinnarna inom STM32?

Inlägg av AndLi »

Det är väl Arduino som kallar analoga ingångar för An och digitala för Dn

De namn som nämns här är på själva processorn, vad ditt kort kallar de sen för är svårt för oss att veta...
SvenW
Inlägg: 1116
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: Hur använder man GPIO pinnarna inom STM32?

Inlägg av SvenW »

Dylika namnkonventioner brukar finnas i headerfilerna.

I min dator ligger de i förljade:
~/projf4/Drivers/STM32F4xx_HAL_Driver/Inc
~/projf4/Inc
...
Man bör konfigurerar sin editor/IDE så att man snabbt kan hitta i dessa.
I Linux har man etags. Jag känner inte till hur man konfigurerar Kiel och liknade IDE,
men antar att det går även där.

Det är bra att bekanta sig med headerfilerna innan man startar; väl igång tittar man i dem
allt som oftast.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur använder man GPIO pinnarna inom STM32?

Inlägg av Al_Bundy »

AndLi skrev:Det är väl Arduino som kallar analoga ingångar för An och digitala för Dn

De namn som nämns här är på själva processorn, vad ditt kort kallar de sen för är svårt för oss att veta...
Men jag valde mitt kort i STMCubeMX för att generera ett projekt. Se första bild. Jag rörde inget annat.

Mitt STM32 kort har också Arduino liknande namngivningar på kortet. Digital 5 är alltså D5. Analog 0 är A0 osv.
Användarvisningsbild
Wedge
Inlägg: 1026
Blev medlem: 8 juli 2012, 17:33:33

Re: Hur använder man GPIO pinnarna inom STM32?

Inlägg av Wedge »

Det borde ju framgå nånstans i dokumentationen av ditt Nucleokort vilken port och vilken bit som styr det som kallas "D5" i Arduinokontakteringen. På mitt kort med STM32F207 är PE11 dragen till D5.
Användarvisningsbild
AndLi
Inlägg: 17044
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Hur använder man GPIO pinnarna inom STM32?

Inlägg av AndLi »

Det framgår av schemat för kortet vilken pinne på processorn D0 och A5 osv är anslutna till.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: Hur använder man GPIO pinnarna inom STM32?

Inlägg av Magnus_K »

Jag brukar skriva ut en pinout-karta och sätta bredvid skärmen när jag pysslar med liknande kort.

Sök på ditt specifika kort och "pinout" så borde du hitta något som tex nedan. Där ser du vilken pinne som går vart samt lite annat smått och gott.
nucleo_f303k8_2017_10_10.png
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur använder man GPIO pinnarna inom STM32?

Inlägg av Al_Bundy »

Nu hittar jag pinnarnas definitioner :) Fattas bara vilka HAL-funktioner det finns:

HAL_GPIO_ReadPin() / HAL_GPIO_WritePin(), HAL_GPIO_TogglePin ().

Dem finns här på sidan 57. https://www.st.com/content/ccc/resource ... 105879.pdf

Men jag hittar inte argumenten för att passera in dem i funktionerna. Finns det inget bättre dokument att läsa ifrån?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Skriv svar