打印
[STM32F1]

如何写保护?

[复制链接]
977|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);   

使用特权

评论回复
5
dingy| | 2020-10-13 23:53 | 只看该作者
用JLINK自带的烧写软件加密;

使用特权

评论回复
6
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

使用特权

评论回复
7
liuzaiy| | 2020-10-14 19:53 | 只看该作者

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

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

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

使用特权

评论回复
8
supernan|  楼主 | 2020-10-14 19:57 | 只看该作者
你这不 是 stm32f1xx_hal_flash_ex.h 这个里面定义的吧?

使用特权

评论回复
9
supernan|  楼主 | 2020-10-14 20:01 | 只看该作者
文件里,没搜到你给的这几个呢?

使用特权

评论回复
10
hanwe| | 2020-10-14 20:04 | 只看该作者
这个是需要自己实现。
你用图形化的cubeMX工具看看那几个引脚可以设置成其他功能不。

使用特权

评论回复
11
supernan|  楼主 | 2020-10-14 20:08 | 只看该作者
刚接触STM32,还没入门。折腾不了这么高端的东西。

使用特权

评论回复
12
happy_10| | 2020-10-14 20:15 | 只看该作者
防止STM32再次烧写,你有什么妙招么?

使用特权

评论回复
13
supernan|  楼主 | 2020-10-14 20:18 | 只看该作者
普通烧写烧写,破译工具烧写、芯片引脚搭接烧写等高难度的暂不考虑

使用特权

评论回复
14
renyaq| | 2020-10-14 20:22 | 只看该作者
就是用来别人改不了程序?

使用特权

评论回复
15
zyf部长| | 2020-10-14 20:26 | 只看该作者
如果只是怕别人误操作下程序啥的,flash loader 下程序的时候里面有个写保护,点了就可以了。

使用特权

评论回复
16
supernan|  楼主 | 2020-10-14 20:30 | 只看该作者
对,就是防止他人修改程序……但我的代码,目前只能达到 重新烧写时 提示有写保护,但依然可以烧写……

使用特权

评论回复
17
supernan|  楼主 | 2020-10-14 20:34 | 只看该作者
如何禁止STM32再烧写……我期望达到的是不能直接再次烧写

使用特权

评论回复
18
bqyj| | 2020-10-14 20:38 | 只看该作者
F1系列是个例外,它不支持2级保护。若二级保护后不再支持后续的调试接口的烧写或编程了。

使用特权

评论回复
19
tian111| | 2020-10-14 20:42 | 只看该作者
F1系列虽不支持2级保护,但你读保护后想再编程,里面代码是会被清除的。

使用特权

评论回复
20
supernan|  楼主 | 2020-10-14 20:49 | 只看该作者
对,我就是想达到:不再烧写或编程。

使用特权

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

本版积分规则

730

主题

10412

帖子

6

粉丝