Привет народ нуждаюсь в вашей помощи, проблема с прерываниями на stm32 . Суть проблемы в следующем, когда осуществляться прерывание будь то RXNE или по нажатию кнопочки то в отладчике ,а это IAR, код выбрасывает в BusFault_Handler и тут полный висяк. Подскажите в чем проблема где я делаю ошибку ? В настройках компилятора в StdPeriph_Lib или в самом коде. Програмирую в IAR с StdPeriph_Lib ,а код мой вот:
CODE
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
int main() {
GPIO_InitTypeDef PORT;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2ENR_AFIOEN , ENABLE);
PORT.GPIO_Pin = (GPIO_Pin_9 | GPIO_Pin_8);
PORT.GPIO_Mode = GPIO_Mode_Out_PP;
PORT.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOC, &PORT);
AFIO->EXTICR[0]|=AFIO_EXTICR1_EXTI1_PB;
//Прерывания от нулевой и первой ноги разрешены
EXTI->IMR|=(EXTI_IMR_MR0 | EXTI_IMR_MR1);
//Прерывания на обоих ногах по нарастающему фронту
EXTI->RTSR|=(EXTI_RTSR_TR0 | EXTI_RTSR_TR1);
//Разрешаем оба прерывания
NVIC_EnableIRQ (EXTI0_IRQn);
NVIC_EnableIRQ (EXTI1_IRQn);
while(1)
{
}
}
void EXTI0_IRQHandler(void)
{
GPIOC->ODR^=GPIO_Pin_8;
EXTI->PR|=0x01;
}
void EXTI1_IRQHandler(void)
{
GPIOC->ODR^=GPIO_Pin_9;
EXTI->PR|=0x02;
}
Огромное спасибо.
Пардон народ разобрался тема снята и закрыта спасибо. Проблема была в настройках компилятора, не указал путь
$PROJ_DIR$\CM3\STM32F10x\startup\iar\. Все работает
Сообщение отредактировал IgorKossak - Feb 25 2013, 09:56
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!