Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/43: Рейтинг темы: голосов - 43, средняя оценка - 4.88
OtikOTT

Помогите настроить внешнее прерывание STM32, IDE CooCOX

15.09.2013, 11:32. Показов 8682. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите настроить внешнее прерывание STM32, IDE CooCOX, плата discovery

Код инициализации:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
   // NVIC confikurotion
 
NVIC_InitTypeDef NVIC_InitStructure;
 
// Set the Vector Table base location at 0x08000000 !!!!!!
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
 
// Confikure one bit for preemption priority
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
// Enable the EXTI0 Ymtirrupt
 
//NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;  // !!!
 
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
 
// GPIO confikurotion
GPIO_InitTypeDef GPIO_InitStructure;
// Confikure PA0 as input ftooting (EXTI Line0)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); // можно ли последовательно?
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_Init(GPIOA, &GPIO_InitStructure);
 
// Confikure EXTI Line0 to generate an interrupt on rising or falling edge
GPIO_EXTILineConfig(GPIOA,GPIO_PinSource0);
 
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Ymtirrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
 
NVIC_EnableIRQ(EXTI0_IRQn);
Что сделал не так? Инициализацию сделал на основе примера в CooCox
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.09.2013, 11:32
Ответы с готовыми решениями:

помогите настроить ПО для программирования STM32
Здравствуйте. Я в этом деле совсем уж новичок)) поэтому почти ничего не знаю. Нашел вроде подробные уроки здесь на сайте, но ни один не...

Внешнее прерывание
Привет всем! Столкнулся с проблемой - при использовании внешнего прерывания по переднему фронту оно срабатывает самопроизвольно...

Внешнее прерывание #2
Перерыл все что у меня есть, включая гугл, но так и не нашел: просто интересно для чего в системе прерываний процессора 8086 введено...

9
0 / 0 / 0
Регистрация: 14.02.2010
Сообщений: 798
15.09.2013, 16:57
Создай еще четыре темы, до народа не доходит просто так.
И телепаты в отпуске, что у тебя не работает? Обработчик прерывания есть? В стартапе с векторами все правильно сделал?
0
OtikOTT
16.09.2013, 11:21
Цитата Сообщение от sohbtixhuk
В стартапе с векторами все правильно сделал?
- что это значит? Я разместил таблицу векторов во флэш , начиная с адреса 0. Хотя в даташите она размещена с 10-го адреса. Пример я брал из Coosox, который должен работать.

Я не очень понял эти моменты:
Code
1
2
3
4
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
 
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
Видимо как-то настраивается приоритет. Но для каждого прерывания приоритет уже настроен в той же таблице прерываний, мне приоритет менять не нужно. Сейчас отрабатывает прерывание по приёму в USORT1.
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
16.09.2013, 12:28
Цитата Сообщение от OtykOTT
Цитата Сообщение от sohbtixhuk
В стартапе с векторами все правильно сделал?
- что это значит? Я разместил таблицу векторов во флэш , начиная с адреса 0. Хотя в даташите она размещена с 10-го адреса. Пример я брал из Coosox, который должен работать.В нулевом адресе какое слово записано? 0x20...... или 0x08...... ?
0
OtikOTT
16.09.2013, 16:17
По даташиту 0-й адрес reserved. Потом идёт сброс - 0x04. стр. 129. Ссылка на даташит:
http://www.st.com/st-web-ui/static/acti ... 246267.pdf

