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

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

Сообщение 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; // Сбросить флаг  

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

Сообщение balmer »

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

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

Сообщение misyachniy »

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

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

Сообщение 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:
Реклама
Эиком - электронные компоненты и радиодетали
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

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

Сообщение 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/acti ... ph_lib.zip
Вложения
startup_stm32f40xx.rar
(3.5 КБ) 261 скачивание
Иван Сусанин - первый полупроводник :solder:
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Сообщение sx386 »

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

Сообщение sx386 »

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

Сообщение ut1wpr »

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

Сообщение sx386 »

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

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

Сообщение sx386 »

Последний раз советую библиотеки.
Это звучит как угроза ! :kill:

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

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

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

Сообщение Myp3ik »

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

Сообщение 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. Подключите минимальную библиотеку, только те модули, которые нужны для ногодрыга и клокирования. Добейтесь компиляции и работы.
И только тогда переходите к прерываниям.
А то, что вы написали, никак не тянет на подключение библиотек. Это лишь сообщения компилятору путей поиска. А модули библиотеки в рабочий проект еще включать надо.
Пройдя начальные пункты моей рекомендации, вы уясните (немного) организацию и взаимодействие файлов и модулей проекта.
Хватать довольно сложный к пониманию проект в качестве стартапа - моветон. Нифига не въедете сходу.. :(
На этот раз последний. Я не умею учить. Выдохся.
(Научить нельзя, можно лишь научится.)
С уважением,
Виктор.
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение 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 вообще - пациент не осознает парадигму ...
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Сообщение ut1wpr »

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

Сообщение 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);
}
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Сообщение sx386 »

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

Сообщение Myp3ik »

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

Сообщение sx386 »

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

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