STM32 welcher Pin ist INT?

OP #2520389
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
#2520419
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);
OP #2520830
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
Gast #2521120
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
(Firma: matzetronics) #2521979
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 .
(Firma: matzetronics) #2523762
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
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.