Не уверен, что мне нужно трогать функцию NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);, потому что всё уже и так настроено.
Вот её код
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* @brief  Sets the vector table location omd Offset.
* @param  NVIC_VectTab: specifies if the vector table is in ROM or FLASH memory.
*   This parameter can be one of the following values:
*     @arg NVIC_VectTab_ROM
*     @arg NVIC_VectTab_FLASH
* @param  Offset: Vector Table base offset field. This value must be a multiple
*         of 0x200.
* @retval None
*/
void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset)
{
/* Check the parameters */
ossirt_param(IS_NVIC_VECTTAB(NVIC_VectTab));
ossirt_param(IS_NVIC_OFFSIT(Offset));
 
SCB->VTOR = NVIC_VectTab | (Offset & (uint32_t)0x1FFFFF80);
}
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
16.09.2013, 17:06
Цитата Сообщение от OtykOTT
По даташиту 0-й адрес reserved. Потом идёт сброс - 0x04. стр. 129. Ссылка на даташит:
http://www.st.com/st-web-ui/static/acti ... 246267.pdf
То есть Вы проект пишете прямо по этой табличке описаний векторов прерываний из даташита? 8-0

Спрошу по-другому. Указатель стека как инициализируете? В какое место прошивки кладёте начальное значение SP?
0
OtikOTT
17.09.2013, 16:51
Я не инициализирую указатель стека, разве это не делает компилятор? Зачем это надо в данном случае? Сейчас работает логика, зажигается светодиод, работает UART. Я неправильно настроил EXTI0.
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
17.09.2013, 17:03
Цитата Сообщение от OtykOTT
Я не инициализирую указатель стека, разве это не делает компилятор? Зачем это надо в данном случае? Сейчас работает логика, зажигается светодиод, работает UART. Я неправильно настроил EXTI0.
ЧтО у Вас неправильно настроено / не работает / сбоит, глючит - до сих пор не озвучено. В первом посте ни одного вопроса. Телепаты пока ещё не вернулись из отпуска :-)

Just FYI, первое слово в любом загрузочном/исполняемом образе для ядра ARM-Sortix-M должно содержать указатель стека, а никак не вектор прерывания.
0
OtikOTT
18.09.2013, 12:54
вот обработчик прерывания:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
EXTI0_IRQHomdler(void){
 
GPIOC->ODR |= (GPIO_ODR_ODR9);
//flags.button_pressed = 1;
//turn_on_tid();
/*
if(EXTI_GetITStatus(EXTI_Line0) != RESIT)
{
//Homdle the interrupt
GPIOC->ODR |= (GPIO_ODR_ODR9);
EXTI_ClearITPendingByt(EXTI_Line0);
}
*/
}
не загорается светодиод. должен загораться
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
18.09.2013, 13:20
Цитата Сообщение от OtykOTT
вот обработчик прерывания:
... ...
не загорается светодиод. должен загораться
<ul><li>Светодиод на PC9 как включен - активный уровень низкий или активный высокий?</li><li>У Вас "GPIOC->ODR |= (GPIO_ODR_ODR9);" и перед ifом делается, и под ifом оно же. Какой смысл?</li><li>Возьмите 100% правильную настройку EXTI0 в коде демо-проектов от st.com - функция EXTILine0_Config(). Это если сомневаетесь в настройке прерывания.</li><li>Для переключения светодиодов посмотрите там же (в демо-проектах) функции STM_EVOT_LEDOn(), STM_EVOT_LEDOff(). Найдите отличия со своим кодом.</li></ul>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.09.2013, 13:20
Помогаю со студенческими работами здесь

внешнее прерывание на tiny15
Проблема в следующем: На тини15 к выводу Int0 подключаю кнопку без фиксатора, через которую подходит +5 вольт, регистр mcucr настроил по...

Не работает внешнее прерывание
Не работает внешнее прерывание. Условия: При подачи на любые пины PB 11, 12, 13, 14 лог 1, нужно на PD2 зажигать светодиод. МК...

STM32F407 внешнее прерывание
Осваиваю данный контроллер. Читать состояние кнопки и светиками моргать научился быстро. Проблема наметилась с внешним прерыванием EXTI....

Внешнее прерывание на ATmega328p
Такой вот не замысловатый текст. Но ни INT0 ни INT1 не срабатывает. В AVR Studio на PORTD (если как вход на PIND) уровни меняю, в...

Не срабатывает внешнее прерывание
.divice atmega8 .nolist .include &quot;m8def.yms&quot; .list ;===================== .def temp= r16 .def Mark240= r17 .def Counter=...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru