第51章     设置FLASH的读写保护及解除

全套200集视频教程和1000PDF教程请到秉火论坛下载:www.firebbs.cn

野火视频教程优酷观看网址:http://i.youku.com/firege

 

 

 

本章参考资料:《STM32F4xx 中文参考手册》、《STM32F4xx规格书》、库说明文档《stm32f4xx_dsp_stdperiph_lib_um.chm》以及《Proprietary code read-out protection on microcontrollers》。

51.1 选项字节与读写保护

在实际发布的产品中,在STM32芯片的内部FLASH存储了控制程序,如果不作任何保护措施的话,可以使用下载器直接把内部FLASH的内容读取回来,得到binhex文件格式的代码拷贝,别有用心的厂商即可利用该代码文件山寨产品。为此,STM32芯片提供了多种方式保护内部FLASH的程序不被非法读取,但在默认情况下该保护功能是不开启的,若要开启该功能,需要改写内部FLASH选项字节(Option Bytes)中的配置。

51.1.1 选项字节的内容

选项字节是一段特殊的FLASH空间,STM32芯片会根据它的内容进行读写保护、复位电压等配置,选项字节的构成见表 511

511 选项字节的构成

地址

[63:16]

[15:0]

0x1FFF C000

保留

ROP 和用户选项字节 (RDP & USER)

0x1FFF C008

保留

扇区 0 11 的写保护 nWRP

0x1FFE C000

保留

保留

0x1FFE C008

保留

扇区 12 23 的写保护 nWRP

选项字节具体的数据位配置说明见表 512

512 选项字节具体的数据位配置说明

