STM32F4DISCOVERY вектор прерывания

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
sx386
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

STM32F4DISCOVERY вектор прерывания

Сообщение sx386 »

Пытаюсь запрограммировать прерывание на ноге PA0

Прерывание как бы срабатывает, но походу "зависает" на переходе в функцию прерывания.
Насколько я понял необходимо установить вектор прерывания.
Но не могу понять как.

Вот так инициализирую:

Код: Выделить всё

void EXTILine0_Config(void) {
 
//***********GPIOA**************
    RCC->AHB1ENR    |= RCC_AHB1ENR_GPIOAEN;
//    GPIOA->MODER    =0x0;                  //Input (reset state)
    GPIOA->OSPEEDR    =0xFF;                //100 MHz

//***********EXTI***************
    SYSCFG->EXTICR[1] = 0x0;            //перые 4 ноги для прерываний, порта А
    EXTI->IMR        |=(EXTI_IMR_MR0);    //разрешаем прерывание для нулевой ноги EXTI_IMR_MR0=1
    EXTI->RTSR         |=(EXTI_RTSR_TR0);    //прерывания по спаду

//************NVIC**************
 //   NVIC->ISER[0]    |=(1<<6);            //6 settable EXTI0 Line0 interrupt
//    NVIC->IP[1]        =0xF000;            //установка приоритета 15 для 6-й Position
    NVIC_EnableIRQ(EXTI0_IRQn);
    NVIC_SetPriority(EXTI0_IRQn,1);

}


/* прерывание  */

void EXTI0_IRQHandler (void) {
   
  EXTI->PR = EXTI_PR_PR0; // Сбросить флаг 

}


Изображение
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Аватара пользователя
balmer
Это не хвост, это антенна
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Re: STM32F4DISCOVERY вектор прерывания

Сообщение balmer »

А стек можно показать? Возможно проблема совсем в другом месте.

Объявления функции с правильным названием достаточно для того, чтобы она стала прерыванием.
misyachniy
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт июл 02, 2013 09:17:49

Re: STM32F4DISCOVERY вектор прерывания

Сообщение misyachniy »

balmer писал(а):Объявления функции с правильным названием достаточно для того, чтобы она стала прерыванием.


Не всегда, не известно какой компилятор.

Для Атмел в IAR требуется вызвать фукцию которая пропишет адрес преривания в таблицу векторов, для Luminary/TI, нужно вручную прописать вектора в структуру описывающую VIC.
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Re: STM32F4DISCOVERY вектор прерывания

Сообщение Myp3ik »

Код: Выделить всё

void InitEXTI(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  EXTI_InitTypeDef EXTI_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;
   
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
   
  GPIO_DeInit(GPIOA);
   
  GPIO_StructInit(&GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
   
  SYSCFG_DeInit();

  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
   
  EXTI_StructInit(&EXTI_InitStructure);
  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);

  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

/**
  * @brief  обработчик внешних прерываний
  * @param  None
  * @retval None
  */
void EXTI0_IRQHandler(void)
{
  if (EXTI_GetITStatus(EXTI_Line0))
  {
    EXTI_ClearITPendingBit(EXTI_Line0);
      
  }
}
Иван Сусанин - первый полупроводник :solder:
Аватара пользователя
sx386
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Re: STM32F4DISCOVERY вектор прерывания

Сообщение sx386 »

Myp3ik, код такого формата у меня не работает.
Error[Pe020]: identifier "RCC_AHBPeriph_GPIOA" is undefined C:\Ecom\i330lcd\Project\main.cpp 126
Да и честно говоря, не хотелось бы его использовать. Ужасно не нравится мне этот формат. Переименованные регистры - ужас....сейчас начну ругаться....бесит жутко.

balmer, вот стэк:
Изображение

Была такая-же проблема с stm32f100, но решил подключением файла векторов startup_stm32f10x_md_vl.s
Для stm32f407 такого файла найти не могу

IAR 6.30
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Re: STM32F4DISCOVERY вектор прерывания

Сообщение Myp3ik »

В папке (у Вас может отличаться путь, если версия 6,3 и виндовс не х64)

c:\Program Files (x86)\IAR Systems\Embedded Workbench 6.5\arm\examples\ST\STM32F4xx\STM32F4xx_DSP_StdPeriph_Lib\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\iar\

А еще лучше скачайте с оф сайта библиотеку под Ваш МК, там есть все необходимое

http://www.st.com/st-web-ui/static/active/en/st_prod_software_internet/resource/technical/software/firmware/stm32f4_dsp_stdperiph_lib.zip
Вложения
startup_stm32f40xx.rar
(3.5 КБ) 257 скачиваний
Иван Сусанин - первый полупроводник :solder:
Аватара пользователя
sx386
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Re: STM32F4DISCOVERY вектор прерывания

Сообщение sx386 »

Да что терерь компилятору нужно ?
Изображение
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Аватара пользователя
sx386
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Re: STM32F4DISCOVERY вектор прерывания

Сообщение sx386 »

И что мне теперь делать ?
Пойду вешаться.
:facepalm:
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: STM32F4DISCOVERY вектор прерывания

Сообщение ut1wpr »

sx386 писал(а):И что мне теперь делать ?
Пойду вешаться.
:facepalm:
Следовать завещаниям ВИЛ.
Вам подсказали, что делать, вы этот путь забраковали.
Да и честно говоря, не хотелось бы его использовать. Ужасно не нравится мне этот формат. Переименованные регистры - ужас....сейчас начну ругаться....бесит жутко.
Вы как хотели? Чтобы все было именно так, как вы можете это воспринять, или как вам удобнее воспринимать?
Если вы останетесь при своих убеждениях, то хозяйственный магазин вам поможет... :)
С уважением,
Виктор.
Аватара пользователя
sx386
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Re: STM32F4DISCOVERY вектор прерывания

