硬汉嵌入式论坛

 找回密码
 立即注册
查看: 821|回复: 6
收起左侧

[STM32H7] STM32H7 BORLvel 操作问题请教,多谢!

[复制链接]

3

主题

12

回帖

21

积分

新手上路

积分
21
发表于 2022-10-26 18:31:11 | 显示全部楼层 |阅读模式
void SetBORLevel()
{
    FLASH_OBProgramInitTypeDef OBInit;
    HAL_FLASHEx_OBGetConfig(&OBInit);
    kprintf("\n----BORL=0x%04x,%d ", OBInit, OBInit.BORLevel);

#if 0
   OBInit.BORLevel =OB_BOR_LEVEL0;
   //HAL_FLASH_Unlock();
   HAL_FLASH_OB_Unlock();
   HAL_FLASHEx_OBProgram(&OBInit);
   HAL_FLASH_OB_Launch();
   HAL_FLASH_OB_Lock();
   //HAL_FLASH_Lock();
#endif

    HAL_FLASHEx_OBGetConfig(&OBInit);
    kprintf("\n----BORL1=0x%04x,%d  ", OBInit, OBInit.BORLevel);
}

============分割线============
以上是测试代码,硬件是STM32H750VBT6,第一次运行(#if 0), 读到的OBInit.BORLevel=3; 第二次运行(#if 1)使能写BORLevel代码;此后无论读还是写,串口打印都是:
----BORL=0x0056,604176128
----BORL1=0x0056,604176128  

我的系统要求禁止BORLevel或者设为最低档的Level0,但我无论如何操作都不成功,不知道哪里出问题了,请教,多谢!!!
不是说芯片出厂就是Level0=0x00 (表示1.7V), 此前也没操作过,第一次读出来居然是=3(表示2.7V)??
多谢!!!

多谢!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107027
QQ
发表于 2022-10-27 00:58:22 | 显示全部楼层
使用STM32CubeProg操作下这个选项字节,看看正常不。正常的话,就是代码实现有问题。
回复

使用道具 举报

3

主题

12

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2022-10-27 11:02:18 | 显示全部楼层
多谢站长!
我的st-link V2连接不上STM32CubeProgrammer ;用STM32 ST-LINK Utility中的Option Bytes设置完成后,系统重新上电读取的仍然是:
----BORL=0x0056,604176128
----BORL1=0x0056,604176128

1.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107027
QQ
发表于 2022-10-27 13:11:38 | 显示全部楼层
sam2022 发表于 2022-10-27 11:02
多谢站长!
我的st-link V2连接不上STM32CubeProgrammer ;用STM32 ST-LINK Utility中的Option Bytes设置 ...

想办法最好用STM32CubeProg操作下,Utility小软件有点老了
回复

使用道具 举报

3

主题

12

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2022-10-27 18:06:57 | 显示全部楼层
搞定。
参考官方例子xxx\Examples\FLASH\FLASH_WriteProtection;测试代码如下:
===================================================
//Only for STM32H7;
void BORLevelTest()
{
    FLASH_OBProgramInitTypeDef OBInit;
    HAL_FLASHEx_OBGetConfig(&OBInit);
        kprintf("\n---BORL0=0x%04x ",OBInit.BORLevel);

        if (OBInit.BORLevel != OB_BOR_LEVEL0)
    {
      /* If FLASH_WRP_SECTORS are write protected, disable the write protection */
                /* Allow Access to option bytes sector */
                HAL_FLASH_OB_Unlock();

                /* Allow Access to Flash control registers and user Flash */
                HAL_FLASH_Unlock();

                /* Disable FLASH_WRP_SECTORS write protection */
                OBInit.OptionType = OPTIONBYTE_BOR ;
                OBInit.BORLevel   = OB_BOR_LEVEL0;
                kprintf("\n---Set BORLevel=0x%04x ",OBInit.BORLevel);
                HAL_FLASHEx_OBProgram(&OBInit);

                /* Start the Option Bytes programming process */
                if (HAL_FLASH_OB_Launch() != HAL_OK)
                {
                        kprintf("\n----Set_BOR_err  ");
                }

                HAL_FLASH_OB_Lock();
                HAL_FLASH_Lock();

                //check resualt;
                HAL_FLASHEx_OBGetConfig(&OBInit);
                kprintf("\n---BORL1=0x%04x ", OBInit.BORLevel);
        }
}
===================================================
从level3设置到level0,打印结果:
---BORL0=0x000c
---Set BORLevel=0x0000
---BORL1=0x0000

从level0设置到level2结果:
---BORL0=0x0000
---Set BORLevel=0x0008
---BORL1=0x0008

测试平台STM32H750VBT6,480MHz;
多谢版主指点!
回复

使用道具 举报

3

主题

12

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2022-10-27 18:11:14 | 显示全部楼层
ST-link V2 在STM32CubeProg不能连接到板子,ST-LINK Utility可以连接到板子;

ST-link V2就是那种白色下面贴蓝色贴纸那种,不知道谁买的,应该正品吧; 我用STM32CubeProg把ST-link V2固件从V2J29S7升级到V2J39S7了,还是连不上,STM32CubeProg也没提示什么问题。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107027
QQ
发表于 2022-10-27 18:15:41 | 显示全部楼层
sam2022 发表于 2022-10-27 18:06
搞定。
参考官方例子xxx\Examples\FLASH\FLASH_WriteProtection;测试代码如下:
====================== ...

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-14 14:03 , Processed in 0.246345 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表