Forum: Mikrocontroller und Digitale Elektronik STM32F103 Bluepill externen Interrupt auch PIN B1


von Max M. (Gast)


Lesenswert?

Ich mache gerade die ersten verzweifelten Versuche mit INTs bei ARM
Ich will einen externen Interrupt durch PIN B1 auslösen können

Fehlt hier noch was?
Bei IMR hatte ich einfach alles eigneschaltet, hoffe das verursacht kein 
Problem
welchen der AFIOs muss man benutzen, wenn ich nur Pin B1 nutzen will?
Ich habe das mit den AFIOs noch gar nicht überblickt
1
  RCC_APB2ENR.AFIOEN := 1;              // Enable clock for alternate pin functions
2
    AFIO_EXTICR1 := FFFFFFFF;                 // PB as External interrupt
3
 
4
  EXTI_RTSR :=  0x00000400;             // Set interrupt on Rising edge
5
  EXTI_IMR :=  0xFFFFFFFF;   // Set mask
6
  NVIC_IntEnable(IVT_INT_EXTI1);    // Enable External interrupt
7
  EnableInterrupts();                   // Enables the processor interrupt.

von J. S. (jojos)


Lesenswert?

Was sagt denn das Manual? Oder ist es noch nicht fertig ausgedruckt?
Hoffnung ist ein schlechtes Prinzip beim Programmieren…

: Bearbeitet durch User
von Max M. (Gast)


Lesenswert?

Was bist du denn für ein Clown?

"Hoffnung ist ein schlechtes Prinzip…"
Ich könnte mir vorstellen, sowas ähnliches haben sich deine Eltern im 
Nachhinein bei dir auch gedacht 😂

von Max M. (Gast)


Lesenswert?

Ahh, ChatGPT hat auf  AFIO_EXTICR1 := 0x00000010; hingewiesen. Es geht 
zwar noch nicht 100% aber, nun tut sich jedenfalls was:-)

Nun muss ich nur noch die Sin von EXTI_PR verstehen. Gab es das beim 
Atmega auch schon, ich kann mich gar nicht erinnern, dass ich das da 
löschen musste

von Norbert (der_norbert)


Lesenswert?

Du meine Güte Max, lass dir ein Kilogramm ChatGPT in Körnerform liefern 
und mach dir ein Zäpfchen daraus.

EINES!

von J. S. (jojos)


Lesenswert?

Das RefMan steht fein säuberlich ausgedruckt und abgeheftet im Schrank 
neben der teuren MikroE Entwicklungsumgebung, aber programmieren muss 
die KI.
So langsam mache ich mir doch Sorgen.

von Harry L. (mysth)


Lesenswert?

J. S. schrieb:
> So langsam mache ich mir doch Sorgen.

Manch einer glaubt eben, man könne fehlende NI durch KI kompensieren...

...man sieht ja hier, was dabei herauskommt.

: Bearbeitet durch User
von Max M. (Gast)


Lesenswert?

So, falls ein anderer Anfänger hier mal nach sucht.
EXTI_RTSR und EXTI_IMR habe ich noch nicht korrigiert, aber so geht 
erstmal alles.
Ich gehe jetzt erstmal ins Bett.
Von da an ist es dann leicht weiter herauszufinden wie es geht.
# Bluepill, STM32F103C8, Interrupts
1
program STM32F103V8_16x2;
2
{ Declarations section }
3
{ Declarations section }
4
5
procedure ExternerInterrupt(); iv IVT_INT_EXTI1; ics ICS_AUTO;
6
Begin
7
DisableInterrupts();
8
GPIOC_ODR := 0x0000; // Setze Port C auf 0;
9
EXTI_PR := 0x0000001A;  //Pending register zurücksetzen
10
EnableInterrupts();
11
end;
12
13
14
15
Begin
16
 GPIO_Digital_Input(@GPIOB_BASE, _GPIO_PINMASK_ALL);
17
 GPIO_Digital_Output(@GPIOC_BASE, _GPIO_PINMASK_ALL); // Set PORTC as digital output