Сообщение sx386 »

CMSIS я подключил ! Не работает !
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: STM32F4DISCOVERY вектор прерывания

Сообщение ut1wpr »

sx386 писал(а):CMSIS я подключил ! Не работает !
Спойлер

Код: Выделить всё

 Example Description 

  This example shows how to configure external interrupt lines.
  In this example, 2 EXTI lines (EXTI Line0 and Line15) are configured  to generate
  an interrupt on each rising and falling edge, respectively.
  In the interrupt routine a led connected to a specific GPIO pin is toggled.

  In this example:
    - EXTI Line0 is connected to PA0 pin
    - EXTI Line15 is connected to PG15 pin

  After EXTI configuration, a software interrupt is generated on the EXTI0 toggles LED1.
  After that:
    - when falling edge is detected on EXTI Line0, LED1 toggles
    - when falling edge is detected on EXTI Line15, LED2 toggles

  On STM324xG-EVAL/STM32437I-EVAL:
    - EXTI Line0 is connected to Wakeup push-button
    - EXTI Line15 is connected to Key push-button

@note In this example, EXTILine15_Config() function can be substituted by
      STM_EVAL_PBInit(Button_KEY, Mode_EXTI) provided in the STM324xG-EVAL/
      STM32437I-EVAL driver.


@par Directory contents

  - EXTI/EXTI_Example/stm32f4xx_conf.h    Library Configuration file
  - EXTI/EXTI_Example/stm32f4xx_it.h      Interrupt handlers header file
  - EXTI/EXTI_Example/stm32f4xx_it.c      Interrupt handlers
  - EXTI/EXTI_Example/main.h              Header for main.c module
  - EXTI/EXTI_Example/main.c              Main program
  - EXTI/EXTI_Example/system_stm32f4xx.c  STM32F4xx system source file

@note The "system_stm32f4xx.c" is generated by an automatic clock configuration
      tool and can be easily customized to your own configuration.
      To select different clock setup, use the "STM32F4xx_Clock_Configuration_V1.1.0.xls"
      provided with the AN3988 package available on <a href="http://www.st.com/internet/mcu/family/141.jsp">  ST Microcontrollers

Последний раз советую библиотеки. Абсолютно не больно и не страшно. :) Скомпилируйте, пошагайте по либе, разберитесь, сведите все к минимально-необходимому.
С уважением,
Виктор.
Аватара пользователя
sx386
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Re: STM32F4DISCOVERY вектор прерывания

Сообщение sx386 »

Последний раз советую библиотеки.

Это звучит как угроза ! :kill:

Я ж говорю подключил библиотеки. Они не работают !

Код: Выделить всё

$PROJ_DIR$\StdPeriph\inc\
$PROJ_DIR$\StdPeriph\src\
$PROJ_DIR$\CMSIS\Include\
$PROJ_DIR$\CMSIS\Device\ST\STM32F4xx\Include\
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Re: STM32F4DISCOVERY вектор прерывания

Сообщение Myp3ik »

Иван Сусанин - первый полупроводник :solder:
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: STM32F4DISCOVERY вектор прерывания

