在GD官网例程中没有给出GD32F407 BKP的示例代码,在网友提供的代码基础上重新使用了GD官网pmu库文件,按照流程重写了读和写的方法,供大家在使用中参考。。。
#include "gd32f4xx_rtc.h"#include "gd32f4xx_pmu.h"
//初始化void BKPSRAM_int(void){//BKPSRAM_BASE//*(__IO uint16_t *) (BKPSRAM_BASE + offset) = 0//RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //启用压水堆时钟rcu_periph_clock_enable(RCU_BKPSRAM);// PWR_BackupAccessCmd(ENABLE); //能够访问到备份域pmu_backup_ldo_config( PMU_BLDOON_ON);//RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_BKPSRAM, ENABLE); //启用备份SRAM时钟pmu_backup_write_enable();//PWR_BackupRegulatorCmd(ENABLE); //启用备份SRAM的低功耗稳压器,以保持它在VBAT模式的内容pmu_low_driver_mode_enable(PMU_LOWDRIVER_ENABLE);// while(PWR_GetFlagStatus(PWR_FLAG_BRR) == RESET) {} //等到备份SRAM的低功耗稳压器已准备就绪while(pmu_flag_get(PMU_FLAG_BLDORF)==RESET){}}
//BKPSRAM数据读取uint16_t Rd_s16_BKPSRAM(uint16_t add){uint32_t offset=0;offset=(0x07ff&add)*2;return *(__IO uint16_t *) (BKPSRAM_BASE + offset);}
//BKPSRAM数据写void Write_s16_BKPSRAM(uint16_t add,uint16_t d){uint32_t offset=0;offset=(0x07ff&add)*2;*(__IO uint16_t *) (BKPSRAM_BASE + offset) = d ;}
//测试:void main(void){uint16_t res;BKPSRAM_int();res=Rd_s16_BKPSRAM(RTC_BKP0);if(res==0x0B)Write_s16_BKPSRAM(RTC_BKP0,0X0A);printf("%x\r\n",res);res=Rd_s16_BKPSRAM(RTC_BKP0);printf("%x\r\n",res);Write_s16_BKPSRAM(RTC_BKP0,0X3F);}
在系统重启后,赋值的BKP0值不应该变化,表示配置成功.