Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: сопоставление вектора и функции обработки
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
VictorR
Здравствуйте, в чем ошибка?

(среда - IAR EWARM 7.10, чип - STM32F103C6)


Код
__irq  void USART1IRQ(void);  //объявляю свою функцию обработки прерывания
//*********
__irq void USART1IRQ(void)
{
......
}
//*********
void main(void)
{
//вписываю адрес функции обработки в соответствующий вектор
  *(unsigned long*)0xd4=(unsigned long)USART1IRQ;    //0xd4 - адрес вектора USART1

  while(1);
}

компилируется без вопросов, но не работает
Непомнящий Евгений
Странный код. Вы точно хотите писать адреса обработчиков в рантайме? Если да, то смотрите, как писать флэш в даташите. И кстати возможно будет много проще выделить область в ОЗУ для таблицы векторов и перенастроить туда VTOR...

Если все же нет (как в 99,99% случаев), то вам надо при линковке создать таблицу векторов прерываний и разместить ее по адресу начала флэша. Как это сделать - читайте доку к IAR EWARM, я с ним не сталкивался...
amiller
Включите в проект файл "startup_stm32f10x_cl.s" (или другой, если я ошибся с принадлежностью Вашего контроллера этому семейству).
Там все вектора уже объявлены. И посмотрите примеры, идут в комплекте с IAR. Скачайте CMSIS, посмотрите примеры оттуда.
Это если нужно стандартное решение.
Ну а куда может завести Ваш метод, боюсь даже предполагать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.