选项字节(字,地址 0x1FFF C000

RDP读保护选项字节。
读保护用于保护 Flash 中存储的软件代码。

15:8

0xAA:级别 0,无保护
其它值:级别 1,存储器读保护(调试功能受限)
0xCC
:级别 2,芯片保护(禁止调试和从 RAM 启动)

USER用户选项字节
此字节用于配置以下功能:
选择看门狗事件:硬件或软件
进入停止模式时产生复位事件
进入待机模式时产生复位事件

7

nRST_STDBY
0
:进入待机模式时产生复位
1
:不产生复位

6

nRST_STOP
0
:进入停止模式时产生复位
1
:不产生复位

5

WDG_SW
0
:硬件看门狗
1
:软件看门狗

4

0x1:未使用

3:2

BOR_LEV BOR 复位级别
这些位包含释放复位信号所需达到的供电电压阈值。
通过对这些位执行写操作,可将新的 BOR 级别值编程到 Flash
00
BOR 级别 3 (VBOR3),复位阈值电压为 2.70 V 3.60 V
01
BOR 级别 2 (VBOR2),复位阈值电压为 2.40 V 2.70 V
10
BOR 级别 1 (VBOR1),复位阈值电压为 2.10 V 2.40 V
11
BOR 关闭 (VBOR0),复位阈值电压为 1.8 V 2.10 V

1:0

0x1:未使用

选项字节(字,地址 0x1FFF C008

15

SPMOD:选择nWPRi位的模式
0
nWPRi位用于写保护(默认)
1
nWPRi位用于代码读出保护(Proprietary code readout protection PCROP)

14

DB1M:设置内部FLASH1MB的产品的双Bank模式
0
:单个Bank的模式
1
:使用两个Bank的模式

13:12

0xF:未使用

nWRP Flash 写保护选项字节。
扇区 0 11 可采用写保护。

11:0

nWRPi (i值为0-11,对应0-11扇区的保护设置)
0
:开启所选扇区的写保护
1
:关闭所选扇区的写保护

选项字节(字,地址 0x1FFE C000

15:0

0xFF:未使用

选项字节(字,地址 0x1FFE C008

15:12

0xF:未使用

nWRP Flash 写保护选项字节。
扇区 12 23 可采用写保护。

11:0

nWRPi
0
:开启扇区 i 的写保护。
1
:关闭扇区 i 的写保护。

我们主要讲解选项字节配置中的RDP位和PCROP位,它们分别用于配置读保护级别及代码读出保护。

51.1.2 RDP读保护级别

修改选项字节的RDP位的值可设置内部FLASH为以下保护级别:

    0xAA:级别0,无保护

这是STM32的默认保护级别,它没有任何读保护,读取内部FLASH及"备份SRAM"的内容都没有任何限制。(注意这里说的"备份SRAM"是指STM32备份域的SRAM空间,不是指主SRAM,下同)

    其它值:级别1,使能读保护

RDP配置成除0xAA0xCC外的任意数值,都会使能级别1的读保护。在这种保护下,若使用调试功能(使用下载器、仿真器)或者从内部SRAM自举时都不能对内部FLASH及备份SRAM作任何访问(读写、擦除都被禁止);而如果STM32是从内部FLASH自举时,它允许对内部FLASH及备份SRAM的任意访问。

也就是说,在级别1模式下,任何尝试从外部访问内部FLASH内容的操作都被禁止,例如无法通过下载器读取它的内容,或编写一个从内部SRAM启动的程序,若该程序读取内部FLASH,会被禁止。而如果是芯片自己访问内部FLASH,是完全没有问题的,例如前面的"读写内部FLASH"实验中的代码自己擦写内部FLASH空间的内容,即使处于级别1的读保护,也能正常擦写。

当芯片处于级别1的时候,可以把选项字节的RDP位重新设置为0xAA,恢复级别0。在恢复到级别0前,芯片会自动擦除内部FLASH及备份SRAM的内容,即降级后原内部FLASH的代码会丢失。在级别1时使用SRAM自举的程序也可以访问选项字节进行修改,所以如果原内部FLASH的代码没有解除读保护的操作时,可以给它加载一个SRAM自举的程序进行保护降级,后面我们将会进行这样的实验。

    0xCC:级别2,禁止调试

RDP配置成0xCC值时,会进入最高级别的读保护,且设置后无法再降级,它会永久禁止用于调试的JTAG接口(相当于熔断)。在该级别中,除了具有级别1的所有保护功能外,进一步禁止了从SRAM或系统存储器的自举(即平时使用的串口ISP下载功能也失效)JTAG调试相关的功能被禁止,选项字节也不能被修改。它仅支持从内部FLASH自举时对内部FLASHSRAM的访问(读写、擦除)

由于设置了级别2后无法降级,也无法通过JTAG、串口ISP等方式更新程序,所以使用这个级别的保护时一般会在程序中预留"后门"以更新应用程序,若程序中没有预留后门,芯片就无法再更新应用程序了。所谓的"后门"是一种IAP程序(In Application Program),它通过某个通讯接口获取将要更新的程序内容,然后利用内部FLASH擦写操作把这些内容烧录到自己的内部FLASH中,实现应用程序的更新。

不同级别下的访问限制见图 511

511 不同级别下的访问限制

不同保护级别之间的状态转换见图 512

512 不同级别间的状态转换

51.1.3 PCROP代码读出保护

STM32F42xxSTM32F43xx系列的芯片中,除了可使用RDP对整片FLASH进行读保护外,还有一个专用的代码读出保护功能(Proprietary code readout protection,下面简称PCROP),它可以为内部FLASH的某几个指定扇区提供保护功能,所以它可以用于保护一些IP代码,方便提供给另一方进行二次开发,见图 513

513 PCROP保护功能

SPMOD位设置为0(默认值)nWRPi位用于指定要进行写保护的扇区,这可以防止错误的指针操作导致FLASH 内容的改变,若扇区被写保护,通过调试器也无法擦除该扇区的内容;当SPMOD位设置为1时,nWRPi位用于指定要进行PCROP保护的扇区。其中PCROP功能可以防止指定扇区的FLASH内容被读出,而写保护仅可以防止误写操作,不能被防止读出。

当要关闭PCROP功能时,必须要使芯片从读保护级别1降为级别0,同时对SPMOD位置0,才能正常关闭;若芯片原来的读保护为级别0,且使能了PCROP保护,要关闭PCROP时也要先把读保护级别设置为级别1,再在降级的同时设置SPMOD0

51.2 修改选项字节的过程

修改选项字节的内容可修改各种配置,但是,当应用程序运行时,无法直接通过选项字节的地址改写它们的内容,例如,接使用指针操作地址0x1FFFC0000的修改是无效的。要改写其内容时必须设置寄存器FLASH_OPTCRFLASH_OPTCR1中的对应数据位,寄存器的与选项字节对应位置见图 514及图 515,详细说明请查阅《STM32参考手册》。

514 FLASH_OPTCR寄存器说明(nWRP表示0-11扇区)

515 FLASH_OPTCR1寄存器说明(nWRP表示12-23扇区)

默认情况下,FLASH_OPTCR寄存器中的第0OPTLOCK值为1,它表示选项字节被上锁,需要解锁后才能进行修改,当寄存器的值设置完成后,对FLASH_OPTCR寄存器中的第1OPTSTRT值设置为1,硬件就会擦除选项字节扇区的内容,并把FLASH_OPTCR/1寄存器中包含的值写入到选项字节。

所以,修改选项字节的配置步骤如下:

(1)    解锁,在 Flash 选项密钥寄存器 (FLASH_OPTKEYR) 中写入 OPTKEY1 = 0x0819 2A3B;接着在 Flash 选项密钥寄存器 (FLASH_OPTKEYR) 中写入 OPTKEY2 = 0x4C5D 6E7F。

(2)    检查 FLASH_SR 寄存器中的 BSY 位,以确认当前未执行其它Flash 操作。

(3)    在 FLASH_OPTCR 和/或 FLASH_OPTCR1 寄存器中写入选项字节值。

(4)    将 FLASH_OPTCR 寄存器中的选项启动位 (OPTSTRT) 置 1。

(5)    等待 BSY 位清零,即写入完成。

51.3 操作选项字节的库函数

为简化编程,STM32标准库提供了一些库函数,它们封装了修改选项字节时操作寄存器的过程。

1.    选项字节解锁、上锁函数

对选项字节解锁、上锁的函数见代码清单 511

代码清单 511选项字节解锁、上锁

1

2 #define FLASH_OPT_KEY1 ((uint32_t)0x08192A3B)

3 #define FLASH_OPT_KEY2 ((uint32_t)0x4C5D6E7F)

4

5 /**

6 * @brief Unlocks the FLASH Option Control Registers access.

7 * @param None

8 * @retval None

9 */

10 void FLASH_OB_Unlock(void)

11 {

12 if((FLASH->OPTCR & FLASH_OPTCR_OPTLOCK) != RESET)

13 {

14 /* Authorizes the Option Byte register programming */

15 FLASH->OPTKEYR = FLASH_OPT_KEY1;

16 FLASH->OPTKEYR = FLASH_OPT_KEY2;

17 }

18 }

19

20 /**

21 * @brief Locks the FLASH Option Control Registers access.

22 * @param None

23 * @retval None

24 */

25 void FLASH_OB_Lock(void)

26 {

27 /* Set the OPTLOCK Bit to lock the FLASH Option Byte Registers access */

28 FLASH->OPTCR |= FLASH_OPTCR_OPTLOCK;

29 }

解锁的时候,它对FLASH_OPTCR寄存器写入两个解锁参数,上锁的时候,对FLASH_ OPTCR寄存器的FLASH_OPTCR_OPTLOCK位置1

2.    设置读保护级别

解锁后设置选项字节寄存器的RDP位可调用FLASH_OB_RDPConfig完成,见代码清单 512

代码清单 512 设置读保护级别

1 /**

2 * @brief Sets the read protection level.

3 * @param OB_RDP: specifies the read protection level.

4 * This parameter can be one of the following values:

5 * @arg OB_RDP_Level_0: No protection

6 * @arg OB_RDP_Level_1: Read protection of the memory

7 * @arg OB_RDP_Level_2: Full chip protection

8 *

9 * /!\ Warning /!\ When enabling OB_RDP level 2 it's no more possible to go back to level 1 or 0

10 *

11 * @retval None

12 */

13 void FLASH_OB_RDPConfig(uint8_t OB_RDP)

14 {

15 FLASH_Status status = FLASH_COMPLETE;

16

17 /* Check the parameters */

18 assert_param(IS_OB_RDP(OB_RDP));

19

20 status = FLASH_WaitForLastOperation();

21

22 if(status == FLASH_COMPLETE)

23 {

24 *(__IO uint8_t*)OPTCR_BYTE1_ADDRESS = OB_RDP;

25

26 }

27 }

该函数根据输入参数设置RDP寄存器位为相应的级别,其注释警告了若配置成OB_RDP_Level_2会无法恢复。类似地,配置其它选项时也有相应的库函数,如FLASH_OB_PCROP1ConfigFLASH_OB_WRP1Config分别用于设置要进行PCROP保护或WRP保护(写保护)的扇区。

3.    写入选项字节

调用上一步骤中的函数配置寄存器后,还要调用代码清单 513中的FLASH_OB_Launch函数把寄存器的内容写入到选项字节中。

代码清单 513 写入选项字节

1 /**

2 * @brief Launch the option byte loading.

3 * @param None

4* @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM,

5 * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE.

6 */

7 FLASH_Status FLASH_OB_Launch(void)

8 {

9 FLASH_Status status = FLASH_COMPLETE;

10

11 /* Set the OPTSTRT bit in OPTCR register */

12 *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS |= FLASH_OPTCR_OPTSTRT;

13

14 /* Wait for last operation to be completed */

15 status = FLASH_WaitForLastOperation();

16

17 return status;

18 }

该函数设置FLASH_OPTCR_OPTSTRT位后调用了FLASH_WaitForLastOperation函数等待写入完成,并返回写入状态,若操作正常,它会返回FLASH_COMPLETE

51.4 实验:设置读写保护及解除

在本实验中我们将以实例讲解如何修改选项字节的配置,更改读保护级别、设置PCROP或写保护,最后把选项字节恢复默认值。

本实验要进行的操作比较特殊,在开发和调试的过程中都是在SRAM上进行的(使用SRAM启动方式)。例如,直接使用FLASH版本的程序进行调试时,如果该程序在运行后对扇区进行了写保护而没有解除的操作或者该解除操作不正常,此时将无法再给芯片的内部FLASH下载新程序,最终还是要使用SRAM自举的方式进行解除操作。所以在本实验中为便于修改选项字节的参数,我们统一使用SRAM版本的程序进行开发和学习,当SRAM版本调试正常后再改为FLASH版本。

关于在SRAM中调试代码的相关配置,请参考前面的章节。

注意:

若您在学习的过程中想亲自修改代码进行测试,请注意备份原工程代码。当芯片的FLASH被保护导致无法下载程序到FLASH时,可以下载本工程到芯片,并使用SRAM启动运行,即可恢复芯片至默认配置。但如果修改了读保护为级别2,采用任何方法都无法恢复!(除了这个配置,其它选项都可以大胆地修改测试。)

51.4.1 硬件设计

本实验在SRAM中调试代码,因此把BOOT0BOOT1引脚都使用跳线帽连接到3.3V,使芯片从SRAM中启动。

51.4.2 软件设计

本实验的工程名称为"设置读写保护与解除",学习时请打开该工程配合阅读,它是从"RAM调试—多彩流水灯"工程改写而来的。为了方便展示及移植,我们把操作内部FLASH相关的代码都编写到"internalFlash_reset.c"及"internalFlash_reset.h"文件中,这些文件是我们自己编写的,不属于标准库的内容,可根据您的喜好命名文件。

1.    主要实验

(1)    学习配置扇区写保护;

(2)    学习配置PCROP保护;

(3)    学习配置读保护级别;

(4)    学习如何恢复选项字节到默认配置;

2.    代码分析
配置扇区写保护

我们先以代码清单 514中的设置与解除写保护过程来学习如何配置选项字节。

代码清单 514 配置扇区写保护

1

2 #define FLASH_WRP_SECTORS (OB_WRP_Sector_0|OB_WRP_Sector_1)

3 __IO uint32_t SectorsWRPStatus = 0xFFF;

4

5 /**

6 * @brief WriteProtect_Test,普通的写保护配置

7 * @param 运行本函数后会给扇区FLASH_WRP_SECTORS进行写保护,再重复一次会进行解写保护

8 * @retval None

9 */

10 void WriteProtect_Test(void)

11 {

12 FLASH_Status status = FLASH_COMPLETE;

13 {

14 /* 获取扇区的写保护状态 */

15 SectorsWRPStatus = FLASH_OB_GetWRP() & FLASH_WRP_SECTORS;

16

17 if (SectorsWRPStatus == 0x00)

18 {

19 /* 扇区已被写保护,执行解保护过程*/

20

21 /* 使能访问OPTCR寄存器 */

22 FLASH_OB_Unlock();

23

24 /* 设置对应的nWRP位,解除写保护 */

25 FLASH_OB_WRPConfig(FLASH_WRP_SECTORS, DISABLE);

26 status=FLASH_OB_Launch();

27 /* 开始对选项字节进行编程 */

28 if (status != FLASH_COMPLETE)

29 {

30 FLASH_ERROR("对选项字节编程出错,解除写保护失败,status = %x",status);

31 /* User can add here some code to deal with this error */

32 while (1)

33 {

34 }

35 }

36 /* 禁止访问OPTCR寄存器 */

37 FLASH_OB_Lock();

38

39 /* 获取扇区的写保护状态 */

40 SectorsWRPStatus = FLASH_OB_GetWRP() & FLASH_WRP_SECTORS;

41

42 /* 检查是否配置成功 */

43 if (SectorsWRPStatus == FLASH_WRP_SECTORS)

44 {

45 FLASH_INFO("解除写保护成功!");

46 }

47 else

48 {

49 FLASH_ERROR("未解除写保护!");

50 }

51 }

52 else

53 { /* 若扇区未被写保护,开启写保护配置 */

54

55 /* 使能访问OPTCR寄存器 */

56 FLASH_OB_Unlock();

57

58 /*使能 FLASH_WRP_SECTORS 扇区写保护 */

59 FLASH_OB_WRPConfig(FLASH_WRP_SECTORS, ENABLE);

60

61 status=FLASH_OB_Launch();

62 /* 开始对选项字节进行编程 */

63 if (status != FLASH_COMPLETE)

64 {

65 FLASH_ERROR("对选项字节编程出错,设置写保护失败,status = %x",status);

66 while (1)

67 {

68 }

69 }

70 /* 禁止访问OPTCR寄存器 */

71 FLASH_OB_Lock();

72

73 /* 获取扇区的写保护状态 */

74 SectorsWRPStatus = FLASH_OB_GetWRP() & FLASH_WRP_SECTORS;

75

76 /* 检查是否配置成功 */

77 if (SectorsWRPStatus == 0x00)

78 {

79 FLASH_INFO("设置写保护成功!");

80 }

81 else

82 {

83 FLASH_ERROR("设置写保护失败!");

84 }

85 }

86 }

87 }

本函数分成了两个部分,它根据目标扇区的状态进行操作,若原来扇区为非保护状态时就进行写保护,若为保护状态就解除保护。其主要操作过程如下:

    调用FLASH_OB_GetWRP函数获取目标扇区的保护状态若扇区被写保护,则开始解除保护过程,否则开始设置写保护过程;

    调用FLASH_OB_Unlock解锁选项字节的编程;

    调用FLASH_OB_WRPConfig函数配置目标扇区关闭或打开写保护;

    调用FLASH_OB_Launch函数把寄存器的配置写入到选项字节;

    调用FLASH_OB_GetWRP函数检查是否配置成功;

    调用FLASH_OB_Lock禁止修改选项字节。

配置PCROP保护

配置PCROP保护的过程与配置写保护过程稍有区别,见代码清单 515

代码清单 515 配置PCROP保护(internalFlash_reset.c文件)

1

2 /**

3 * @brief SetPCROP,设置PCROP位,用于测试解锁

4 * @note 使用有问题的串口ISP下载软件,可能会导致PCROP位置1

5 导致无法给芯片下载程序到FLASH,本函数用于把PCROP位置1

6 模拟出无法下载程序到FLASH的环境,以便用于解锁的程序调试。

7 若不了解PCROP位的作用,请不要执行此函数!!

8 * @param None

9 * @retval None

10 */

11 void SetPCROP(void)

12 {

13

14 FLASH_Status status = FLASH_COMPLETE;

15

17

18 FLASH_INFO();

19 FLASH_INFO("正在设置PCROP保护,请耐心等待...");

20 //选项字节解锁

21 FLASH_OB_Unlock();

22

23 //设置为PCROP模式

24 FLASH_OB_PCROPSelectionConfig(OB_PcROP_Enable);

25 //设置扇区0进行PCROP保护

26 FLASH_OB_PCROPConfig(OB_PCROP_Sector_10,ENABLE);

27 //把寄存器设置写入到选项字节

28 status =FLASH_OB_Launch();

29

30 if (status != FLASH_COMPLETE)

31 {

32 FLASH_INFO("设置PCROP失败!");

33 }

34 else

35 {

36 FLASH_INFO("设置PCROP成功!");

37

38 }

39 //选项字节上锁

40 FLASH_OB_Lock();

41 }

该代码在解锁选项字节后,调用FLASH_OB_PCROPSelectionConfig函数把SPMOD寄存器位配置为PCROP模式,接着调用FLASH_OB_PCROPConfig函数配置目标保护扇区。

恢复选项字节为默认值

当芯片被设置为读写保护或PCROP保护时,这时给芯片的内部FLASH下载程序时,可能会出现图 516和图 517的擦除FLASH失败的错误提示。

516 擦除失败提示

517 擦除进度条卡在开始状态

只要不是把读保护配置成了级别2保护,都可以使用SRAM启动运行代码清单 516中的函数恢复选项字节为默认状态,使得FLASH下载能正常进行。

代码清单 516 恢复选项字节为默认值

1 // @brief OPTCR register byte 0 (Bits[7:0]) base address

2 #define OPTCR_BYTE0_ADDRESS ((uint32_t)0x40023C14)

3 //@brief OPTCR register byte 1 (Bits[15:8]) base address

4 #define OPTCR_BYTE1_ADDRESS ((uint32_t)0x40023C15)

5 //@brief OPTCR register byte 2 (Bits[23:16]) base address

6 #define OPTCR_BYTE2_ADDRESS ((uint32_t)0x40023C16)

7 // @brief OPTCR register byte 3 (Bits[31:24]) base address

8 #define OPTCR_BYTE3_ADDRESS ((uint32_t)0x40023C17)

9 // @brief OPTCR1 register byte 0 (Bits[7:0]) base address

10 #define OPTCR1_BYTE2_ADDRESS ((uint32_t)0x40023C1A)

11

12 /**

13 * @brief InternalFlash_Reset,恢复内部FLASH的默认配置

14 * @param None

15 * @retval None

16 */

17 int InternalFlash_Reset(void)

18 {

19 FLASH_Status status = FLASH_COMPLETE;

20

21 /* 使能访问选项字节寄存器 */

22 FLASH_OB_Unlock();

23

24 /* 擦除用户区域 (用户区域指程序本身没有使用的空间,可以自定义)**/

25 /* 清除各种FLASH的标志位 */

26 FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR |

27 FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR);

28

29 FLASH_INFO("\r\n");

30 FLASH_INFO("正在准备恢复的条件,请耐心等待...");

31

32 //确保把读保护级别设置为LEVEL1,以便恢复PCROP寄存器位

33 //PCROP寄存器位从设置为0时,必须是读保护级别由LEVEL1转为LEVEL0时才有效,

34 //否则修改无效

35 FLASH_OB_RDPConfig(OB_RDP_Level_1);

36

37 status=FLASH_OB_Launch();

38

39 status = FLASH_WaitForLastOperation();

40

41 //设置为LEVEL0并恢复PCROP

42

43 FLASH_INFO("\r\n");

44 FLASH_INFO("正在擦除内部FLASH的内容,请耐心等待...");

45

46 //关闭PCROP模式

47 FLASH_OB_PCROPSelectionConfig(OB_PcROP_Disable);

48 FLASH_OB_RDPConfig(OB_RDP_Level_0);

49

50 status =FLASH_OB_Launch();

51

52 //设置其它位为默认值

53 (*(__IO uint32_t *)(OPTCR_BYTE0_ADDRESS))=0x0FFFAAE9;

54 (*(__IO uint16_t *)(OPTCR1_BYTE2_ADDRESS))=0x0FFF;

55 status =FLASH_OB_Launch();

56 if (status != FLASH_COMPLETE)

57 {

58 FLASH_ERROR("恢复选项字节默认值失败,错误代码:status=%X",status);

59 }

60 else

61 {

62 FLASH_INFO("恢复选项字节默认值成功!");

63 }

64 //禁止访问

65 FLASH_OB_Lock();

66

67 return status;

68 }

这个函数进行了如下操作:

    调用FLASH_OB_Unlock解锁选项字节的编程;

    调用FLASH_ClearFlag函数清除所有FLASH异常状态标志;

    调用FLASH_OB_RDPConfig函数设置为读保护级别1,以便后面能正常关闭PCROP模式;

    调用FLASH_OB_Launch写入选项字节并等待读保护级别设置完毕;

    调用FLASH_OB_PCROPSelectionConfig函数关闭PCROP模式;

    调用FLASH_OB_RDPConfig函数把读保护级别降为0;

    调用FLASH_OB_Launch定稿选项字节并等待降级完毕,由于这个过程需要擦除内部FLASH的内容,等待的时间会比较长;

    直接操作寄存器,使用"(*(__IO uint32_t *)(OPTCR_BYTE0_ADDRESS))=0x0FFFAAE9;"和"(*(__IO uint16_t *)(OPTCR1_BYTE2_ADDRESS))=0x0FFF;"语句把OPTCR及OPTCR1寄存器与选项字节相关的位都恢复默认值;

    调用FLASH_OB_Launch函数等待上述配置被写入到选项字节;

    恢复选项字节为默认值操作完毕。

main函数

最后来看看本实验的main函数,见。代码清单 517

代码清单 517 main函数

1 /**

2 * @brief 主函数

3 * @param

4 * @retval

5 */

6 int main(void)

7 {

8 /* LED 端口初始化 */

9 LED_GPIO_Config();

10 Debug_USART_Config();

11 LED_BLUE;

12

13 FLASH_INFO("本程序将会被下载到STM32的内部SRAM运行。");

14 FLASH_INFO("下载程序前,请确认把实验板的BOOT0BOOT1引脚都接到3.3V电源处!!");

15

16 FLASH_INFO("\r\n");

17 FLASH_INFO("----这是一个STM32芯片内部FLASH解锁程序----");

18 FLASH_INFO("程序会把芯片的内部FLASH选项字节恢复为默认值");

19

20

21 #if 0 //工程调试、演示时使用,正常解除时不需要运行此函数

22 SetPCROP(); //修改PCROP位,仿真芯片被锁无法下载程序到内部FLASH的环境

23 #endif

24

25 #if 0 //工程调试、演示时使用,正常解除时不需要运行此函数

26 WriteProtect_Test(); //修改写保护位,仿真芯片扇区被设置成写保护的的环境

27 #endif

28

30

31 /*恢复选项字节到默认值,解除保护*/

32 if(InternalFlash_Reset()==FLASH_COMPLETE)

33 {

34 FLASH_INFO("选项字节恢复成功,请把BOOT0BOOT1引脚都连接到GND");

35 FLASH_INFO("然后随便找一个普通的程序,下载程序到芯片的内部FLASH进行测试");

36 LED_GREEN;

37 }

38 else

39 {

40 FLASH_INFO("选项字节恢复成功失败,请复位重试");

41 LED_RED;

42 }

43

45

46 while (1);

47 }

main函数中,主要是调用了InternalFlash_Reset函数把选项字节恢复成默认值,程序默认时没有调用SetPCROPWriteProtect_Test函数设置写保护,若您想观察实验现象,可修改条件编译的宏,使它加入到编译中。

3.    下载测试

把开发板的BOOT0和BOOT1引脚都使用跳线帽连接到3.3V电源处,使它以SRAM方式启动,然后用USB线连接开发板"USB TO UART"接口跟电脑,在电脑端打开串口调试助手,把编译好的程序下载到开发板并复位运行,在串口调试助手可看到调试信息。程序运行后,请耐心等待至开发板亮绿灯或串口调试信息提示恢复完毕再给开发板断电,否则由于恢复过程被中断,芯片内部FLASH会处于保护状态。

芯片内部FLASH处于保护状态时,可重新下载本程序到开发板以SRAM运行恢复默认配置。

51.5 每课一问

1.    分别设置芯片为读保护级别1、写保护及PCROP保护,然后给芯片的内部FLASH下载程序,观察实验现象。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. spring boot 与 iview 前后端分离架构之前后端代码自动生成(番外篇)

    spring boot 与 iview 前后端分离架构之开发环境基于docker的后端的部署的实现(番外篇)代码快速生成插件安装代码生成的maven插件到本地的仓库快速生成代码 代码快速生成插件 在前面三十六章我们已经讲解了如何编写一个前后端分离的权限架构,那么一个好的框架那一定要配套一…...

    2024/4/20 16:42:14
  2. larbin解读(1) --安装

    larbin的安装比较简单,直接按照使用说明就可以了。 在u8.10上安装的过程为: 1解压tar -xvzf larbin-2.6.3.tar.gz 2.生成配置文件/.configure这个时候出现错误: make[1]: Entering directory `/home/wei/larbin-2.6.3/srccp ../config.h .for d in utils interf fetch; do (…...

    2024/4/21 8:42:38
  3. 声纹识别+语音识别,解决人机交互的痛点问题

    01 人机交互的前世今生自从人类发明了计算机,就持续面临着一个问题:我们到底应该如何与机器交互?在计算机的发展历史上,随着技术的进步,发生过几次大的交互模式的演进:近年来的转变大致可以概括为以鼠标/键盘为主的交互模式转换为以触摸和语音为主的交互模式。由此,我们…...

    2024/5/1 13:53:11
  4. Smarty实例教学 实例篇

    Smarty实例教学 实例篇日期:2004年11月3日 作者: 人气: <script src="../Hits.asp?ArticleID=10441"></script>20 查看:[大字体 中字体 小字体] <script src="../hezuo/softview/read.js"></script> Smarty实例教学 实例篇(三…...

    2024/5/3 2:59:12
  5. larbin出错处理

    我的安装环境是:Ubuntu10.04 估计在其他的linux环境下也大体相同的。Larbin编译步骤:编译前准备:(红色是要替换的为你自己的)1.确认是否已经安装了build-essential程序包:: sudo apt-get install build-essential2. 确认是否已经安装了内核头文件包: :uname –r //查…...

    2024/4/28 0:39:33
  6. Notifyicon 托盘 简单使用

    本文通过向大家介绍一个.Net平台上用C#写的可以停放在任务栏上的图标程序(类似于Flashget、OICQ那种系统托盘图标)来和大家一起体验一下用C#编程的乐趣。一、概述:我这里所指的图标程序是类似于在Windows中经常接触的停放在任务栏上,在后台运行的病毒监视、媒体播放等程序…...

    2024/5/3 12:45:04
  7. java可视化代码生成工具

    最近开发了一套代码生成工具,共享给大家。支持mysql数据库,自动导出 hibernate/mybatis 实体类、service、dao、action,以及简单的页面,简化开发流程,开发必备下载地址 32位:http://download.csdn.net/detail/zjweii/9670290...

    2024/4/30 16:01:39
  8. 进入AI领域做产品 —— 我的自学之路

    一.前言不知不觉,已经为了准备进入AI领域,积累输入了100天的时间。4月参与了GPST的产品经理培训,将时间全部投入在了产品方法、认知的重新梳理上。从5月开始,全情投入到AI知识的学习中,从Python入门到机器学习原理,从计算机视觉通识再到行业理解…随着知识网络的一步步扩…...

    2024/4/28 22:29:19
  9. Flash MX 2004 编程(AS2.0)教程(十一)

    2.3.2.2图片的自动切换 1、回到主场景中,将上一步制作好的影片剪辑拖放到场景中并将其命名为picture_mc,调整其长度为45帧。 2、添加一个动态文本,命名为message_txt,我们将用它来显示倒计时,倒计时完成时,picture_mc中的图片自动切换。另外还要添加一个名称为caption_t…...

    2024/4/30 16:37:58
  10. 关于C#托盘图标控件NotifyIcon的气泡提示

    1), Framework1.1版本. 怎样显示一个带关闭按钮的托盘图标提示?I was able to find a simple answer. Instead of using: TaskbarIcon.ShowBalloonTip(10000); I could use the second form of this function: TaskbarIcon.ShowBalloonTip(10000,"Title","Mes…...

    2024/4/21 8:42:34
  11. ubuntu下编译安装Larbin及其简单配置

    Larbin下载:http://sourceforge.net/projects/larbin/files/larbin/2.6.3/larbin-2.6.3.tar.gz/download事先安装好这些Sudo su apt-get install gccSudo su apt-get install g++Sudo su apt-get install xutils-devSudo su apt-get install makeLarbin的安装:tar -zxvf lar…...

    2024/5/3 14:18:50
  12. 《嵌入式Linux开发实用教程》

    《嵌入式Linux开发实用教程》 基本信息 作者: 朱兆祺 李强 袁晋蓉 出版社:人民邮电出版社 ISBN:9787115334831 上架时间:2014-2-13 出版日期:2014 年4月 开本:16开 页码:258 版次:1-1 所属分类:计算机 > 操作系统 > Linux更多关于》》》 《嵌入式Linux…...

    2024/4/21 8:42:33
  13. RichTextBox与NotifyIcon简单模仿QQ效果

    RichTextBox简单实现,消息时间为颜色显示 private void recv_msg_Click(object sender, EventArgs e) { RecvText.SelectionStart = RecvText.Text.Length; RecvText.SelectionColor = Color.Blue; RecvText.AppendText(DateTime.Now…...

    2024/5/3 13:25:17
  14. 开源网络爬虫Larbin的安装及配置

    大概用了两天的时间用来安装和配置Larbin。总体来说,关于使用和配置larbin的资料还是有很多的,但在安装和配置过程中,我还是遇到了点问题。不过,终于,问题被解决了,larbin能帮我爬东西了! 先说下自己遇到的问题吧: 1. configure时提示没有makedepend程序。因为自己使用…...

    2024/4/21 8:42:31
  15. 代码自动生成工具--能够生成多种框架

    代码生成工具:在生成传统spring boot + spring mvc + spring + mybatis + (jsp or freemarker or easyui ), 新增加了javafx ui 界面功能,对喜欢javafx的同学,可以当成学习资料。生成的代码中,添加了许多小组件, 如: 分页table, 自定义dialog, 有自己特色的导航栏,Po…...

    2024/4/23 14:57:50
  16. 聊一聊麦克风阵列技术:语音交互应该选用怎样的方案?(转载)

    转自:http://news.soundai.com/?id=7雷锋网(公众号:雷锋网)按:本文作者陈孝良,工学博士,声智科技创始人。雷锋网独家文章。亚马逊Echo和谷歌Home争奇斗艳,除了云端服务,他们在硬件上到底有哪些差异?我们先将Echo和Home两款音箱拆开来看,区别最大的还是麦克风阵列技术…...

    2024/4/21 8:42:29
  17. STM32F10x_SPI(硬件接口 + 软件模拟)读写Flash(25Q16)

    推荐分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/strongerhuang我的网站:https://www.strongerhuang.com我的知乎:https://www.zhihu.com/people/strongerHuang.comⅠ、写在前面SPI(…...

    2024/5/3 14:23:48
  18. NotifyIcon - 做拖 盘图标的

    属性:Text - 拖盘文字Icon - 拖盘图标ContextMenuStrip - 右击时候的菜单。 右键菜单。ContextMenuStrip1.学会编辑菜单项。 - 是分隔线。2.如何设置热键 &字母3.如何设快捷键。右击菜单项,在属性中选择ShortCutKey中的组合键即可4.如何给菜单项加图标?5.右击菜单项,…...

    2024/4/21 8:42:26
  19. Larbin的使用--安装

    1、到网上下载 larbin-2.6.3.tar.gz,然后解压。tar zxvf larbin-2.6.3.tar.gz2、 到解压的目录,运行配置文件./configure却出现以下的错误:make[2]: 正在进入目录 `/home/byd/test/larbin-2.6.3/src/utils makedepend -f- -I.. -Y *.cc 2> /dev/null > .depend make[2]…...

    2024/5/1 12:09:10
  20. GLFore便携式声学照相机的应用领域

    声学是研究声波在弹性介质中的产生、传播、接收、影响和应用的学科。声学作为一门经典学科,在近代取得了巨大的进步。它不仅广泛应用于工业、农业、医疗卫生、环境保护、人民日常生活等领域,而且广泛应用于国防建设。声学测量作为声学的重要组成部分,是声学理论和声学的应用…...

    2024/4/29 23:24:18

最新文章

  1. Java面试题:并发编程中,什么是死锁,如何避免它?

    什么是死锁&#xff1f; 死锁是指在多线程环境中&#xff0c;由于资源分配不当或进程运行顺序不合理&#xff0c;导致涉及的线程都处于等待状态&#xff0c;无法继续执行的一种状况。在Java中&#xff0c;死锁通常发生在多个线程互相等待对方持有的锁&#xff0c;但没有任何一…...

    2024/5/3 15:07:37
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 途游游戏,科锐国际(计算机类),快手,CVTE,得物,蓝禾,奇安信,顺丰,康冠科技,金证科技24春招内推

    途游游戏&#xff0c;科锐国际&#xff08;计算机类&#xff09;&#xff0c;快手&#xff0c;CVTE&#xff0c;得物&#xff0c;蓝禾&#xff0c;奇安信&#xff0c;顺丰&#xff0c;康冠科技&#xff0c;金证科技24春招内推 ①得物 【岗位】技术&#xff0c;设计&#xff0c;…...

    2024/4/30 14:38:54
  4. [Spring Cloud] gateway全局异常捕捉统一返回值

    文章目录 处理转发失败的情况全局参数同一返回格式操作消息对象AjaxResult返回值状态描述对象AjaxStatus返回值枚举接口层StatusCode 全局异常处理器自定义通用异常定一个自定义异常覆盖默认的异常处理自定义异常处理工具 在上一篇章时我们有了一个简单的gateway网关 [Spring C…...

    2024/5/1 13:04:53
  5. Python读取文件里内容

    如果要读取一个文件里的内容是 # 文件名&#xff1a;db.txt 1 2 3 4代码如下 import requests f open("db.txt", mode"rb") content f.read() f.close()data content.decode(utf-8)# 存到 list 里 data_list data.split(\r\n) print(data_list)# 结果…...

    2024/5/1 9:42:44
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/2 16:16:39
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/2 9:28:15
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/2 15:04:34
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/2 9:07:46
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57