STM32F4 + прерывания
Re: STM32F4 + прерывания
Поставил Keil ... с горем по полам запустил дебагер... толку 0... ничего не понятно)) Понятно одно что оно доходит до бесконечного цикла и больше ничего не делает. Прерывание как не работало так и не работает... ребята если кто то делал уже у себя такое на stm32f4 и у него получилось скиньте пример пожалуйста. Уже неделю долбаюсь
- Реклама
Re: STM32F4 + прерывания
Во первых запустили вы симулятор. И толку естественно будет 0 , ибо в симуляторе Keil поддерживает полноценно только 103 камни .osievskiy писал(а):Поставил Keil ... с горем по полам запустил дебагер... толку 0... ничего не понятно))
Во вторых - если есть F4 и скорей всего дисковери - какой смысл тыркаться в симуляторе ?
Re: STM32F4 + прерывания
Наверное Вы первый.osievskiy писал(а):если кто то делал уже у себя такое на stm32f4 и у него получилось скиньте пример пожалуйста
1. нужно включить тактирование Вашего порта . Настроить порт на ввод. Проверить например в основном цикле что все правильно настроено и Вы видите изменение битиков при нажатии кнопки.
2. SYSCFG->EXTICR настроить что бы прерывания считывались с Вашего порта. В 1 серии другие регистры но по документации именно так. Если этого не сделать, то будут считываться прерывания с порта A только. Возможно это Ваш случай. Посмотреть в документации нужно ли включать тактирование SYSCFG и EXTI. Если нужно - включить тактирование в первом пункте.
Здесь можно сконфигурировать порт A и попробовать дернуть его ногу. Может в библиотеке глюк.
3. Сконфигуриоровать EXTI как написано в RM 10.2.4
Hardware interrupt selection
EXTI->IMR, EXTI_RTSR and EXTI_FTSR, NVIC IRQ channel
Каждый из этих пунктов надо проверить хотя бы на то что нужные битики установились. Если конечно там нет регисторов только на запись. Если биты не установились - смотрите тактирование или код библиотеки.
Должен быть пример в библиотеке от st на EXTI. Он должен быть рабочий. Заработал ли он у Вас? Там нужно проверять, что именно та нога что там описана вызывает прерывание - моргание светодиодом. Потом нужно изменить ногу в RCC, EXTI->IMR, EXTI_RTSR and EXTI_FTSR, NVIC IRQ SYSCFG->EXTICR на ту что Вам нужна;
И еще напишите что у Вас за бесконечный цикл. В каком он месте расположен. Приведите Весь код Вашей программы.
Re: STM32F4 + прерывания
Невероятно. Первый раз я взял из оригинала (примера) код и немного изменил незначительные вещи и он у меня не работал.Galizin писал(а): Должен быть пример в библиотеке от st на EXTI. Он должен быть рабочий. Заработал ли он у Вас?
Скомпилировал прямо из папки примеров... оно взяло и заработало. Ничего не понимаю.
Может у меня файлы stm32f4xx как то не правильно настроены...
На счет дебагера. Думаю что у меня не эмулятор ... собственно зачем тогда дебагеру подключаться к камню?
Кстати в интернете очень мало написано про настройку keil + stm32f4 ... точнее написано но не полностью, приходилось самому додумываться почему оно не подключалось и как с этим справится. Если у кого будут проблемы с этим то пишите помогу разобраться.
Re: STM32F4 + прерывания
Внимание! Мы все присутствуем при рождении НОВОГО ГУРУ! Все бегом на мастер-класс, количество мест ограничено!osievskiy писал(а): Невероятно. Первый раз я взял из оригинала (примера) код и немного изменил незначительные вещи и он у меня не работал.
Скомпилировал прямо из папки примеров... оно взяло и заработало. Ничего не понимаю.
Может у меня файлы stm32f4xx как то не правильно настроены...
На счет дебагера. Думаю что у меня не эмулятор ... собственно зачем тогда дебагеру подключаться к камню?
Кстати в интернете очень мало написано про настройку keil + stm32f4 ... точнее написано но не полностью, приходилось самому додумываться почему оно не подключалось и как с этим справится. Если у кого будут проблемы с этим то пишите помогу разобраться.
С уважением,
Виктор.
Виктор.
- Реклама
Re: STM32F4 + прерывания
Вроде бы разобрался! Прерывания работают и TFT тоже. На сколько я понял то прерывания можно принимать только с порта A и в этом заключается прикол! Так как у меня TFT был на порте A я пытался принять прерывания с порта H
Переставил TFT на порт D и вуаля... все работает! Хотя странно что когда я тестировал пример с сайта то оно не работало, хотя там TFT небыло.
Всем спасибо за помощь!!
Переставил TFT на порт D и вуаля... все работает! Хотя странно что когда я тестировал пример с сайта то оно не работало, хотя там TFT небыло.
Всем спасибо за помощь!!
Re: STM32F4 + прерывания
А какие скажите там могут быть грабли ?osievskiy писал(а): точнее написано но не полностью, приходилось самому додумываться почему оно не подключалось и как с этим справится. Если у кого будут проблемы с этим то пишите помогу разобраться.
Что Кейл что IAR , что 103,100,051,050,F4,F3, что на STLink что на JLink , что JTAG что SWD все единообразно - подключается и работает.
Вот на ГНУ c GDB , там да- без знаний придется танцевать ритуальные танцы . С знанием - все так же уныло однообразно - подключил и работает...
Re: STM32F4 + прерывания
Скорее всего Вы ошибаетесь. Маловероятно что в кристалле есть такой глюк. В 1 версии для этого нужно было предпринять дополнительные телодвижения что бы генерировать с других портов. Здесь тоже за это отвечает SYSCFG->EXTICR. Попробуйте присвоить явно SYSCFG->EXTICR без библиотеки;osievskiy писал(а):На сколько я понял то прерывания можно принимать только с порта A
Re: STM32F4 + прерывания
Ну допустим везде где я не читал о настройке не было написано что при настройке Debug нужно ставить в поле Connect: unde Resetdosikus писал(а):А какие скажите там могут быть грабли ?
и во вкладке Flash Download нужно отмечать галку Reset and Run
По крайне мере у меня без это не прошивалось и дебагер не подключался! Можно конечно и без этого обойтись, но придется постоянно дергать Reset в ручную.
Re: STM32F4 + прерывания
Ну допустим у меня RESET вообще не подключен , та опция стоит в Normal и стоит галка на Reset after connect .osievskiy писал(а): Ну допустим везде где я не читал о настройке не было написано что при настройке Debug нужно ставить в поле Connect: unde Reset
Что для STLink что для JLink .
Это чисто для прошивки к дебагу никакого отношения не имеет ....osievskiy писал(а): и во вкладке Flash Download нужно отмечать галку Reset and Run
Re: STM32F4 + прерывания
Ну вот у меня не хотело работать пока я не поставил Connect: unde Reset
- balmer
- Это не хвост, это антенна
- Сообщения: 1433
- Зарегистрирован: Вс дек 02, 2012 03:13:48
- Откуда: Калининград
Re: STM32F4 + прерывания
Хех, я как раз использую arm gcc + OpenOcd + gdb, да еще и под MacOsdosikus писал(а): Вот на ГНУ c GDB , там да- без знаний придется танцевать ритуальные танцы . С знанием - все так же уныло однообразно - подключил и работает...
Re: STM32F4 + прерывания
Сочувствую . Не, с писаниной и компиляцией может все ок и удобно, а вот отладка никакая .balmer писал(а):
Хех, я как раз использую arm gcc + OpenOcd + gdb, да еще и под MacOs
С Keil да еще под 103 , не сравнишь...
- balmer
- Это не хвост, это антенна
- Сообщения: 1433
- Зарегистрирован: Вс дек 02, 2012 03:13:48
- Откуда: Калининград
Re: STM32F4 + прерывания
Да, с отладкой проблеммы. Конечно gdb под eclipse работает, но запускать его надо с большим бубном. Впрочем давно уже привык на других проектах отлаживаться через логи.dosikus писал(а): Сочувствую . Не, с писаниной и компиляцией может все ок и удобно, а вот отладка никакая .
-
bishop-strip
- Открыл глаза
- Сообщения: 71
- Зарегистрирован: Чт окт 28, 2010 11:20:39
Re: STM32F4 + прерывания
Прочитал я немного и решил выложить свой код по считывании прерывания с порта A0 (кнопка на плате STM32F4DICOVERY)
{
/* Включаем порт А */
RCC_APB2PeriphClockCmd(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(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(pETHERNET_DATA Eth)
{
//...ваш код...
EXTI_ClearITPendingBit(EXTI_Line0);
}
Спойлер
void initPushButtonInterrupt(){
/* Включаем порт А */
RCC_APB2PeriphClockCmd(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(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(pETHERNET_DATA Eth)
{
//...ваш код...
EXTI_ClearITPendingBit(EXTI_Line0);
}
Re: STM32F4 + прерывания
всем доброго дня.
вопрос по прерыванию на ноге РА0 в плате 32F3... так понимаю что аналогично Ф4
насколько разобрался в документации (наверное неправильно) - для прерывания надо вывод А0 выставить как альтернативная ф-ия, те MODER0=10 и для него-же альтернативная ф-ия 15, т.е AFR0=f. Но так прерывания не генерируются.
Если MODER0=00 (линия на вход) или AFR0=0 (нулевая альтернативная ф-ия) - то все нормально. что я не понял, в чем подвох??
вопрос по прерыванию на ноге РА0 в плате 32F3... так понимаю что аналогично Ф4
насколько разобрался в документации (наверное неправильно) - для прерывания надо вывод А0 выставить как альтернативная ф-ия, те MODER0=10 и для него-же альтернативная ф-ия 15, т.е AFR0=f. Но так прерывания не генерируются.
Если MODER0=00 (линия на вход) или AFR0=0 (нулевая альтернативная ф-ия) - то все нормально. что я не понял, в чем подвох??
- amv2000
- Опытный кот
- Сообщения: 719
- Зарегистрирован: Вт апр 26, 2011 13:58:36
- Откуда: Ростовская область
Re: STM32F4 + прерывания
http://microtechnics.ru/stm32f3-ispolzo ... reryvanij/kryvoruk писал(а):вопрос по прерыванию на ноге РА0 в плате 32F3
Re: STM32F4 + прерывания
спасибо. это я смотрел. но вопросы остаются. вроде сделал так как в документации написано. ошибки там вряд-ли.amv2000 писал(а):http://microtechnics.ru/stm32f3-ispolzo ... reryvanij/kryvoruk писал(а):вопрос по прерыванию на ноге РА0 в плате 32F3
просьба всем рассмотреть мой вопрос. если я не так понимаю, то дальше будет только хуже........
- amv2000
- Опытный кот
- Сообщения: 719
- Зарегистрирован: Вт апр 26, 2011 13:58:36
- Откуда: Ростовская область
Re: STM32F4 + прерывания
Ну да, сейчас консилиум только соберетсяkryvoruk писал(а):просьба всем рассмотреть мой вопрос.
PS. Это не в обиду.


