Страница 1 из 1

Помогите с STM32

Добавлено: Чт дек 08, 2011 16:51:36
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;
}
}

Re: Помогите с STM32

Добавлено: Чт дек 08, 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; 
Вроде никаких огрехов больше глаз не режет. =)

Re: Помогите с STM32

Добавлено: Чт дек 08, 2011 18:15:01
ey8bg
Спасибо за ошибку! Странно,как я сам этого не заметил, но ситуация к сожалению не изменилась. Пробовал программно реализовать прерывание и все равно та же ситуация :(

Re: Помогите с STM32

Добавлено: Ср дек 14, 2011 08:47:22
makser
Сброс флага прерывания попробуйте не EXTI->PR |= EXTI_PR_PR0; а просто EXTI->PR = EXTI_PR_PR0; и выведите эту команду из условия.

Re: Помогите с STM32

Добавлено: Ср дек 14, 2011 09:04:30
BerZerK-ku
А функция в вектор прерываний у вас прописана?

Re: Помогите с STM32

Добавлено: Ср дек 14, 2011 09:38:37
oleg110592
Было такое - не подключил startup_stm32f10x_ld_vl.s. Это для STM32F100C4.

Re: Помогите с STM32

Добавлено: Пт дек 30, 2011 20:59:32
ey8bg
Проблема была в том, что не подключил файл startup_stm32f10x_ld_vl.s :)

Re: Помогите с STM32

Добавлено: Вс июл 08, 2012 15:58:54
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, осилил дошел до прерываний и таймера и ... Подскажите пожалуста кто что может !

Re: Помогите с STM32

Добавлено: Вс июл 08, 2012 20:15:42
jordan
sorry за глупый вопрос. Разобрался 8)