[STM32F1] 如何写保护?

[复制链接]
1225|22
 楼主| supernan 发表于 2020-10-13 23:36 | 显示全部楼层 |阅读模式
STM32F105RB,使用的是HAL库,参照论坛里的方法,添加读保护、写保护代码。在j-link烧写时,提示 有读保护 或 写保护。但 依然可以烧写。
在STM32F4系列的说明手册里,有提到 写保护。OB_RDP_LEVEL_2。该级别,完全禁止。但这个常数在F1系列的标准库里没有定义(F1库里只有LEVEL_0和LEVEL_1),我参照这个值定义到代码里,似乎不起作用。

请问各位,是如何禁止 F1系列再次烧写的?
wenfen 发表于 2020-10-13 23:40 | 显示全部楼层

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因
 楼主| supernan 发表于 2020-10-13 23:44 | 显示全部楼层
/OB_RDP_LEVEL_2,在标准库里没有。我参照STM32F4的库,搬过来的。#define OB_RDP_LEVEL_2    ((uint8_t)0xCC)(~病急乱投医)。
//开启写保护,即:禁止写入;
                OptionsBytesStruct.OptionType         = OPTIONBYTE_WRP;
                OptionsBytesStruct.WRPState           = OB_WRPSTATE_ENABLE;
                OptionsBytesStruct.WRPPage            = FLASH_PAGE_TO_BE_PROTECTED;
                OptionsBytesStruct.RDPLevel                = OB_RDP_LEVEL_2;    //   OB_RDP_LEVEL_1
                if(HAL_FLASHEx_OBProgram(&OptionsBytesStruct) != HAL_OK)
                {
                        return 1;
                }
zwll 发表于 2020-10-13 23:49 | 显示全部楼层
标准库是
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOF, ENABLE);  //使能相应接口的时钟,以及RCC_APB2Periph_AFIO

GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);//完全禁用SWD及JTAG
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);   
dingy 发表于 2020-10-13 23:53 | 显示全部楼层
用JLINK自带的烧写软件加密;
liuzaiy 发表于 2020-10-13 23:56 | 显示全部楼层
HAL库是

    __HAL_RCC_AFIO_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();             //
    __HAL_RCC_GPIOF_CLK_ENABLE();               //


/* JTAG-DP Disabled and SW-DP Disabled */
  __HAL_AFIO_REMAP_SWJ_DISABLE();           //完全禁用SWD及JTAG
    __HAL_AFIO_REMAP_SWJ_NOJTAG();              //禁用JTAG
liuzaiy 发表于 2020-10-14 19:53 | 显示全部楼层

产生的副作用
在禁用掉相应的接口方式后,即不能再使用这种方式下载程序了。因此会出现很多人遇到的:“”RAM check failed at :“”或者“NO M-Cortex”.

遇到这个状况,需要再次下载程序,有如下三种办法:

如果只禁用的JTAG,可以用SWD模式下载程序进去。
 楼主| supernan 发表于 2020-10-14 19:57 | 显示全部楼层
你这不 是 stm32f1xx_hal_flash_ex.h 这个里面定义的吧?
 楼主| supernan 发表于 2020-10-14 20:01 | 显示全部楼层
文件里,没搜到你给的这几个呢?
hanwe 发表于 2020-10-14 20:04 | 显示全部楼层
这个是需要自己实现。
你用图形化的cubeMX工具看看那几个引脚可以设置成其他功能不。
 楼主| supernan 发表于 2020-10-14 20:08 | 显示全部楼层
刚接触STM32,还没入门。折腾不了这么高端的东西。
happy_10 发表于 2020-10-14 20:15 | 显示全部楼层
防止STM32再次烧写,你有什么妙招么?
 楼主| supernan 发表于 2020-10-14 20:18 | 显示全部楼层
普通烧写烧写,破译工具烧写、芯片引脚搭接烧写等高难度的暂不考虑
renyaq 发表于 2020-10-14 20:22 | 显示全部楼层
就是用来别人改不了程序?
zyf部长 发表于 2020-10-14 20:26 | 显示全部楼层
如果只是怕别人误操作下程序啥的,flash loader 下程序的时候里面有个写保护,点了就可以了。
 楼主| supernan 发表于 2020-10-14 20:30 | 显示全部楼层
对,就是防止他人修改程序……但我的代码,目前只能达到 重新烧写时 提示有写保护,但依然可以烧写……
 楼主| supernan 发表于 2020-10-14 20:34 | 显示全部楼层
如何禁止STM32再烧写……我期望达到的是不能直接再次烧写
bqyj 发表于 2020-10-14 20:38 | 显示全部楼层
F1系列是个例外,它不支持2级保护。若二级保护后不再支持后续的调试接口的烧写或编程了。
tian111 发表于 2020-10-14 20:42 | 显示全部楼层
F1系列虽不支持2级保护,但你读保护后想再编程,里面代码是会被清除的。
 楼主| supernan 发表于 2020-10-14 20:49 | 显示全部楼层
对,我就是想达到:不再烧写或编程。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

730

主题

10412

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部