STM32 Option Bytes(选项字节)

news2024/11/18 13:30:18

文章目录

    • 注意
    • 1. `Option Byte`的定义
    • 2. 读取`Option Byte`
    • 3. `MCU Flash`读保护/写保护的配置
    • 4. `Option Byte`的数据字段
    • 5. `Option Byte`的配置字段

注意

STM32F103上经过反复测试,有如下问题及疑问(测试代码):

  1. 设置读保护时,数据字段可以通过备份后再保存的方式维持原来的数据,但之前设置的写保护设置都将丢失(恢复成默认值:所有页面的写保护都未开启)(不正常);而且必须上电复位后才能运行;(应对方案:在需要读保护时,先使能读保护,再设置写保护)
  2. 清除读保护时,整个固件都将被擦除,必须重新烧录;(正常)
  3. 写数据字段时,读保护设置可以维持,写保护设置将恢复到默认值(不正常),需复位;
  4. 设置写保护时,读保护设置可以维持,数据字段可以维持;可以使能指定页的写保护,需复位;(正常)
  5. 清除写保护时,读保护设置可以维持,数据字段可以维持;只能一次性清除所有页的写保护设置(不正常),需复位;

1. Option Byte的定义

// stm32f1xx_hal_flash_ex.h
/**
  * @brief  FLASH Options bytes program structure definition
  */
typedef struct
{
  uint32_t OptionType;  /*!< OptionType: Option byte to be configured.
                             This parameter can be a value of @ref FLASHEx_OB_Type */
  uint32_t WRPState;    /*!< WRPState: Write protection activation or deactivation.
                             This parameter can be a value of @ref FLASHEx_OB_WRP_State */
  uint32_t WRPPage;     /*!< WRPPage: specifies the page(s) to be write protected
                             This parameter can be a value of @ref FLASHEx_OB_Write_Protection */
  uint32_t Banks;        /*!< Select banks for WRP activation/deactivation of all sectors.
                              This parameter must be a value of @ref FLASHEx_Banks */
  uint8_t RDPLevel;     /*!< RDPLevel: Set the read protection level..
                             This parameter can be a value of @ref FLASHEx_OB_Read_Protection */
#if defined(FLASH_BANK2_END)
  uint8_t USERConfig;   /*!< USERConfig: Program the FLASH User Option Byte: 
                             IWDG / STOP / STDBY / BOOT1
                             This parameter can be a combination of @ref FLASHEx_OB_IWatchdog, @ref FLASHEx_OB_nRST_STOP, 
                             @ref FLASHEx_OB_nRST_STDBY, @ref FLASHEx_OB_BOOT1 */
#else
  uint8_t USERConfig;   /*!< USERConfig: Program the FLASH User Option Byte: 
                             IWDG / STOP / STDBY
                             This parameter can be a combination of @ref FLASHEx_OB_IWatchdog, @ref FLASHEx_OB_nRST_STOP, 
                             @ref FLASHEx_OB_nRST_STDBY */
#endif /* FLASH_BANK2_END */
  uint32_t DATAAddress; /*!< DATAAddress: Address of the option byte DATA to be programmed
                             This parameter can be a value of @ref FLASHEx_OB_Data_Address */
  uint8_t DATAData;     /*!< DATAData: Data to be stored in the option byte DATA
                             This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF */
} FLASH_OBProgramInitTypeDef;

2. 读取Option Byte

FLASH_OBProgramInitTypeDef OBInit;
HAL_FLASHEx_OBGetConfig(&OBInit);
// 以下都回来的值并不是每个都有意义,根据需要使用即可
LOG_DBG("OptionType:  [0x%08X]\n", OBInit.OptionType);	// 需要修改OptionByte时才使用
LOG_DBG("USERConfig:  [0x%02X]\n", OBInit.USERConfig);	// 当前MCU的一些配置信息,后面详细说
LOG_DBG("RDPLevel:    [0x%02X]\n", OBInit.RDPLevel);	// 表示当前MCU Flash的读保护状态
LOG_DBG("Banks:       [0x%08X]\n", OBInit.Banks);		// 这三个一起表示了当前MCU Flash的写保护状态
LOG_DBG("WRPPage:     [0x%08X]\n", OBInit.WRPPage);
LOG_DBG("WRPState:    [0x%08X]\n", OBInit.WRPState);
LOG_DBG("DATA0:       [0x%02X]\n", HAL_FLASHEx_OBGetUserData(OB_DATA_ADDRESS_DATA0));	// 获取数据字段值
LOG_DBG("DATA1:       [0x%02X]\n", HAL_FLASHEx_OBGetUserData(OB_DATA_ADDRESS_DATA1))

3. MCU Flash读保护/写保护的配置

参考STM32_RDP_WRP_SRAM

4. Option Byte的数据字段

  1. 这个用户字段在F1系列只有两个字节(非连续),用于存储一些掉电也可以保存的状态、标志位;至于需要怎么用,看用户自己的需求,个人目前感觉最大的用处就是用于固件升级时保存一下升级的标志位;(参考:STM32固件更新)

