Är en STM32 bra att använda som USB I/O-modul?

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:

Re: Är en STM32 bra att använda som USB I/O-modul?

Inlägg av Al_Bundy »

sodjan skrev:Har frågan om flyttal något med kontexten kring volatile att göra?
Eller var det bara en generell fråga inkastad i flödet? Nu så går det
ju inte att svara generellt på frågan om flyttal, "det beror på". På en
processor med hårdvarustöd för flyttal så har det ju så klart mindre
betydelse än på processorer utan det. Men, det är ju oklart varför
du frågar också, så det går inte riktigt att svara på det...

Och OK, uppenbarligen så genererar HAL lite underliga kommenterar
på ologiska platser. OK...
OK på dig med sojan :) Annars så får du ett tack för hjälpen också. Ja, det var mest bara en införkastad fråga för att reta upp dig :D Skämt och sido.

Det är intressant att du som väldigt erfaren hävdar att HAL genererar lite underliga kommentarer på ologiska platser. Kan du verkligen säga så till STM? Det kanske finns en utmärkt anledning att placera kommentarerna där? Jag håller övrigt med dig, men samtidigt måste man ha en baktanke att CubeMX gjordes inte över en natt. Ville bara notera detta.
Användarvisningsbild
hawkan
Inlägg: 2618
Blev medlem: 14 augusti 2011, 10:27:40

Re: Är en STM32 bra att använda som USB I/O-modul?

Inlägg av hawkan »

Googlade runt lite och det kanske bara var tur att det funkade med volatile.
Data överförs tydligen med DMA (HAL_ADC_start_DMA) och där
kastar jag in handduken, det kan jag inte, och tänker inte lära mej förrän jag behöver det.
Rekommenderar dock Al att fösöka hitta nåt exempel att ta efter, det finns en del där ute.
Användarvisningsbild
Klas-Kenny
Inlägg: 11327
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Är en STM32 bra att använda som USB I/O-modul?

Inlägg av Klas-Kenny »

Rick81 skrev:Så kör alltid volatile på variabler i interuptfunktioner.
Nja.

Kör alltid volatile på de globala variabler som modifieras i interruptfunktioner. För lokala variabler finns det ingen anledning. Och för variabler som bara läses i interruptet finns det sällan någon anledning, om man hanterar dem vettigt.
Rick81
Inlägg: 746
Blev medlem: 30 december 2005, 13:07:09

Re: Är en STM32 bra att använda som USB I/O-modul?

Inlägg av Rick81 »

Jo det klart jag menade inte lokalavariabler..
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43176
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Är en STM32 bra att använda som USB I/O-modul?

Inlägg av sodjan »

Det finns väl fall där man vill att en lokal variabel ska bevara
sitt värde mellan anrop. Minns om om det är "volatile" där
dock, eller kanske "static"...

> som modifieras i interruptfunktioner.

Inte enbart. Det gäller alla variabler som kan ändras på ett sätt
som inte är uppenbart för kompilatorn. I/O portar, minne som
uppdateras via DMA o.s.v.

D.v.s. att i detta fall borde "volatile" hjälpa även om det var DMA (?)...
Användarvisningsbild
AndLi
Inlägg: 17112
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Är en STM32 bra att använda som USB I/O-modul?

Inlägg av AndLi »

Vill du bevara en lokal variable ska du definiera den static i funktionen.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43176
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Är en STM32 bra att använda som USB I/O-modul?

Inlägg av sodjan »

Just det ja. Ja det är ju en annan sak än "volatile"...
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Är en STM32 bra att använda som USB I/O-modul?

Inlägg av Al_Bundy »

Sojan. Om du undrar varför jag ställde denna fråga, angående om flyttal, har med att jag har just insett att jag kommer tappa en fin upplösning om jag kastar om 32 bit till 8 bit bara för att min UART är 8 bit (ASCII), medan min ADC är 12 bit.

