Hallo Ich habe ein Problem mit dem STM32F3 Discovery und zwar funktioniert der Timer interrupt nicht. Sobald der Interrupt aktiviert ist und ich mit dem Debugger zum nächsten Befehl weiter gehe, dann hängt der Debugger in einer Endlosschleife. Jemand eine Idee? TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //geht nicht TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE); //geht, aber der uC hängt dann trotzdem wenn ich TIM_Cmd(TIM2, ENABLE); ausführe Code:
1 | int main(void) |
2 | {
|
3 | |
4 | SystemInit(); |
5 | |
6 | initTimer(); |
7 | |
8 | //LED init
|
9 | RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); |
10 | GPIO_InitTypeDef GPIO_InitStructure; |
11 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; |
12 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; |
13 | GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; |
14 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; |
15 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; |
16 | GPIO_Init(GPIOA, &GPIO_InitStructure); |
17 | |
18 | while(1) { |
19 | GPIO_ResetBits(GPIOA, GPIO_Pin_6); |
20 | for(int i=0;i<100000;i++); |
21 | GPIO_SetBits(GPIOA, GPIO_Pin_6); |
22 | for(int i=0;i<100000;i++); |
23 | }
|
24 | }
|
25 | |
26 | void TIM2_IRQHandler(void) { |
27 | if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) { |
28 | TIM_ClearITPendingBit(TIM2, TIM_IT_Update); |
29 | |
30 | }
|
31 | }
|
32 | |
33 | void initTimer() { |
34 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); |
35 | |
36 | NVIC_InitTypeDef NVIC_InitStructure; |
37 | NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; |
38 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; |
39 | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; |
40 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4; |
41 | NVIC_Init(&NVIC_InitStructure); |
42 | |
43 | TIM_TimeBaseInitTypeDef TIM2Init; |
44 | |
45 | TIM2Init.TIM_Prescaler = 10; |
46 | TIM2Init.TIM_Period = 2000; |
47 | TIM2Init.TIM_ClockDivision = TIM_CKD_DIV1; |
48 | TIM2Init.TIM_CounterMode = TIM_CounterMode_Up; |
49 | TIM2Init.TIM_RepetitionCounter = 1; |
50 | TIM_TimeBaseInit(TIM2, &TIM2Init); |
51 | |
52 | TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //Hängt bei diesem Befehl |
53 | |
54 | //Timer
|
55 | TIM_Cmd(TIM2, ENABLE); |
56 | }
|