5. Option Byte的配置字段

  1. USERConfig可设置的选项如下:
// @defgroup FLASHEx_OB_IWatchdog Option Byte IWatchdog
#define OB_IWDG_SW      ((uint16_t)0x0001)  /*!< Software IWDG selected */	// MCU 复位后 IWDG 需要软件配置后才启动(默认值)
#define OB_IWDG_HW      ((uint16_t)0x0000)  /*!< Hardware IWDG selected */	// MCU 复位后 IWDG 直接生效,不需要软件配置

// @defgroup FLASHEx_OB_nRST_STOP Option Byte nRST STOP
#define OB_STOP_NO_RST  ((uint16_t)0x0002) /*!< No reset generated when entering in STOP */	// 进入STOP模式后不产生复位(默认值)
#define OB_STOP_RST     ((uint16_t)0x0000) /*!< Reset generated when entering in STOP */	// 进入STOP模式后产生复位(这个有什么用呢?每次进入STOP后,就复位,又恢复到正常模式从新开始运行了啊)

// @defgroup FLASHEx_OB_nRST_STDBY Option Byte nRST STDBY
#define OB_STDBY_NO_RST ((uint16_t)0x0004) /*!< No reset generated when entering in STANDBY */	// 同上
#define OB_STDBY_RST    ((uint16_t)0x0000) /*!< Reset generated when entering in STANDBY */	// 通过这个配置产生的复位不会设置PWR_FLAG_SB位,即MCU不会认为此次复位是由唤醒Standby模式产生的
  1. USERConfig的默认值为0x07(OB_IWDG_SW | OB_STOP_NO_RST | OB_STDBY_NO_RST);
  2. 关于OB_STOP_RST配置的验证,可以参考STM32低功耗例程;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2242836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

blender 骨骼的动画基础 笔记总结

一、世界纹理 1.首先打开Node Wrangler&#xff08;世界纹理&#xff09;插件 在编辑的偏好设置这里&#xff0c; 演示一下这个插件&#xff1a; 然后通过shift a添加环境纹理 对其连接颜色后&#xff0c;选中世界纹理&#xff0c;通过按键ctrl t 二、动画 点击动画 1.…

java ssm 健康医馆管理系统 中医馆管理 健康平台 药店 源码jsp

一、项目简介 本项目是一套基于SSM的健康医馆管理系统&#xff0c;主要针对计算机相关专业的和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本、软件工具等。 项目都经过严格调试&#xff0c;确保可以运行&#xff01; 二、技术实现 ​后端技术&#x…

前端无感刷新token

摘要&#xff1a; Axios 无感知刷新令牌是一种在前端应用中实现自动刷新访问令牌&#xff08;access token&#xff09;的技术&#xff0c;确保用户在进行 API 请求时不会因为令牌过期而中断操作 目录概览 XMLHttpRequestAxiosFetch APIJQuni.request注意事项&#xff1a; 访问…

【AI图像生成网站Golang】雪花算法

AI图像生成网站 目录 一、项目介绍 二、雪花算法 三、JWT认证与令牌桶算法 四、项目架构 五、图床上传与图像生成API搭建 六、项目测试与调试(等待更新) 雪花算法 雪花算法 (Snowflake) 是一种高效、可扩展的分布式唯一ID生成算法&#xff0c;最早由 Twitter 开发&…

[369]基于springboot的高校教师教研信息填报系统

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统高校教师教研信息填报系统信息管理难度大&#xff0c;容错…

《素书》:为上计,事当缓;为下计,事当急

《素书》是中国古代一部重要的典籍&#xff0c;相传为秦末黄石公作&#xff0c;内容主要讲述为人处世的道理。其中&#xff0c;“为上计&#xff0c;事当缓&#xff1b;为下计&#xff0c;事当急”这句话&#xff0c;给人以深刻的启示。 首先&#xff0c;对于上策之事&#xf…

树莓派4B Qt+FFMPEG 多线程录制USB相机mjpeg数据流“h264_omx“硬件编码的MP4文件

文章目录 1 前言2 一些问题说明2.0 树莓派4b系统版本2.1 Qt2.2 FFMPEG2.3 图像格式 3 核心代码3.0 代码逻辑3.1 pro文件3.2 avframequeue.cpp3.3 decodethread.cpp 4 资源下载 1 前言 本项目为在树莓派4B开发板上&#xff0c;通过QtFFMPEG以多线程分别解码、编码USB摄像头视频数…

排序算法(基础)大全

一、排序算法的作用&#xff1a; 排序算法的主要作用是将一组数据按照特定的顺序进行排列&#xff0c;使得数据更加有序和有组织。 1. 查找效率&#xff1a;通过将数据进行排序&#xff0c;可以提高查找算法的效率。在有序的数据中&#xff0c;可以使用更加高效的查找算法&…

计算机网络:运输层 —— TCP 的拥塞控制

