Цитата(sidy @ Jul 10 2012, 14:53)

Большое спасибо всем за рекомендации.
В функции main я разрешил тактирование TIM7, разрешил update interrupt, разрешил счет, в регистре TIM7->ARR=0xFFFF. Но в обработчик прерывания по переполнению я не попадаю. Я предполагаю, что возможно нужно разрешить глобально все прерывания, но в многочисленной документации не нашел как это сделать.
Еще надо разрешить прерывание в NVIC:
NVIC_EnableIRQ (TIM7_IRQn);
Опционально:
NVIC_SetPriority (TIM7_IRQn, myTIM7Priority);
То есть, четыре пункта:
- правильное имя обработчика прерывания (свериться с startup файлом)
- разрешение соответствующих прерываний в самом устройстве TIM7
- разрешение прерывания по вектору в NVIC
- глобальное разрешение прерывания
P.S. только заметил в твоем коде:
Код
void TIM7_IRQHandler (void)
{
unsigned int flag=0;
if (flag==0)
flag=1;
};
Переменная flag - локальная, не "видна" снаружи и исчезнет с выходом из прерывания. Уж если, то правильней:
Код
static unsigned int flag = 0;
void TIM7_IRQHandler (void)
{...
если она должна быть видна лишь в рамках текущего модуля (файла *.c),
либо:
Код
volatile unsigned int flag = 0;
void TIM7_IRQHandler (void)
{...
и соответственно
Код
extern volatile unsigned int flag;
в заголовочном файле, предоставляемом другим модулям.
Сообщение отредактировал KnightIgor - Jul 11 2012, 08:26