Помогите с STM32

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 21
Зарегистрирован: Сб ноя 12, 2011 08:57:58
Откуда: Москва

Сообщение ey8bg »

Помогите пожалуйста с внешним прерыванием! Проблема в том, что при возникновении внешнего прерывания процессор на него реагирует, но не переходит в обработчик прерываний, а зависает где то! И в основной цикл не возвращается. Может кто знает в чем дело?

#include "stm32f10x.h"

int main()
{
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;

GPIOC->CRH |= GPIO_CRH_MODE9;
GPIOC->CRH &=~ GPIO_CRH_CNF9;

GPIOA->CRL |= GPIO_CRL_MODE0;
GPIOA->CRL &=~ GPIO_CRL_CNF0_0;

RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
AFIO->EXTICR[0] |= AFIO_EXTICR1_EXTI0_PA;

EXTI->IMR |= EXTI_IMR_MR0;
EXTI->EMR |= EXTI_EMR_MR0;

EXTI->RTSR |= EXTI_RTSR_TR0;

NVIC_SetPriority(EXTI0_IRQn, 7);
NVIC_EnableIRQ(EXTI0_IRQn);

__enable_irq ();

while (1)
{
GPIOC->BSRR |= GPIO_BSRR_BS8;
for (volatile int x=0; x<100000; x++){}
GPIOC->BRR |= GPIO_BRR_BR8;
for (volatile int x=0; x<100000; x++){}
}
}

//Сам обработчик прерывания
void EXTI0_IRQHandler(void)
{
if ((EXTI->PR & EXTI_PR_PR0)==0)
{
GPIOC->BSRR |= GPIO_BSRR_BS9;
EXTI->PR |= EXTI_PR_PR0;
}
}
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

Что бросается в глаза сходу:

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

GPIOA->CRL |= GPIO_CRL_MODE0;
GPIOA->CRL &=~ GPIO_CRL_CNF0_0; 
Чойта? Это же линия внешнего прерывания? Почему же биты MODE установлены? Сейчас вывод (в понимании "пин") настроен как GP+PP. Надо бы

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

GPIOA->CRL &= ~GPIO_CRL_MODE0;
GPIOA->CRL |= GPIO_CRL_CNF0_0; 
Вроде никаких огрехов больше глаз не режет. =)
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Реклама
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 21
Зарегистрирован: Сб ноя 12, 2011 08:57:58
Откуда: Москва

Сообщение ey8bg »

Спасибо за ошибку! Странно,как я сам этого не заметил, но ситуация к сожалению не изменилась. Пробовал программно реализовать прерывание и все равно та же ситуация :(
Открыл глаза
Сообщения: 71
Зарегистрирован: Пт апр 24, 2009 11:25:34
Откуда: Rus

Сообщение makser »

Сброс флага прерывания попробуйте не EXTI->PR |= EXTI_PR_PR0; а просто EXTI->PR = EXTI_PR_PR0; и выведите эту команду из условия.
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Сообщение BerZerK-ku »

А функция в вектор прерываний у вас прописана?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

Было такое - не подключил startup_stm32f10x_ld_vl.s. Это для STM32F100C4.
Реклама
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 21
Зарегистрирован: Сб ноя 12, 2011 08:57:58
Откуда: Москва

Сообщение ey8bg »

Проблема была в том, что не подключил файл startup_stm32f10x_ld_vl.s :)
Грызет канифоль
Аватара пользователя
Сообщения: 271
Зарегистрирован: Чт апр 01, 2010 14:14:55

Сообщение jordan »

Аналогичная проблема не переходит в обработчик прерывания, после подключения startup_stm32f10x_md_vl.s IAR находит 100 ошибок в подключенном startup_stm32f10x_md_vl.s практически все ощибки Error[Pe065]: expected a ";" ну и другие есть ругается практически на каждую строчку кода... камень stm32f100rb на stm32f100discovery... с stm32 и IAR не так давно, прошу помочь более опытных !!!

void TIM1_TRG_COM_TIM17_IRQHandler(void) //обработчик прерывания
{
....
}

но в дебареге и на деле видно что в обработчик программа не попадает просто зависает и все! (в обработчике у меня должен загорается светодиод, этого не происходит)

GPIO, uart, spi, dma, rcc, осилил дошел до прерываний и таймера и ... Подскажите пожалуста кто что может !
Грызет канифоль
Аватара пользователя
Сообщения: 271
Зарегистрирован: Чт апр 01, 2010 14:14:55

Сообщение jordan »

sorry за глупый вопрос. Разобрался 8)
Ответить

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