18
 GPIO_Alternate_Function_Enable(@_GPIO_MODULE_SWJ_JTAGDISABLE );
19
 GPIO_Analog_Input(@GPIOA_BASE, _GPIO_PINMASK_1 );
20
21
  GPIOC_ODR := 1 SHL 13; Schalte LED am Port PC.13 aus (Bluepill)
22
//*******************************
23
  GPIOB_CRL := 0xFFFFFFFF;
24
  RCC_APB2ENR.AFIOEN := 1;              // Enable clock for alternate pin functions
25
   AFIO_EXTICR1 := 0x00000010;               // PB.1 as External interrupt
26
  EXTI_RTSR :=  0xFFFFFFFF;             // Set interrupt on Rising edge
27
  EXTI_IMR :=  0xFFFFFFFF;   // Set mask
28
  NVIC_IntEnable(IVT_INT_EXTI1);    // Enable External interrupt
29
  EnableInterrupts();                   // Enables the processor interrupt.
30
31
   //clk := Clock_MHz();
32
33
{ Main program }
34
 
35
While TRUE DO
36
 begin
37
 
38
end.

von Thorsten M. (cortex_user)


Lesenswert?

Harry L. schrieb:
> Manch einer glaubt eben, man könne fehlende NI durch KI kompensieren...
>
> ...man sieht ja hier, was dabei herauskommt.

Nun mal langsam.... ich programmiere den Cortex M0 und m3 seit Jahren 
mit embitz und stdlib. neulich mal den Chatbotter dran gelassen und wen 
man den prompt richtig macht spuckt der recht gescheite sachen aus, die 
auch hardware nah sein können. Nur behauptet der leider auch steif und 
fest etwas falsches und wenn man ihn drauf hinweist kommt nur "Sorry, 
Sie haben recht ..." und wieder holt selbst falsche hinweise.

von Thorsten M. (cortex_user)


Lesenswert?

Max M. schrieb:
> //*******************************
>   GPIOB_CRL := 0xFFFFFFFF;
>   RCC_APB2ENR.AFIOEN := 1;              // Enable clock for alternate
> pin functions
>    AFIO_EXTICR1 := 0x00000010;               // PB.1 as External
> interrupt
>   EXTI_RTSR :=  0xFFFFFFFF;             // Set interrupt on Rising edge
>   EXTI_IMR :=  0xFFFFFFFF;   // Set mask
>   NVIC_IntEnable(IVT_INT_EXTI1);

Was soll das den sein? Wofür gibt es CMSIS und StdLibs oder HAL? Damit 
einer wieder nichtssagende Zahlen einschreibt und der nächste 
Programmierer den Murks aus dem Fenster schmeißen will?

: Bearbeitet durch User
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Thorsten M. schrieb:
> Was soll das den sein? Wofür gibt es CMSIS und StdLibs oder HAL?

Fragt sich, ob die Pascal-Compilerumgebung überhaupt die Konstanten der 
CMSIS bzw. StdLib zur Verfügung stellt...

von Max M. (Gast)


Lesenswert?

Klar gibt es das da auch, nur darum geht es mir nicht.
Die ganzen HAL und andere, da kann ich mir keine der ewig langen 
Parameter merken.
Nach einigen Monaten, wenn ich mal wieder am PC bin, bekomme ich eine 
Kriese wenn ich ein neues Projekt mache.
Da kann ich auch gleich die einzelnen Register zusammensuchen und habe 
mir davon noch viel merken können.
Von Hall und selbst den Mikroe Konstanten, kann ich mir kaum welche 
merken da das alles unfassbar kryptisch ist.
Dann erstelle ich ggfls. lieber meine eigenen, wenn alles rund läuft 
oder lasse es so.


Klar, kann ich mir auch mit CubeMX alles zusammenklicken, und es 
funktioniert dann auch fix, aber durchblicken tu ich da nichts mehr.
Ich bin so schon genug mit den ARM überfordert.
Und in meinem Alter lernt es sich nicht mal so schnell um

