flash_read_protection.c 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /**
  2. ******************************************************************************
  3. * @file flash_read_protection.c
  4. * @author Damon
  5. * @version V1.0
  6. * @date 2018/7/11
  7. * @brief flash读保护
  8. ******************************************************************************
  9. * @attention
  10. * 支持stm32f103xxx
  11. * 本功能模块为内部flash使能读保护功能,防止外部非法读取flash。读保护不影响内部总线操作flash,bootloader升级可正常进行。
  12. *
  13. * 添加此模块时注意:
  14. * 1、在stm32f1xx_hal_conf.h 文件中打开宏定义 #define HAL_FLASH_MODULE_ENABLED ;
  15. * 2、在Drivers/STM32F1xx_HAL_Driver组中添加文件 stm32f1xx_hal_flash.c、stm32f1xx_hal_flash_ex.c;
  16. * 3、将文件flash_read_protection.c添加到工程中;
  17. * 4、在主循环前调用函数Flash_ReadProtection(void);
  18. ******************************************************************************
  19. */
  20. #include "flash_read_protection.h"
  21. /******************************************************************************
  22. * @Function: void Flash_ReadProtection(void)
  23. * @Discrible: flash读保护使能
  24. * @Param:
  25. * @Return:
  26. * @Others: 此函数执行,如果flash读保护未使能,则使能读保护
  27. ******************************************************************************
  28. * @Recode date version author modify
  29. * ------------------------------------------------------------------
  30. * 20180711 V1.0 Damon Create
  31. *
  32. *******************************************************************************/
  33. void Flash_ReadProtection(void)
  34. {
  35. /*配置参数到结构体*/
  36. FLASH_OBProgramInitTypeDef OBInit;
  37. OBInit.OptionType = OPTIONBYTE_RDP; //读保护
  38. OBInit.RDPLevel = OB_RDP_LEVEL_1; //level0:无保护,level1:一级读保护,可软件恢复
  39. /*读取选项字寄存器标志位,如果没有使能Flash读保护*/
  40. if( READ_BIT(FLASH->OBR, FLASH_OBR_RDPRT) != FLASH_OBR_RDPRT)
  41. {
  42. /*解锁flash相关寄存器*/
  43. HAL_FLASH_Unlock();
  44. /*解锁选项字寄存器*/
  45. HAL_FLASH_OB_Unlock();
  46. /*写参数到选项字寄存器*/
  47. HAL_FLASHEx_OBProgram(&OBInit);
  48. HAL_FLASH_OB_Lock();
  49. HAL_FLASH_Lock();
  50. }
  51. }