Forum: Mikrocontroller und Digitale Elektronik STM32 welcher Pin ist INT?


von Kerstin M. (kerstin)


Lesenswert?

Hallo

möchte au feinem STM32F103RB ein Bauteil an den SPI anschliessen.
Bei dem Chip steht in einem Beispiel (Bosch  BMA 020A) für einen AVR die 
Beschaltung SCK MOSI MIOS GND und (INT) und (CS) ? Cableselect?
Was ist dieses INT und CS, welcher Pin ist dies an meinem STM?

lg Kerstin

von Zock (Gast)


Lesenswert?

CS = SPI Chip select (Dürfte beim STM32 NSS sein).
Als Interrupt-Eingang wird wahrscheinlich jeder GPIO geeignet
sein, Programmierung im EXTI.

HDH.

Zock

von holger (Gast)


Lesenswert?

>Was ist dieses INT und CS, welcher Pin ist dies an meinem STM?

Schau in die Datenblätter beider Chips. Die sind dazu
da solche Fragen zu beantworten.

von Kerstin M. (kerstin)


Lesenswert?

Mir ist klar dass es beim Atmel ein Interrupt Pin ist,
der dann einen entsprechenden Interrupt auslösen kann.
Nur ich finde einen solchen nicht beim STM32.

von Zock (Gast)


Lesenswert?

Kerstin M. schrieb:
> Mir ist klar dass es beim Atmel ein Interrupt Pin ist,
> der dann einen entsprechenden Interrupt auslösen kann.
> Nur ich finde einen solchen nicht beim STM32.

Brille sauber?

von Kerstin M. (kerstin)


Lesenswert?

zu spät gelesen sry ;-) danke - hab keine Brille!

von Zock (Gast)


Lesenswert?

Kerstin M. schrieb:
> ... hab keine Brille!


Vielleicht ist ja das das Prob ;-)

von Kai O. (kaio)


Lesenswert?

Du kannst beim STM32 eigentlich jeden Pin als Interrupt Source 
einstellen.
Siehe EXTI Beispiel in der Firmware Package zum STM32F4-Discovery.

...

/**
  * This function handles External line 0 interrupt request.
  */
void EXTI0_IRQHandler(void)
{
   if ((EXTI->IMR & EXTI_IMR_MR0) && (EXTI->PR & EXTI_IMR_MR0))
   {
      // ...

      // Clear the EXTI line 0 pending bit
      EXTI->PR = EXTI_PR_PR0;
   }
}

...

   // Enable SYSCFG clock
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

   // Connect EXTI Line0 to PB0 pin */
   SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource0);

   // Configure EXTI Line0
   EXTI_InitTypeDef touchExti;
   touchExti.EXTI_Line = EXTI_Line0;
   touchExti.EXTI_Mode = EXTI_Mode_Interrupt;
   touchExti.EXTI_Trigger = EXTI_Trigger_Falling;
   touchExti.EXTI_LineCmd = ENABLE;
   EXTI_Init(&touchExti);

   // Enable and set EXTI Line0 Interrupt to the lowest priority
   NVIC_InitTypeDef touchInt;
   touchInt.NVIC_IRQChannel = EXTI0_IRQn;
   touchInt.NVIC_IRQChannelPreemptionPriority = 0x01;
   touchInt.NVIC_IRQChannelSubPriority = 0x01;
   touchInt.NVIC_IRQChannelCmd = ENABLE;
   NVIC_Init(&touchInt);

von Kerstin M. (kerstin)


Lesenswert?

Hallo

habes nun mal probiert nur er break nicht in die Methode rein.
1
void InitEXTI(void)
2
{
3
  EXTI_InitTypeDef EXTI_InitStructure;
4
  NVIC_InitTypeDef NVIC_InitStructure;
5
  
6
  EXTI_StructInit(&EXTI_InitStructure);
7
 
8
    /* Connect Button EXTI Line to PB7 */
9
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource7);
10
11
   /* Configure Button EXTI line */