von Thorsten M. (cortex_user)


Lesenswert?

Max M. schrieb:
> Die ganzen HAL und andere, da kann ich mir keine der ewig langen
> Parameter merken.

Du hast schonmal was von Autoergänzung gehört? Also wenn ich bei Visual 
Studio oder Embitz schriebe merke ich mir keine der

NVIC_SetzeDasRegisterAufdenNeuenWert (....)

Geschichten, sondern wähle nur aus welche WRAPPER Funktion ich brauche 
UND selbst die Parameterliste zeigt er mir an und was da rein muss.... 
also mehr Gehhilfe geht echt nicht. Es gab alles schonmal , kaum etwas 
muss man neu erfinden.

Ich bin 55 und habe den ARM im Selbststudium erlernt, super Youtube 
Videos, Blogs usw. und sehr viel selbst geschrieben und gebastelt mit 
Bluepill und den Disco Boards STM429 usw. Inzwischen poste ich eigene 
Videos und erkläre das Innenleben wie DMA usw. Alles kein Hexenwerk, der 
ARM ist einer der durchdachtesten uC der Welt. Und mit C und Arduino 
sehen sowieso alle uC gleich aus. Bei meinem Fahrtebuch Logger im Auto 
arbeiten 8 Interrpts, 3 Timer, UART, SPI, I2C, NMEA auswqerten, SD karte 
alles im IRQ und noch nie abgestürzt.

PS: Pascal ist keine Sprache für den, C oder Python!

: Bearbeitet durch User
von Max M. (Gast)


Lesenswert?

"PS: Pascal ist keine Sprache für den, C oder Python!"

Python ganz sicher nicht.
Und weshalb Pascal keine geeignete Sprache sein soll erschließt sich mir 
nicht
Ich kann da keinen Unterschied erkennen.
Pascal ist sogar sehr gut geeignet.
Genauso wie C hat sich auch Pascal weiterentwickelt.
Dir ist sicher bekannt das z.B. Apples Lisa Computer in Pascal 
geschrieben wurde, also das OS.
Oder das C die Rekords aus Turbo Pascal übernommen hat.
Vielleicht denkst du an das Ursprüngliche Pascal, das hat aber mit 
Borland Pascal 6 oder 7 bzw. Delphi kaum noch was gemein und ist eine 
mächtige Programmiersprache geworden.
Und ja, diese Hilfen gibt es, damit werde ich aber nicht warm (Ich bin 
deutlich über 55)

von Steve van de Grens (roehrmond)


Lesenswert?

Max M. schrieb:
> Nun muss ich nur noch die Sin von EXTI_PR verstehen
http://stefanfrings.de/stm32/stm32f1.html#nvic

von Max M. (Gast)


Lesenswert?

Anbei noch mal meine heute gemachten Verbesserungen, damit auch andere 
Anfänger eher nachvollziehen können wie es sein müsste, damit es 
zumindest funktioniert
1
  GPIOB_CRL := 1 SHL 7;       //Port configuration register low MODE1_CRL
2
  RCC_APB2ENR.AFIOEN := 1;   // Enable clock for alternate pin functions
3
  AFIO_EXTICR1 := 1 SHL 4;  // External interrupt configuration register 1 (AFIO_EXTICR1)
4
  EXTI_RTSR :=  1 SHL 1;   // Rising trigger selection register (EXTI_RTSR)    Port.B1
5
  EXTI_IMR := 1 SHL 1;    // Interrupt mask register (EXTI_IMR)    Port.B1
6
  NVIC_IntEnable(IVT_INT_EXTI1); // Enable External interrupt     Port.B1

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Max M. schrieb:
> Oder das C die Rekords aus Turbo Pascal übernommen hat.

Das bezweifle ich. Turbo Pascal kam 1983 raus. C gibt es seit 1970 und 
da gab es die sog. Structs (Pascal: Records) bereits schon.