Om jag vill sända 12 bit över 8 bits UART, då måste jag dela upp 12 bit till 4 bit och 8 bit och sedan addera ihop dem efter dem har passerat UART:en.
Finns det något sätt i C där man kan konvertera om en 12 bit's värde till en array på 12 bitar?

Eller innebär detta att jag måste skapa en array som har 15 olika element, där jag kapar upp mitt 12 bits adc värde i 15 värden. Exempel om jag får värdet 4095 så betyder det att:

4095 % 255 = 15
Alltså blir det en array på 17 element som har de första 16 elementen 255 och sista 15. Då vet jag exakt hur mycket jag skickar för varje gång. Totalt är det 3 stycken ADC värden på 12 bit som jag ska skicka. Så det blir en array då på 17*3 = 51.

Är detta ett korrekt sätt att göra?
Senast redigerad av Al_Bundy 5 januari 2019, 16:38:36, redigerad totalt 1 gång.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: Är en STM32 bra att använda som USB I/O-modul?

Inlägg av Micke_s »

volatile i lokala variabler kan ha sin nytta ibland.
När optimieringen fixar bort variabeln och man inte ser den i debuggern.

Alternativ att du sänder dina 12bits som 16bits -> 2st 8bit uart char. Blir oftast enklare.
Eller att du sänder multipler av ett par 12bits. Blir det 3 bytes.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43176
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Är en STM32 bra att använda som USB I/O-modul?

Inlägg av sodjan »

Det beror ju mycket på vad det är för mottagare.
Jag kanske skulle konvertera hela till ASCII och
skicka värden som strängar "0000" till "4095".

Binära värden över seriella länkar är lite trixigt...
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Är en STM32 bra att använda som USB I/O-modul?

Inlägg av Al_Bundy »

Okej! Tackar. Det kanske blir något enklare. :)

Du menar att jag skickar "2345,2325,4023" och sedan delar upp dem beroende på ","?
Senast redigerad av Al_Bundy 5 januari 2019, 17:05:34, redigerad totalt 1 gång.
Rick81
Inlägg: 746
Blev medlem: 30 december 2005, 13:07:09

Re: Är en STM32 bra att använda som USB I/O-modul?

Inlägg av Rick81 »

Ta din aurdinokod från en gammal tråd för flytta adc via uart. Smidigast är ju använda kod man redan gjort
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43176
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Är en STM32 bra att använda som USB I/O-modul?

Inlägg av sodjan »

> Du menar att jag...

Ja, om det nu är tre värden som alltid ska skickas. Varför inte?
Lätt att testköra mot en Putty session eller liknande...

"2345,2325,4023<CR>"
olof_n
Inlägg: 116
Blev medlem: 23 februari 2011, 21:36:46

Re: Är en STM32 bra att använda som USB I/O-modul?

Inlägg av olof_n »

Hej!

Skicka ditt heltal som Micke_s rekommenderar.
Rätt onödigt att skicka tal som text.

Kod: Markera allt

uint16_t adcval = .......; (Lägg ditt 12 bitars värde i en 16 bitars integer)

uint8_t lowbyte = adcval & 0xff;
uint8_t highbyte = (adcval >> 8);

Skicka över lowbyte och  highbyte.

Slå ihop igen med:
uint16_t value = (highByte << 8) | lowByte ;

Jag brukar lägga till en extra byte med checksumma (och eventuellt något "starttecken") så att jag kan kontroller att allt överfördes som det ska.

/Olof
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43176
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Är en STM32 bra att använda som USB I/O-modul?

Inlägg av sodjan »

Det finns två problem (båda hanterbara) med binära värden över
seriell förbindelse. Dels så är det svårare att felsöka, det blir bara
"skräm" i ett terminalfönster. Och dels så kommer många värden
att generera de olika "kontrolltecknen" som ligger i de lägsta 32
ASCII värdena. Man får CR/LF/Xon/Xoff/Bell/Null och allt annat
som, beroende på hur det ser ut i andra änden, kan ställa till det.

Nu vet du det, och du kan göra som du vill...
Skriv svar