Hey Forum Community, ich habe ein STM32F4 Discovery Board mit expansion board. Dazu hab ich ein Touch Display angeschlossen. Ich bin schon den halben Tag am suchen, ich verstehe einfach nicht, wie man ein Interrupt auf drücken des Displays auslösen kann. Das STMPE811 hat ein INT_EN Register, in dem das Touch_Det Bit gesetzt wird, wenn ein touch detektiert wird. Dazu könnte man eine Polling variante basteln. !!!Leider habe ich keinen InterruptHandler gefunden. Gibt es dazu einen? Das mit den Handlern schein mir auch noch nicht ganz klar zu sein (hat da jemand eine gute Erklärung, wie die Handler funktionieren, kann man sich die selber bauen)? Habe in einem anderen Beitrag gelesen, dass ich das über einen EXTI lösen muss. Aber woher weiß ich, welchen GPIO mit dem Touchregister verbunden ist?! Bitte um Hilfe. Grüße
Hallo; beispiel code gibt es hier: http://www.wvshare.com/column/LCD_Module.htm zur Ansicht empfehle ich die Demo der Keil entwicklungsumgebung. Die Sourcen löiegen aber auch als Text vor. Ansonsten sind auf der STM Homepage auch Application Notes und Codebeispiele zu finden.
Nochmal Hallo; hier im Forum hatte ebenfalls jemand Beispie Projekte abgelegt ;-)
Danke erstmal für die Tipps. Werd mir die Beispiele mal anschauen. hab hier im Forum keine geeinetes Beispiel gefunden. Könntest du mir den Link schicken? danke. hatte vergessen zu erwähnen, dass ich mit Coocox arbeite.
Hi ruphy, der STMPE811 kann bestimmt auch ein externes Interrupt Signal erzeugen wenn der Touch betätigt wurde dieser Pin muss dann nur noch mit einem Exti-Pin vom SMT32F4 verbunden werden im STM32F4 brauchst du dann eine Interrupt-Funktion die auf EXTI Triggert für CooCox und den STM32F4 hab ich Librarys für EXTI0 bis EXTI15 hier online gestellt http://mikrocontroller.bplaced.de kannst dir ja da rauskopieren was du brauchst (ist recht simpel gehalten) Gruss Uwe
HEy Uwe, danke für deine Hilfe. Ich bin soweit schon gewesen, einen Interrupt auszulesen. Aber im Datenblatt ist lediglich geschildert, welches Bit im Register gesetzt wird. Wie kann ich denn einen externen Interrupt auf einen GPIO des STMPE811 legen? Habe im STMPE811 Datenblatt nichts gefunden. btw: 09-Touch_ADS7843-Library (STM32F4) -> Polling
ich kenne den STMPE811 nicht aber wenn ich auf das Deckblatt vom Datasheet sehe (http://www.st.com/web/catalog/sense_power/FM89/SC1717/SS990/PF185203) dann gehe ich davon aus, das der einen GPIO-Pin als Ausgang hat (INT) an dem man sich klemmen kann bei den "Feuatures" steht zumindest : "Interrupt output pin" ich kenne ja auch dein "expansion board" nicht vlt. ist da der Pin schon mit einen GPIO vom STM32F4-Discovery verbunden und ich meinte nicht "09-Touch_ADS7843-Library" das ist eine Library für einen ADS7843 Chip (den hast du ja nicht) sondern diese hier : 28-Ext_Interrupt-Library (STM32F4) http://mikrocontroller.bplaced.net/wordpress/?page_id=1187 Gruss
Hallo; schau hier mal unter dem Stichwort "SSD1289" , das ist der controller der sich oft auf den TFT / Touchscreens befindet.
@Uwe: Danke! Hab den Pin gefunden. steht in Table 2. Der Pin 2 des STMPE811 ist scheinbar der Interrupt Pin. Werd den mal mappen und das ganze Probieren.
Marc Rupprath schrieb: > Hallo; > > schau hier mal unter dem Stichwort "SSD1289" , das ist der controller > der sich oft auf den TFT / Touchscreens befindet. Das ist der Lcd-Controller UND NICHT DER Touch-Controller Bringt doch bitte nichts durcheinander
okay, du hast recht... ist aber auch verwirrend. ich habe jetzt eine fertige Funktion gefunden (vom Hersteller). http://www.longlandclan.yi.org/~stuartl/stm32f10x_stdperiph_lib_um/group__STM3210C__EVAL__IOE__Exported__Functions.html#ga9bf9fd420d13830391880257bbee7fcf die Funktion rufe ich wie folgt auf: if( IOE_ITConfig(IOE_ITSRC_TSC)==IOE_OK) ... Ich habe mich durch die Funktion geklickt und herrausgefunden, dass der Touch Interrupt auf EXTI2 gemappt wird: static void IOE_EXTI_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; /* Enable GPIO clock */ RCC_AHB1PeriphClockCmd(IOE_IT_GPIO_CLK, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); /* Configure Button pin as input floating */ GPIO_InitStructure.GPIO_Pin = IOE_IT_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(IOE_IT_GPIO_PORT, &GPIO_InitStructure); /* Connect Button EXTI Line to Button GPIO Pin */ SYSCFG_EXTILineConfig(IOE_IT_EXTI_PORT_SOURCE, IOE_IT_EXTI_PIN_SOURCE); //IOE_IT_EXTI_PIN_SOURCE=EXTI_PinSource2 /* Configure Button EXTI line */ EXTI_InitStructure.EXTI_Line = IOE_IT_EXTI_LINE; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* Enable and set Button EXTI Interrupt to the lowest priority */ NVIC_InitStructure.NVIC_IRQChannel = IOE_IT_EXTI_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } In der Main wird der EXTI2_IRQHandler aufgerufen. ... es funktioniert leider nicht.
... der letzte Beitrag ist für die Katz. Ich habe meinen Fehler wahrscheinlich gefunden: So ich habe nun eine Frage zu I2C: 1) Der Kontroller hat zwei I2C Adressen - Warum? für Master/Slave? 2) In meinem Projekt kann ich mit RS232 über I2C Text auf mein Display schreiben. Nun soll aber auch (in andere Richtung) ein Touch Interrupt über I2C folgen, muss ich jetzt die zweite Adresse von I2C ansprechen? weitere Fragen folgen ...
>> UPDATE
Ich habe mittlerweile herausgefunden auf welchen Pin der Interrupt
ausgelöst wird (nach Schematics stm32f4dis-bb ist der PC13 der Interrupt
Kanal).
Sooo, der Interrupt funktioniert auch von Controller Seite (getestet mit
einem stück draht auf Masse gezogen)
ABER:
Es kommt vom Touchcontroller kein Interrupt (mit Oszi gemessen - es
kommt kein Signal am Pin an). Ich habe den Code gefühlt tausend mal
debuggt und die gesetzen Bits kontrolliert, aber ich finde den Fehler
nicht.
btw: ich habe auch mitn Oszi die anderen Pins abgecheckt, aber kommt
nirgendwo was an => daraus schlussfolgere ich, dass es an der
Konfiguration liegt.
Ich rufe die Funktion "IOE_ITConfig(IOE_ITSRC_TSC)" in der Main aus der
STMPE811QRT.c auf.
Vielleicht kann mir jemand helfen?
niemand nen plan, warum der Interrupt vom Controller nicht funkioniert?
Ich habe jetzt dasselbe Problem und wollte fragen ob du die Antwort gefunden hast und was war sie?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.