[STM32F1]

STM32F105RB如何写保护?

[复制链接]
1742|15
手机看帖
扫描二维码
随时随地手机跟帖
dabendan001|  楼主 | 2018-12-25 09:17 | 显示全部楼层 |阅读模式
本帖最后由 dabendan001 于 2018-12-25 10:02 编辑

使用的是HAL库,参照论坛里的方法,添加读保护、写保护代码。在j-link烧写时,提示 有读保护 或 写保护。但 依然可以烧写。
在STM32F4系列的说明手册里,有提到 写保护。OB_RDP_LEVEL_2。该级别,完全禁止。但这个常数在F1系列的标准库里没有定义(F1库里只有LEVEL_0和LEVEL_1),我参照这个值定义到代码里,似乎不起作用。

请问各位,是如何禁止 F1系列再次烧写的?谢谢。
---------------------我的代码-------------------------------
/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;
                }

xuanhuanzi| | 2018-12-25 09:33 | 显示全部楼层
标准库是
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);   

使用特权

评论回复
mmuuss586| | 2018-12-25 09:33 | 显示全部楼层
用JLINK自带的烧写软件加密;

使用特权

评论回复
xuanhuanzi| | 2018-12-25 09:33 | 显示全部楼层
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

使用特权

评论回复
xuanhuanzi| | 2018-12-25 09:37 | 显示全部楼层
产生的副作用
在禁用掉相应的接口方式后,即不能再使用这种方式下载程序了。因此会出现很多人遇到的:“”RAM check failed at :“”或者“NO M-Cortex”.

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

如果只禁用的JTAG,可以用SWD模式下载程序进去。

使用特权

评论回复
dabendan001|  楼主 | 2018-12-25 10:11 | 显示全部楼层
xuanhuanzi 发表于 2018-12-25 09:33
HAL库是

    __HAL_RCC_AFIO_CLK_ENABLE();

大神,你这不 是 stm32f1xx_hal_flash_ex.h 这个里面定义的吧?我的这个文件里,没搜到你给的这几个呢?

使用特权

评论回复
xuanhuanzi| | 2018-12-25 11:30 | 显示全部楼层
这个是需要自己实现。
你用图形化的cubeMX工具看看那几个引脚可以设置成其他功能不。

使用特权

评论回复
dabendan001|  楼主 | 2018-12-25 13:19 | 显示全部楼层
xuanhuanzi 发表于 2018-12-25 11:30
这个是需要自己实现。
你用图形化的cubeMX工具看看那几个引脚可以设置成其他功能不。 ...

刚接触STM32,还没入门。折腾不了这么高端的东西。

使用特权

评论回复
dabendan001|  楼主 | 2018-12-25 13:43 | 显示全部楼层
xuanhuanzi 发表于 2018-12-25 11:30
这个是需要自己实现。
你用图形化的cubeMX工具看看那几个引脚可以设置成其他功能不。 ...

大神,防止STM32再次烧写,你有什么妙招么?(普通烧写烧写,破译工具烧写、芯片引脚搭接烧写等高难度的暂不考虑)

使用特权

评论回复
stm32xiaobai| | 2018-12-25 16:54 | 显示全部楼层
就是用来别人改不了程序?如果只是怕别人误操作下程序啥的,flash loader 下程序的时候里面有个写保护,点了就可以了。

使用特权

评论回复
dabendan001|  楼主 | 2018-12-26 16:10 | 显示全部楼层
本帖最后由 dabendan001 于 2018-12-26 17:16 编辑
stm32xiaobai 发表于 2018-12-25 16:54
就是用来别人改不了程序?如果只是怕别人误操作下程序啥的,flash loader 下程序的时候里面有个写保护,点 ...

对,就是防止他人修改程序……但我的代码,目前只能达到 重新烧写时 提示有写保护,但依然可以烧写……
想请教一下大家,如何禁止STM32再烧写……(我期望达到的是不能直接再次烧写)

使用特权

评论回复
香水城| | 2018-12-26 22:03 | 显示全部楼层
F1系列是个例外,它不支持2级保护。若二级保护后不再支持后续的调试接口的烧写或编程了。
F1系列虽不支持2级保护,但你读保护后想再编程,里面代码是会被清除的。

使用特权

评论回复
dsyq| | 2018-12-27 12:49 | 显示全部楼层
学习

使用特权

评论回复
dabendan001|  楼主 | 2018-12-27 18:21 | 显示全部楼层
香水城 发表于 2018-12-26 22:03
F1系列是个例外,它不支持2级保护。若二级保护后不再支持后续的调试接口的烧写或编程了。
F1系列虽不支持2 ...

对,我就是想达到:不再烧写或编程。

F1系列,不支持,是不?还是可以通过某种途径开启?

使用特权

评论回复
观海| | 2019-1-3 10:18 | 显示全部楼层
写保护的话 后续维护怎么做呢

使用特权

评论回复
labasi| | 2019-1-3 11:33 | 显示全部楼层
学习学习 顺便帮楼主顶一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

41

帖子

0

粉丝