Woher ich das weiß: Die Erstausgabe des K&R kam 1978 raus. Und da waren 
die structs längst Bestandteil. Hier wurde nämlich das "Ur-C" erklärt - 
Stand 1970.

von Vax W. (Gast)


Lesenswert?

Frank M. schrieb:
> Max M. schrieb:
>> Oder das C die Rekords aus Turbo Pascal übernommen hat.
>
> Das bezweifle ich. Turbo Pascal kam 1983 raus. C gibt es seit 1970 und
> da gab es die sog. Structs (Pascal: Records) bereits schon.
>
> Woher ich das weiß: Die Erstausgabe des K&R kam 1978 raus. Und da waren
> die structs längst Bestandteil. Hier wurde nämlich das "Ur-C" erklärt -
> Stand 1970.

Pascal wurde in den '70er Jahren im letzten Jahrhundert definiert.

War halt die Zeit wo solche Konstrukte entwickelt wurden. "Algorithms + 
Data Structures = Programs" kam 1976 auf den Markt.

von Max M. (Gast)


Lesenswert?

Hatte ich mal irgendwo gelesen. Abe wie gesagt, macht es sonst keinen 
Unterschied ob es nun C oder Pascal ist, sicher so oder so besser als 
Python für Controller, selbst gegen Basic sollte nichts sprechen, das 
aktuelle kenne ich aber nicht.

von Max M. (Gast)


Lesenswert?

So hatte ich es gelesen. Das es dort dann auch von C übernommen wurde.
Aber wie gesagt, ist ja auch wurscht, will damit nur sagen das es sich 
nicht nimmt ob nun C oder Pascal
Hier z.B. wir es erwähnt
https://www.bernd-leitenberger.de/turbo-pascal4.shtml

"Pascal ist die ältere der beiden Sprachen. Sie wurde von 1968-1972 von 
Niklaus Wirth entwickelt."
"Records sind eine der Neuerung von Pascal, die andere Sprachen wie C 
übernommen haben."
Ist aber jetzt natürlich keine Referenz




Vax W. schrieb:
> Frank M. schrieb:
>> Max M. schrieb:
>>> Oder das C die Rekords aus Turbo Pascal übernommen hat.
>>
>> Das bezweifle ich. Turbo Pascal kam 1983 raus. C gibt es seit 1970 und
>> da gab es die sog. Structs (Pascal: Records) bereits schon.
>>
>> Woher ich das weiß: Die Erstausgabe des K&R kam 1978 raus. Und da waren
>> die structs längst Bestandteil. Hier wurde nämlich das "Ur-C" erklärt -
>> Stand 1970.
>
> Pascal wurde in den '70er Jahren im letzten Jahrhundert definiert.
>
> War halt die Zeit wo solche Konstrukte entwickelt wurden. "Algorithms +
> Data Structures = Programs" kam 1976 auf den Markt.

von Vax W. (Gast)


Lesenswert?

Frank M. schrieb:
> Max M. schrieb:
>> Oder das C die Rekords aus Turbo Pascal übernommen hat.
>
> Das bezweifle ich. Turbo Pascal kam 1983 raus. C gibt es seit 1970 und
> da gab es die sog. Structs (Pascal: Records) bereits schon.

Der grosse Vorteil (DER Vorteil) von TurboPascal verglichen UCSD oder 
anderen Pascal-Compiler war die (Compile-)Geschwindigkeit und der Preis: 
TurboPascal kostete 300DEM incl Mwst, die Data-Library (etwa 
Dbase-Record-Verwaltung) kostet ca. 200DEM (?). Fuer 500DEM in 1985 
konntest Du mit einem IBM-Salesrep vielleicht mal reden, Compiler waren 
ueber 2000DEM!

UCSD-Pascal kam 1974 auf den Markt.

Es tat mir damals richtig weh den BASCOM-Compiler zu lizensieren (+ 
Royalties an IBM).

Wie preisguenstig die Sachen heute sind.

Ich aergere mich ein bischen, dass damals nicht bei Wirth mal in den 
Vorlesungen zugeguckt habe.

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.