Hallo, ich versuche grad an meinem STM32F3 (STM32F303VC) den USER-Button als Interrupt einzustellen. Es soll eine LED leuchten falls der Interrupt detektiert wird. Im Prinzip ein Simples Programm. Das Problem ist ich kann den Interrupt nicht auffangen das Programm Springt immer zum Default-Handler. (Default_Handler(void) in der Datei vectors_stm32f30x.c) Hier Der Code //------------------------------------------ #include<stm32f30x_conf.h> int main(void) { GPIO_InitTypeDef GPIO_InitStructure; SystemInit(); EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOE, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); //lighting LED GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_WriteBit(GPIOE, GPIO_Pin_0, Bit_SET); //button interrupt GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_Init(GPIOA, &GPIO_InitStructure); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); //Configure Button EXTI line EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); //set priotity NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); while(1) { } } void EXTI0_IRQHandler(void){ EXTI_ClearITPendingBit(EXTI_Line0); if(GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_15)){ GPIO_WriteBit(GPIOE, GPIO_Pin_15, Bit_RESET); }else{ GPIO_WriteBit(GPIOE, GPIO_Pin_15, Bit_SET); } } //----SPRNGT nach INT hier REIN------- //Datei:vectors_stm32f30x.c void _attribute_ ((section(".after_vectors"))) Default_Handler(void) { #if defined(DEBUG) __DEBUG_BKPT(); #endif while (1) { } } //------------------------------------------ Ich hoffe jemand kann mir dabei weiterhelfen.
Gast
#4410965
Shaker A. schrieb: > Hier Der Code... Oh nein. Erwarte lieber nicht, daß die Leute sich da drauf stürzen. Lerne lieber, wie man einen ordentlichen Startupcode in Assembler selber schreibt und wie man ohne die leigige ST-Lib zu Potte kommt. Dann hat sich dein Problem bereits in Luft aufgelöst. W.S.
Gast
#4411665
Es scheint mir das die Benennung von der ISR nicht richtig ist. Damit endet das in hardfault handler. (ich gehe davon aus das das Problem beim drucken auf die User Button auftreht). Welche IDE verwendet du ?
Gast
#4411719
W.S. schrieb: > Oh nein. > Erwarte lieber nicht, daß die Leute sich da drauf stürzen. Lerne lieber, > wie man einen ordentlichen Startupcode in Assembler selber schreibt Hier ist er ja nun wirklich nicht mehr im Startupcode! Und der Rest ist auch CMSIS. Kopfschüttel!
Gast
#4411808
Versuchen sie mal die Handler in startup_stm32f30x.s zuruck zu finden ! Hier aus ein Beispiel von STM Lib :
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
Ich Benutze Eclipse(CDT) (+ Arm-Plugin + ST-Flash + OpenOCD) Ein Start-up Code hab ich nicht. Assembler wäre auch Neugebiet für mich. RP6conrad ich habe die zwei Interrupt-Handler eingefügt die du/Sie gepostet hast, die haben den Interrupt Leider aber auch nicht auffangen können.
Shaker A. schrieb: > Ein Start-up Code hab ich nicht. Doch, den hast Du sogar schon teilweise gepostet: Datei:vectors_stm32f30x.c Dort müssten IMO auch die restlichen Namen der Interrupt Handler stehen. Es kommt auf die korrekte Schreibweise an.
Es geht jetzt mein Interrupt Handler wird jetzt angenommen. Es musste vor dem Handler noch ein ,,extern "C"´´. Bsp:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
Vielen Dank für Euer Engagment.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.