文章目录 TCP的拥塞控制拥塞控制的基本方法流量控制与拥塞控制的区别拥塞控制分类闭环拥塞控制算法 TCP的四种拥塞控制方法&#xff08;算法&#xff09;窗口慢开始门限慢开始算法拥塞避免算法快重传算法快恢复算法 TCP拥塞控制的流程TCP拥塞控制与网际层拥塞控制的关系 TCP的拥…

如何在Mysql中生成0-23完整的小时数据

目录 1. 创建表2. 插入0-23小时的数据3. 查询并合并数据 在数据分析中&#xff0c;我们经常需要对特定时间段内的数据进行统计和分析。 例如&#xff0c;在名片进线的场景中&#xff0c;我们可能需要了解一天内每小时的名片进线数量。 然而&#xff0c;由于某些时间点可能没有数…

【GeekBand】C++设计模式笔记12_Singleton_单件模式

1. “对象性能” 模式 面向对象很好地解决了 “抽象” 的问题&#xff0c; 但是必不可免地要付出一定的代价。对于通常情况来讲&#xff0c;面向对象的成本大都可以忽略不计。但是某些情况&#xff0c;面向对象所带来的成本必须谨慎处理。典型模式 SingletonFlyweight 2. Si…

架构篇(理解架构的模式2)

目录 一、管理和监控 大使模式&#xff1a;创建代表消费者服务或应用程序发送网络请求的帮助服务 反腐模式&#xff1a;在现代应用程序和遗留系统之间实现装饰或适配器层 外部配置存储&#xff1a;将应用程序部署包中的配置信息移动到中心化的位置 网关聚合模式&#xff1…

20241116解决在WIN11和ubuntu20.04通过samba共享时出现局域网千兆带宽拉满的情况

20241116解决在WIN11和ubuntu20.04通过samba共享时出现局域网千兆带宽拉满的情况 2024/11/16 13:42 缘起&#xff1a;最近需要通过iperf3打流&#xff0c;因此在ubuntu20.04服务器上常开sudo nethogs监控流量。 但是发现一个异常&#xff0c;ubuntu20.04服务器上发送的流量过大…

DevOps工程技术价值流:打造卓越项目协作的优化宝典

一、引言 解锁项目协作的无限潜力&#xff0c;覆盖全链路实现流畅高效。 在当今瞬息万变的商业环境中&#xff0c;项目协作的效率和效果直接关系到企业的竞争力和市场响应速度。DevOps工程技术价值流中的项目协作优化&#xff0c;不仅是技术层面的革新&#xff0c;更是团队协…

WSL--无需安装虚拟机和docker可以直接在Windows操作系统上使用Linux操作系统

安装WSL命令 管理员打开PowerShell或Windows命令提示符&#xff0c;输入wsl --install&#xff0c;然后回车 注意&#xff1a;此命令将启用运行 WSL 和安装 Linux 的 Ubuntu 发行版所需的功能。 注意&#xff1a;默认安装最新的Ubuntu发行版。 注意&#xff1a;默认安装路径是…

⾃动化运维利器Ansible-基础

Ansible基础 一、工作原理二、快速入门2.1 测试所有资产的网络连通性2.2 发布文件到被管理节点(资产) 三、资产(被管理节点)3.1 静态资产3.1.1 自定义资产3.1.2 自定义资产的使用3.1.3 资产选择器 四、Ansible Ad-Hoc 命令4.1 模块类型4.1.1 command & shell 模块4.1.2 cop…

简易实现自动签到并发送通知邮件

环境准备 Windows操作系统adbshell1.0.40pyhon3.7visual stdio code stableandroid手机数据线&#xff0c;并配置环境变量 打卡程序 需要定位屏幕坐标 import os import timea0os.popen("adb shell input keyevent 26") ##ba0.read() ##print(b) time.sleep(5) …

机器学习(贝叶斯算法,决策树)

朴素贝叶斯分类 贝叶斯分类理论 假设现有两个数据集&#xff0c;分为两类 我们现在用p1(x,y)表示数据点(x,y)属于类别1(图中红色圆点表示的类别)的概率&#xff0c;用p2(x,y)表示数据点(x,y)属于类别2(图中蓝色三角形表示的类别)的概率&#xff0c;那么对于一个新数据点(x,y)…

[ACTF2020]Upload 1--详细解析

信息收集 题目告诉我们是一道upload&#xff0c;也就是文件上传漏洞题目。 进入界面&#xff0c;是一个灯泡&#xff0c;将鼠标放在图标上就会出现文件上传的相应位置&#xff1a; 思路 文件上传漏洞&#xff0c;先看看有没有前端校验。 在js源码中找到了前端校验&#xff…

网络常用特殊地址-127.0.0.1

借用Medium博客的一张图 经常在问题解答群里留意到如下关于127.0.0.1的消息 ”如果单机版&#xff0c;不需要配置IP&#xff0c;所有配置IP的地方都写死127.0.0.1就可以” “ip: 根据实际情况填写&#xff08;在 xxx-init.conf 里可以给一个默认值 127.0.0.1 &#xff0c;方便…