Wie mache ich PVD ( programmable voltage detector ) interrupt funktioniert ?

Gast #4750104
hallo forum,

Ich will bei stromabschaltung eine Datei zum flash von STM32F103 
speichern

dafür richte ich PVD ( programmable voltage detector ) interrupt 
folgende Weise ein.

aber ich kann PVD interrupt nicht feuern

Ich schalte eine LED durch ein Portpin ein im PVD interrupt, aber die 
LED leuchtet nicht auch für kurze zeit - bis die kapazitoren leeren

die flash speicher routinen habe ich im anderen Program getestet kein 
problem

wer kann weiter helfen ? danke im voraus

hier sind die Kodierung
==========================0============================
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();}

}
Gast
nein nicht "EXTI trigger rising" sondern "falling"

ich will bei strom"ab"schaltung speichern

die bypass kapazitoren haben genug energie um die uC beim 
speichervorgang mit strom zu versorgen

flash speichern dauert nur 10 - 20 mikrosekunden

mein problem ist dass die interrupt nicht feuert

speichern ist nicht die wichtigste problem
Gast
Moin,

welchen Wert hat NVIC_SetPriorityGrouping?
Ich frage weil vielleicht dadurch das 
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 6;
Probleme machen könnte.

Kannst NVIC_IRQChannelSubPriority zur Probe ja mal auf 0 setzen.
Gast
Michael K. schrieb:
> Das EXTI-Signal wird bei unterschreiten der Spannung hochgezogen
> und
> damit der Interrupt ausgelöst, deshalb die steigende Flanke. Wenn Du es
> besser weißt ... bitte :)

du hast recht

mit "Rising" hat es funtioniert

danke

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.