12
   EXTI_InitStructure.EXTI_Line = EXTI_Line0;
13
   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
14
15
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  
16
17
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
18
    EXTI_Init(&EXTI_InitStructure);
19
20
   /* Enable and set Button EXTI Interrupt to the lowest priority */
21
    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
22
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0A;
23
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0A;
24
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
25
26
    NVIC_Init(&NVIC_InitStructure); 
27
}

Die Portconfig.
1
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
2
                           RCC_APB2Periph_AFIO | RCC_APB2Periph_ADC1,
3
                           ENABLE);
4
    
5
   /* Configure PB7 pin as input */
6
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
7
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
8
   GPIO_Init(GPIOB, &GPIO_InitStructure);

was bedeutet das floating?
1
void EXTI0_IRQHandler(void)
2
   {
3
     unsigned char test;
4
    
5
     test= 6;
6
   };
weis jemand warum?

lg Kerstin

von Kerstin M. (kerstin)


Lesenswert?

Die Zeile

EXTI_GenerateSWInterrupt(EXTI_Line0);
löst einen Breakpoint aus, aber ein externes Signal nicht?

von Jean Player (Gast)


Lesenswert?

Hi,
zunächst erstmal ein gut gemeinter Rat, du solltest nicht die 
ST-Besipiele einfach kopieren ohne ins Datenblatt zu schauen warum und 
wieso das so gemacht wurde.
Danach schau dir mal die Zeilen unten an, die bei dir geändert habe
(natürlich ohne Gewähr).
1
EXTI_InitStructure.EXTI_Line = EXTI_Line7
2
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;   //weil trigger_falling
4
5
void EXTI9_5_IRQHandler(void)
6
{
7
      EXTI_ClearFlag(EXTI_Line7);
8
      EXTI_ClearITPendingBit(EXTI_Line7);
9
10
      unsigned char test;
11
      test= 6;
12
}

Natürlich musste jetzt in der IRG noch abfangen, ob wirklich dein 
GPIOB_7
den Interrupt ausgelöst hat. Dafür schauste in die EXTICR Register von 
AFIO.
Aber das probier erstmal selbst, denn selber machen übt.

Gruß und 55

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Hätte dazu auch mal 'ne Frage, da ich dazu keine Beispiele gefunden 
habe. Kann ich auch mehrere Pins auf eine EXTI Line legen , z.B. so:
1
  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource0 | EXTI_PinSource1 | EXTI_PinSource2);

Konkret möchte ich mit 3 Hallsensoren eines BLDC Motors den gleichen 
Interrupt auslösen .

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Hab mir meine Frage selbst beantwortet, nein es geht nicht, da beim 
STM32 die Verdrahtung von Pins zu den EXTI Lines fest verschaltet ist. 
Bit 0 eines Ports ist mit EXTI0 verbunden, Bit1 mit EXTI1 usw.
Das eingebaute Hallsensor Fietscha des STM32 kann ich nicht benutzen, da 
mein Motor ganz anders angesteuert wird, also keine simple Block 
Kommutation. In meinen EXTI0 bis EXTI2 Handlern rufe ich nun einfach 
einen gemeinsamen IRQ Handler auf.
1
void EXTI0_IRQHandler(void)
2
{
3
  if(EXTI_GetITStatus(HALL1_EXTI_LINE) != RESET)
4
  {
5
     HallIRQ();
6
    /* Clear the EXTI line pending bit */
7
    EXTI_ClearITPendingBit(HALL1_EXTI_LINE);
8
  }
9
}

von Reinhard B. (brainstorm)


Lesenswert?

Es gäbe auch noch die EXTI9_5 und EXTI15_10 Interrupts, die mehrere 
Leitungen zusammenfassen.

mfg

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Hey danke , werd ich mir mal ansehen !

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.