merhaba forum,
STM32F103 çipimde PVD interrupt şu şekilde kuruyorum ama voltaj düşerken ( beslemeyi kesince ) PVD interrupt gelmiyor
amacım besleme giderken bir değeri flash'ın içine kaydetmek
flash'a başka programda aynı rutinlerle kaydettim sorun yok
PVD interrupt gelince bir ledi yak diye ayarladım o da olmadı yani interupta girmiyor
yardım
teşekkür
main(){
---------------------------------
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
-------------------------------------------------------------
NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 6;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);}
-------------------------------------
EXTI16init();
-------------------------------------
FLASH_Unlock();
EE_Init();
EEread_params();
----------------------------------
/* Configure the PVD Level to 2.9V */
PWR_PVDLevelConfig(PWR_PVDLevel_2V9);
/* Enable the PVD Output */
PWR_PVDCmd(ENABLE);
---------------------------------------------
}
---------------------------------------------
void EXTI16init(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
/* Configure EXTI Line16(PVD Output) to generate an interrupt on rising and
falling edges */
EXTI_ClearITPendingBit(EXTI_Line16);
EXTI_InitStructure.EXTI_Line = EXTI_Line16;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
----------------------------------
void PVD_IRQHandler(void)
{
EXTI_ClearITPendingBit(EXTI_Line16);
EXTI_ClearFlag(EXTI_Line16);
EEsave_param();
while (1){Delay(100);IWDG_ReloadCounter();}
}
Aradan bi 8-9 yıl geçmiş ama ben de çalıştıramadım.
Pvd ile besleme voltajı kesiliğinde kesmeye sokamadım. Yardım edebilirmisiniz
merhaba , bende SPL ve F103 için kod var
void EXTI16init(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
/* Configure EXTI Line16(PVD Output) to generate an interrupt on rising and
falling edges */
EXTI_ClearITPendingBit(EXTI_Line16);
EXTI_InitStructure.EXTI_Line = EXTI_Line16;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
void PVD_IRQHandler(void)
{
EXTI_ClearITPendingBit(EXTI_Line16);
EXTI_ClearFlag(EXTI_Line16);
if(EXTI_GetITStatus(EXTI_Line16) != RESET){
.....
}
main(){
....
EXTI16init();
PWR_PVDLevelConfig(PWR_PVDLevel_2V9);
/* Enable the PVD Output */
PWR_PVDCmd(ENABLE);