Доброго времени суток. У меня какие-то проблемы с прерываниями от таймера на этой отладке.
Вкратце про отладку:
Контроллер stm32f407VG
PD15 и PD14 подключены к светодиодам.
Вкратце код:
main.cppКод
#include <stm32f4xx.h>
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_tim.h"
#include "system_stm32f4xx.h"
#include "InitGPIO.h"
#include "InitTimer.h"
#include "misc.h"
int phase1=1;
int phase2=1;
void TIM4_IRQHandler (void);
int main (void)
{
#ifdef DEBUG
debug();
#endif
//__enable_irq();
InitGPIO();
InitTimer();
while (true)
{
if(phase2>0)
{
GPIO_SetBits(GPIOD,GPIO_Pin_14);
phase2*=-1;
}
else
{
GPIO_ResetBits(GPIOD,GPIO_Pin_14);
phase2*=-1;
}
for(int i =0; i< 1000000; i++);
}
}
void TIM4_IRQHandler (void)
{
if(phase1>0)
{
GPIO_SetBits(GPIOD,GPIO_Pin_15);
phase1*=-1;
}
else
{
GPIO_ResetBits(GPIOD,GPIO_Pin_15);
phase1*=-1;
}
TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
return;
}
(InitTimer.h содержит только прототип, по этому его не привожу)
InitTimer.cppКод
#include "InitTimer.h"
#include <stm32f4xx.h>
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_tim.h"
#include "misc.h"
#define TIMER_PRESCALER 720
TIM_TimeBaseInitTypeDef timer;
void InitTimer()
{
RCC_APB1PeriphClockCmd ( RCC_APB1Periph_TIM4, ENABLE );
TIM_TimeBaseStructInit(&timer);
timer.TIM_Period = 50;
timer.TIM_Prescaler = TIMER_PRESCALER;
TIM_TimeBaseInit ( TIM4, &timer );
TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM4, ENABLE );
NVIC_EnableIRQ(TIM4_IRQn); // <<<< Отмеченная строчка.
}
И так... что я имею:
PD15 - мигает.
PD14 - разумеется не мигает.
Раскоменчиваю отмеченую строку и.... микроконтроллер просто зависает (при этом светодиод PD15 загорается, и больше ничего не происходит).
Что я делаю не так?
Сообщение отредактировал RiseOfDeath - Oct 2 2013, 10:10