Hur får man en korrekt och proper Input Capture funktion i STM32?
Re: Hur får man en korrekt och proper Input Capture funktion i STM32?
Dessutom beror det ju på vilken processor man använder, och om man kör RTOS eller inte.
Normalt set, utan RTOS så är ett interrupt snabbare än ett funktionsanrop.
Normalt set, utan RTOS så är ett interrupt snabbare än ett funktionsanrop.
Re: Hur får man en korrekt och proper Input Capture funktion i STM32?
Även jag kör en frekvensräknare som klarar 20Hz till 20000Hz med interrupt på input capture (Autotune till analog synth).
Skall man köra så brett spann måste man ha med hur många gånger klockan rullar, vilket den måste göra på låg frekvens om man skall ha detalj på hög.
Skall man köra så brett spann måste man ha med hur många gånger klockan rullar, vilket den måste göra på låg frekvens om man skall ha detalj på hög.
Re: Hur får man en korrekt och proper Input Capture funktion i STM32?
Låt oss säga så här: Om man har en interrupt som anropas när ett ADC värde ändras. Ja, då lär den anropas hela tiden.
DMA med STM32 fungerar riktigt smidigt. Man behöver knappt skriva någon kod. Tre rader typ.
- JimmyAndersson
- Inlägg: 26308
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:
Re: Hur får man en korrekt och proper Input Capture funktion i STM32?
Daniel:
DMA är riktigt behändigt, så jag förstår tanken.
Det är inget fel i att använda det.
Men det jag tror att många vill säga är att det inte är något fel i att använda interrupt även för sådant som händer ”ofta”.
De kan inte släppa att du ser interrupt som något som ska inträffa sällan.
Apropå det:
Du skrev ”Hela tiden”
Hur ofta är det?
För en människa så är 400 gånger i sekunden ”hela tiden”, men för en processor så är det snarare mer åt ”så trist det är.. det händer ju ingenting..”.
Tips:
Testa nångång att göra ett projekt/kod som använder massor med interrupt och som händer riktigt ofta.
Kunde ju vara ett kul experiment.
DMA är riktigt behändigt, så jag förstår tanken.
Det är inget fel i att använda det.
Men det jag tror att många vill säga är att det inte är något fel i att använda interrupt även för sådant som händer ”ofta”.
De kan inte släppa att du ser interrupt som något som ska inträffa sällan.
Apropå det:
Du skrev ”Hela tiden”
Hur ofta är det?
För en människa så är 400 gånger i sekunden ”hela tiden”, men för en processor så är det snarare mer åt ”så trist det är.. det händer ju ingenting..”.
Tips:
Testa nångång att göra ett projekt/kod som använder massor med interrupt och som händer riktigt ofta.
Kunde ju vara ett kul experiment.
Re: Hur får man en korrekt och proper Input Capture funktion i STM32?
Nej den anropas inte hela tiden, på sin höjd efter varje sample, aldrig oftare, gissar att det passerar någon miljon klockcykler mellan varje sample, så ett interrupt sker inte speciellt ofta.
Re: Hur får man en korrekt och proper Input Capture funktion i STM32?
DMA är till för att skyffla data, interrupt för att behandla data...Två olika saker till två olika syften.
Du kan inte ersätta dom med varandra.
Om du vill agera på varje sample från en ADC är DMA meningslöst (du tvingas interrupta på DMA complete eller conversion complete lika mycket interrupt i båda fallen), om du vill skyffla en buffer på 4000 half-word till ett periferi chip etc. så är DMA perfekt.
Sen finns det ju typ blandad användning (average över 100 saples från ADC) där det kan vara vettigt att sampla en ringbuffer på 100 och göra beräkningen på transfer complete callback.
Men som sagt DMA och interrupt ersätter inte varandra.
Re: Hur får man en korrekt och proper Input Capture funktion i STM32?
Om du kopplar så att när du får ett förändrat analogt ADC värde, så anropas din interrupt. Detta är inte så smart. För analogt ändras hela tiden.JimmyAndersson skrev: ↑3 april 2022, 21:35:07 Daniel:
DMA är riktigt behändigt, så jag förstår tanken.
Det är inget fel i att använda det.
Men det jag tror att många vill säga är att det inte är något fel i att använda interrupt även för sådant som händer ”ofta”.
De kan inte släppa att du ser interrupt som något som ska inträffa sällan.
Apropå det:
Du skrev ”Hela tiden”
Hur ofta är det?
För en människa så är 400 gånger i sekunden ”hela tiden”, men för en processor så är det snarare mer åt ”så trist det är.. det händer ju ingenting..”.
Tips:
Testa nångång att göra ett projekt/kod som använder massor med interrupt och som händer riktigt ofta.
Kunde ju vara ett kul experiment.
Jag brukar använda interrupt när det handlar om t.ex. USB data-funktioner. Skickar jag USB data till min USB port på min STM32 (till skillnad från övriga uC-tillverkare som lyser med sin frånvaro när det kommer att ha lika många enheter (peripherials) i en enda uC som ST har ) så anropas en __weak funktion som jag har skrivit. Fungerar klockrent.
Detta vet jag. Jag använder DMA för att skyffla data. DMA är otroligt bekvämt om jag vill bara ha data när jag ska läsa det.ToPNoTCH skrev: ↑3 april 2022, 22:41:17 DMA är till för att skyffla data, interrupt för att behandla data...Två olika saker till två olika syften.
Du kan inte ersätta dom med varandra.
Om du vill agera på varje sample från en ADC är DMA meningslöst (du tvingas interrupta på DMA complete eller conversion complete lika mycket interrupt i båda fallen), om du vill skyffla en buffer på 4000 half-word till ett periferi chip etc. så är DMA perfekt.
Sen finns det ju typ blandad användning (average över 100 saples från ADC) där det kan vara vettigt att sampla en ringbuffer på 100 och göra beräkningen på transfer complete callback.
Men som sagt DMA och interrupt ersätter inte varandra.
Re: Hur får man en korrekt och proper Input Capture funktion i STM32?
Jaha du.. Om du har skrivit en "__weak funktion"
Så svamlar du igen.
Det finns inga sådana.
__Weak är ett compiler direktiv, och om du suttit det framför en egen funktion så tvivlar jag på att du vet vad du håller på med faktiskt.
Jag har byggt en del USB device med STM32 för class compliant drivrutiner och det är lite mer komplicerat än att "skapa en funktion" så jag är lite nyfiken på vad du egentligen gjort.
Har du någon kod att visa ?
Så svamlar du igen.
Det finns inga sådana.
__Weak är ett compiler direktiv, och om du suttit det framför en egen funktion så tvivlar jag på att du vet vad du håller på med faktiskt.
Jag har byggt en del USB device med STM32 för class compliant drivrutiner och det är lite mer komplicerat än att "skapa en funktion" så jag är lite nyfiken på vad du egentligen gjort.
Har du någon kod att visa ?
Re: Hur får man en korrekt och proper Input Capture funktion i STM32?
Då känner du inte till många uC faktiskt.till skillnad från övriga uC-tillverkare som lyser med sin frånvaro när det kommer att ha lika många enheter (peripherials) i en enda uC som ST har )
Re: Hur får man en korrekt och proper Input Capture funktion i STM32?
__weak är alltså en datatyp för en funktion där man kan skriva över. Precis som Java har @Override på sina funktioner.ToPNoTCH skrev: ↑5 april 2022, 22:24:30 Jaha du.. Om du har skrivit en "__weak funktion"
Så svamlar du igen.
Det finns inga sådana.
__Weak är ett compiler direktiv, och om du suttit det framför en egen funktion så tvivlar jag på att du vet vad du håller på med faktiskt.
Jag har byggt en del USB device med STM32 för class compliant drivrutiner och det är lite mer komplicerat än att "skapa en funktion" så jag är lite nyfiken på vad du egentligen gjort.
USB för STM32 var nog det enklaste jag har någonsin gjort. Det var bara som att trycka på startknappen och allt bara fungerade. Jag behövde skriva 0% "USB-kod". Jag behövde bara lägga till en interrupt och sedan var allt klart. Inge mer.
Självklart! Jag kan skicka hela mitt STM32 projekt om så önskas.Har du någon kod att visa ?
Snarare så är det så att ST leder i utveckling när det kommer att "smacka in allt" som finns i en liten uC.
Så fort man tittar på AVR eller PIC så skall det alltid "snålas och tjuras" med diverse funktioner. Samma sak med övriga processor tillverkare. Då ska det vara så "tjuras och suras" med att det ska vara överdrivet komplext att få något gjort. Jag prisar verkligen CubeMX. Se och lär....
För att få till USB på en STM32 så är det bara följa detta:
Steg 1: Öppna upp STM32CubeIDE och klicka på "Middleware". Steg 2: Bara välj denna Steg 3: Djupt nere i mörkaste C-koden så finns det en fil som heter usbd_cdc_if.c. Skapa en funktion som heter CDC_ReceiveCallback(Buf, *Len); Steg 4: Deklarera CDC_ReceiveCallback(Buf, *Len); som. Notera att det MÅSTE vara inom "USER BEGIN" och "USER END" kommentarerna. Notera att det är i samma fil också, usbd_cdc_if.c Steg 5: Deklarera också __weak filen i headerfilen. Steg 6:
För att få denna funktion att anropas så fort du får data i din USB buffer så skriver du följande:
Kod: Markera allt
#include "usbd_cdc_if.h"
/* Denna anropas så fort du får data */
void CDC_ReceiveCallback(uint8_t* receive_buf, uint32_t receive_len){
}
Kod: Markera allt
uint8_t byte_data[5];
byte_data[0] = 50;
byte_data[1] = 51;
byte_data[2] = 52;
byte_data[3] = 53;
byte_data[4] = 54;
uint8_t storlek_pa_data = 5;
CDC_Transmit_FS(byte_data, storlek_pa_data);
Glöm inte att koppla upp en 1.5k pullupp.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Senast redigerad av DanielM 5 april 2022, 23:48:52, redigerad totalt 1 gång.
Re: Hur får man en korrekt och proper Input Capture funktion i STM32?
Som sagt du har inte en aning om vad du pratar om.Snarare så är det så att ST leder i utveckling när det kommer att "smacka in allt" som finns i en liten uC.
Nej det är det inte, det är ett direktiv till länkaren att, om det finns en likadan funktion i projektet med samma namn, så skall den andra funktionen länkas in i stället.__weak är alltså en datatyp för en funktion där man kan skriva över.
De flesta biblioteksfunktioner kompileras med __weak
Som exempel så finns det vissa funktioner i standardbiblioteken man inte bör använda, av olika orsaker, programmeraren kan då skriva en egen funktion för att ersätta biblioteksfunktionen.
Man kan då använda samma funktionsnamn som det i biblioteket, och länkaren använder då den egenskrivna funktionen istället för biblioteksfunktionen,
Och du gör exakt samma sak i till exempel MPLAB-X, om du har en processor med USB, vilket i stort sett alla utom de enklaste PIC8orna harSteg 1: Öppna upp STM32CubeIDE och klicka på "Middleware".
Re: Hur får man en korrekt och proper Input Capture funktion i STM32?
Visa då hur man gör det i MPLAB-X.
Re: Hur får man en korrekt och proper Input Capture funktion i STM32?
Du öppnar configuratorn och kryssar i USB, typ.
Re: Hur får man en korrekt och proper Input Capture funktion i STM32?
Säkert mer komplicerat än så, annars hade TomasL visat med 1 enda bild.
Re: Hur får man en korrekt och proper Input Capture funktion i STM32?
Nej det är det inte, men jag orkar inte lägga upp ett projekt bara för att visa dig, speciellt inte kl 0100 på natten.