STM32---备份寄存器BKP和 FLASH学习使用

 BKP库函数

学习BKP,首先就是知道BKP每一个函数的作用然后如何使用即可 

使用备份域的作用只需要操作上面的两个函数即可,其余的都是它的其他功能 

 BKP简介


备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据。他们处在备份域里,当VDD电源被切断,他们仍然由VBAT维持供电(但是如果VDD和VBAT都没有电源的话,那么备份域的数据就会丢失,并且在VDD电源存在时,VBAT不会供电,为了省电,因为一般VBAT使用的是纽扣电池)。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位。


此外, BKP控制寄存器用来管理侵入检测和RTC校准功能

侵入检测事件将所有数据备份寄存器内容清除

复位后,对备份寄存器和RTC的访问被禁止,并且备份域被保护以防止可能存在的意外的写操作。执行以下操作可以使能对备份寄存器和RTC的访问。
● 通过设置寄存器RCC_APB1ENR的PWREN和BKPEN位来打开电源和后备接口的时钟
● 电源控制寄存器(PWR_CR)的DBP位来使能对后备寄存器和RTC的访问

//先进行RCC操作
    /* Enable PWR(电源控制) and BKP clock */   
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);

    /* Enable write access to Backup domain */    
    PWR_BackupAccessCmd(ENABLE);

    /* Clear Tamper pin Event(TE) pending flag */   
    BKP_ClearFlag();  //这个可要可不要

 FLASH库函数

FLAHS常见的操作:人为擦除程序、人为输入程序 

个人觉得看HAL库的函数即可,标准库的函数写的太复杂,还是HAL库开发更快一点

人为装入代码操作

场景:从指定地址开始写入指定长度的32Bit数据 

先解锁FLASH,再循环写入数据从起始地址(数据分一个字节还是两个字节),一次只能装一个字节或者两个字节(基于自己选择的函数来定),然后我们一般不会只写一个字节或者两个字节而是会写很多数据,因此我们需要人为的加减地址

/*-------------------------------------------------*/
/*函数名:从指定地址开始写入指定长度的64it数据    */
/*参  数:WriteAddr:写入地址                      */
/*参  数:pBuffer:写入的数据                      */
/*参  数:NumToWrite:写入的数据长度               */
/*返回值:0 正确 非零 错误                         */
/*-------------------------------------------------*/
uint8_t Stm32Flash_Write(uint32_t WriteAddr, uint64_t *pBuffer,uint32_t NumToWrite)	
{ 
    HAL_FLASH_Unlock();                                                                             //解锁
	while(NumToWrite)
        {
        //循环写入数据
		if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, WriteAddr, *pBuffer) != HAL_OK){        //一次写入8字节数据,并判断是否写入正确,如果错误进入if
			HAL_FLASH_Lock();                                                                       //上锁
			return 1;	                                                                            //返回1
		}
		WriteAddr += 8;                                                                             //写入正确的话,地址下移8个字节                        
		pBuffer++;                                                                                  //数据下移8个字节,接着往后写入数据 
		NumToWrite -=8;                                                                             //待写入数据量-8字节                   		
	} 
	HAL_FLASH_Lock();                                                                               //上锁
	return 0;                                                                                       //正确,返回0
}

//上面的函数是基于HAL库的,而且HAL库的函数更加简洁,标准库写的太复杂,不太推荐使用标准库开发
//HAL库能轻松的解决,而标准库需要好几个函数一起配合才能解决问题

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值