STM32 F103 使用HAL庫配置PVD

PVD (Programmable Votage Detector) ,即可編程電壓監測器

PVD可以檢測電壓變化並觸發中斷,一般用於判斷斷電並進行數據保存

工程是使用STM32CubeMx生成的,在STM32CubeMx找了大半天,沒找到可以PVD配置的地方

找到官方例程:Repository\STM32Cube_FW_F1_V1.8.0\Projects\STM3210E_EVAL\Examples\PWR\PWR_PVD

直接搬磚

/** PVD配置函數,從例程直接複製過來,在Main函數中調用配置PVD
  * @brief  Configures the PVD resources.
  * @param  None
  * @retval None
  */
void PVD_Config(void)
{
    /*##-1- Enable Power Clock #################################################*/
    __HAL_RCC_PWR_CLK_ENABLE();

    /*##-2- Configure the NVIC for PVD #########################################*/
    HAL_NVIC_SetPriority(PVD_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(PVD_IRQn);

    /* Configure the PVD Level to 3 and generate an interrupt on rising and falling
       edges(PVD detection level set to 2.5V, refer to the electrical characteristics
       of you device datasheet for more details) */
    PWR_PVDTypeDef sConfigPVD;
    sConfigPVD.PVDLevel = PWR_PVDLEVEL_7;
    sConfigPVD.Mode = PWR_PVD_MODE_IT_RISING;
    HAL_PWR_ConfigPVD(&sConfigPVD);

    /* Enable the PVD Output */
    HAL_PWR_EnablePVD();
}
/** PVD (Programmable Votage Detector) ,即可編程電壓監測器,PVD中斷回調,在這個函數中添加自己需要的斷電時處理的內容
  * @brief  PWR PVD interrupt callback
  * @retval None
  */
void HAL_PWR_PVDCallback(void)
{
    /* NOTE : This function Should not be modified, when the callback is needed,
              the HAL_PWR_PVDCallback could be implemented in the user file
     */
    // 斷電時點亮一下LED,會亮一瞬間
    HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);
    
}
/** 由於沒有STM32CubeMx找到配置PVD的地方,這裏需要手動添加PVD_IRQHandler的實現
  * @brief  This function handles the PVD Output interrupt request.
  * @param  None
  * @retval None
  */
void PVD_IRQHandler(void)
{
    HAL_PWR_PVD_IRQHandler();
}

PVD_IRQHandler是必須要添加的,如果STM32CubeMx能配置PVD,這個函數應該能自動添加的

太依賴STM32CubeMx了,開始時寫了PVD_Config()和HAL_PWR_PVDCallback(),然後測試一直進不去中斷,最後在例程的stm32f1xx_it.c文件中看到PVD_IRQHandler的實現,而自己的工程裏卻沒有,加上後就一切搞定了

然後在HAL_PWR_PVDCallback()函數中寫入flash,發現擦除完section後沒有寫入成功,時間不太夠,估計要加個電容

=============================================================

找到STM32CubeMx配置PVD的地方了,在NVIC中,PVD interrupt through EXTI line 16,之前之所找不到因爲我之前勾選了show only enable interrupts選項,沒顯示出來,重新生成工程,打開stm32f1xx_it.c可以看到PVD_IRQHandler()函數代碼已經自動生成了

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章