/** ****************************************************************************** * @file flash_read_protection.c * @author Damon * @version V1.0 * @date 2018/7/11 * @brief flash读保护 ****************************************************************************** * @attention * 支持stm32f103xxx * 本功能模块为内部flash使能读保护功能,防止外部非法读取flash。读保护不影响内部总线操作flash,bootloader升级可正常进行。 * * 添加此模块时注意: * 1、在stm32f1xx_hal_conf.h 文件中打开宏定义 #define HAL_FLASH_MODULE_ENABLED ; * 2、在Drivers/STM32F1xx_HAL_Driver组中添加文件 stm32f1xx_hal_flash.c、stm32f1xx_hal_flash_ex.c; * 3、将文件flash_read_protection.c添加到工程中; * 4、在主循环前调用函数Flash_ReadProtection(void); ****************************************************************************** */ #include "flash_read_protection.h" /****************************************************************************** * @Function: void Flash_ReadProtection(void) * @Discrible: flash读保护使能 * @Param: * @Return: * @Others: 此函数执行,如果flash读保护未使能,则使能读保护 ****************************************************************************** * @Recode date version author modify * ------------------------------------------------------------------ * 20180711 V1.0 Damon Create * *******************************************************************************/ void Flash_ReadProtection(void) { /*配置参数到结构体*/ FLASH_OBProgramInitTypeDef OBInit; OBInit.OptionType = OPTIONBYTE_RDP; //读保护 OBInit.RDPLevel = OB_RDP_LEVEL_1; //level0:无保护,level1:一级读保护,可软件恢复 /*读取选项字寄存器标志位,如果没有使能Flash读保护*/ if( READ_BIT(FLASH->OBR, FLASH_OBR_RDPRT) != FLASH_OBR_RDPRT) { /*解锁flash相关寄存器*/ HAL_FLASH_Unlock(); /*解锁选项字寄存器*/ HAL_FLASH_OB_Unlock(); /*写参数到选项字寄存器*/ HAL_FLASHEx_OBProgram(&OBInit); HAL_FLASH_OB_Lock(); HAL_FLASH_Lock(); } }