Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F103RET проблема с внешними прерываниями
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
cruelkirill
Здравствуйте.
При работе со внешними прерываниями с данной платой возникла следующая проблема:
пытаюсь назначить прерывание на кнопку PB6 с тем, чтобы при нажатии на кнопку зажигался диод. Сгенерировать прерывание программно получается: при нажатии кнопки диод загорается. Однако же при работе с железом прерывание не генерируется. Подскажите пожалуйста, в чем может быть проблема.

CODE
int main( void ) {
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

#ifdef DEBUG
debug();
#endif
prvSetupHardware();


EXTI_DeInit();

DebugLedInit();

DebugButtonInit();
// DebugGpioInit();

/* Connect Button EXTI Line to Button GPIO Pin */
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_Pin_6);
/* Configure Button EXTI line */
EXTI_InitStructure.EXTI_Line = EXTI_Line6;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //EXTI_Mode_Interrupt; //EXTI_Mode_Event
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //EXTI_Trigger_Rising_Falling; //EXTI_Trigger_Falling; //EXTI_Trigger_Rising
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);

/* Enable and set Button EXTI Interrupt to the lowest priority */
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;//0x0F;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;//0x0F;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
__enable_irq();
/* Check the parameters */
assert_param(IS_EXTI_LINE(EXTI_Line6));
EXTI->SWIER |= EXTI_Line7;
int a;
while(1) {
//if (GPIOB->IDR
if (!( GPIOB->IDR & GPIO_Pin_6 ))
{

GPIOA->BSRR = GPIO_Pin_6;
}
if (( GPIOB->IDR & GPIO_Pin_6 ))
{

GPIOA->BRR = GPIO_Pin_6;
}
}


return 0;
}

void DebugButtonInit()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; //GPIO_Mode_AF_OD;//GPIO_Mode_IPD;//GPIO_Mode_IPD; //GPIO_Mode_IPD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
koyodza
Цитата(cruelkirill @ Jan 26 2012, 08:41) *
Сгенерировать прерывание программно получается: при нажатии кнопки диод загорается.

По каким признакам Вы сделали выводы, что прерывание не генерируется?
Кстати, ещё Вы забыли включить тактирование GPIOA
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.