Сообщение ut1wpr »

sx386 писал(а):
Последний раз советую библиотеки.

Это звучит как угроза ! :kill:

Я ж говорю подключил библиотеки. Они не работают !

Код: Выделить всё

$PROJ_DIR$\StdPeriph\inc\
$PROJ_DIR$\StdPeriph\src\
$PROJ_DIR$\CMSIS\Include\
$PROJ_DIR$\CMSIS\Device\ST\STM32F4xx\Include\
Это я сам себе говорил.. Наверное, все-таки предпоследний раз было.
Как-то странно вы двигатесь. Начните от печки.
1. Создайте собственный проект. С пустым main(). Добейтесь безошибочно компиляции.
2. В главной программе сделайте собственный ногодрыг. Без библиотек. Проверьте в работе. Осциллографом проверьте.
3. Подключите минимальную библиотеку, только те модули, которые нужны для ногодрыга и клокирования. Добейтесь компиляции и работы.
И только тогда переходите к прерываниям.
А то, что вы написали, никак не тянет на подключение библиотек. Это лишь сообщения компилятору путей поиска. А модули библиотеки в рабочий проект еще включать надо.
Пройдя начальные пункты моей рекомендации, вы уясните (немного) организацию и взаимодействие файлов и модулей проекта.
Хватать довольно сложный к пониманию проект в качестве стартапа - моветон. Нифига не въедете сходу.. :(
На этот раз последний. Я не умею учить. Выдохся.
(Научить нельзя, можно лишь научится.)
С уважением,
Виктор.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32F4DISCOVERY вектор прерывания

Сообщение dosikus »

sx386 писал(а):Я ж говорю подключил библиотеки. Они не работают !

Код: Выделить всё

$PROJ_DIR$\StdPeriph\inc\
$PROJ_DIR$\StdPeriph\src\
$PROJ_DIR$\CMSIS\Include\
$PROJ_DIR$\CMSIS\Device\ST\STM32F4xx\Include\


CMSIS в IAR подключаются установкой галки в опциях проекта, соответственно иметь дубли в папке проекта - на нужно.
Ваша долбанная SPL, подключается не просто вписыванием хэдеров но и подключением исходников и редактированием хэдера stm32f4xx_conf.h
А так все нормально, сразу видны последствия CVAVR и AVR вообще - пациент не осознает парадигму ...
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: STM32F4DISCOVERY вектор прерывания

Сообщение ut1wpr »

dosikus писал(а): А так все нормально, сразу видны последствия CVAVR и AVR вообще - пациент не осознает парадигму ...
Ага. Это лечится, но долго и больно. Особенно первое. Оно хуже язвы въедается.. :) Иногда лечению не поддается. :)
С уважением,
Виктор.
bishop-strip
Открыл глаза
Сообщения: 71
Зарегистрирован: Чт окт 28, 2010 11:20:39

Re: STM32F4DISCOVERY вектор прерывания

Сообщение bishop-strip »

1. ВОзмонжо у вас не добавлены файлы system_stm32f4xx.c и startup_stm32f40x.s
2. необходимо настроить ножки на прерывания:
Спойлер/* Включаем порт А */
RCC_APB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_Init(GPIOA, &GPIO_InitStructure);

SYSCFG_EXTILineConfig((uint8_t)GPIOA, EXTI_PinSource0);
EXTI_InitTypeDef EXTI_InitStucture;
EXTI_InitStucture.EXTI_Line = EXTI_Line0;
EXTI_InitStucture.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStucture.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStucture.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStucture);

NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
EXTI_ClearITPendingBit(EXTI_Line0);
NVIC_EnableIRQ(EXTI0_IRQn);


и соответственнно определить обработчик прерывания:
void EXTI0_IRQHandler()
{
//...код...
EXTI_ClearITPendingBit(EXTI_Line0);
}
Аватара пользователя
sx386
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Re: STM32F4DISCOVERY вектор прерывания

Сообщение sx386 »

Долго мучался.
Так и не заработало.
В итоге установил KEIL
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Re: STM32F4DISCOVERY вектор прерывания

Сообщение Myp3ik »

А в кеиле заработало ?
Иван Сусанин - первый полупроводник :solder:
Аватара пользователя
sx386
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Re: STM32F4DISCOVERY вектор прерывания

Сообщение sx386 »

Да, в кейле всё сразу зарустилось.
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Ответить

Вернуться в «ARM»