Цитата
Есть же специальный пин PA0.
А если так? (см. первый пост)
Цитата
устройство уже собрано ....Вариант с использование пина WKUP тоже не подойдет, у меня на него от батареи через делитель подается напряжение, для анализа его при помощи АЦП.
кроме того, я писал, что клавиатура матричная. так что не пойдет пин А0.
Уважаемый smk, вы мне предложили иной вариант работы выключателя в целом. Я же уже выбрал свой вариант, с учетом невозможности использования А0.
В настоящий момент - проблема с прерыванием от Alarm. Отношения к пину А0 она не имеет.
Прощу помощи именно с Alarm.
С уважением.
Тихо сам с собою...
У меня получилось вот так:
основная программа:
Код
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR_BackupAccessCmd(ENABLE);
// RTC clock source configuration ----------------------------------------
// Reset Backup Domain
BKP_DeInit();
// Enable LSE OSC
RCC_LSICmd(ENABLE);
// Wait till LSE is ready
while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);
// Select the RTC Clock Source
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
// Enable the RTC Clock
RCC_RTCCLKCmd(ENABLE);
// RTC configuration -----------------------------------------------------
// Wait for RTC APB registers synchronisation
RTC_WaitForSynchro();
// Set the RTC time base to 1s
RTC_SetPrescaler(32767);
// Wait until last write operation on RTC registers has finished
RTC_WaitForLastTask();
RTC_SetCounter(0);
// Wait until last write operation on RTC registers has finished
RTC_WaitForLastTask();
// Set the RTC Alarm after 3s
RTC_SetAlarm(7);
// Wait until last write operation on RTC registers has finished
RTC_WaitForLastTask();
//RTC_ITConfig(RTC_IT_SEC, DISABLE);
RTC_ITConfig(RTC_IT_ALR,ENABLE);
/* 2 bits for Preemption Priority and 2 bits for Sub Priority */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = RTCAlarm_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_EnableIRQ (RTC_IRQn);
NVIC_EnableIRQ(RTCAlarm_IRQn);
PWR_EnterSTANDBYMode();
обработчик прерываний
Код
void RTC_IRQHandler(void)
{
if(RTC_GetITStatus(RTC_IT_ALR) != RESET)
{
RTC_ClearITPendingBit(RTC_IT_ALR);
}
}
/*******************************************************************************
* Function Name : RTCAlarm_IRQHandler
* Description : This function handles RTC Alarm interrupt request.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void RTCAlarm_IRQHandler(void)
{
if(RTC_GetITStatus(RTC_IT_ALR) != RESET)
{
RTC_ClearITPendingBit(RTC_IT_ALR);
}
}
Брейкпоинт в этом случае срабатывает, но почему-то не в обработчике RTCAlarm_IRQHandler, а в RTC_IRQHandler.
Естественно, из режима ожидания в этом случае система не выходит....
В чем ошибка?