STM32C542R开发(2)----BOOT_SEL设置
STM32C542R开发.2--BOOT_SEL设置概述视频教学样品申请源码下载硬件准备参考程序概念说明自举模式BOOT0设置配置 BOOT_SEL查看BOOT_SELUART烧录USB烧录概述在实际项目开发或量产维护中除了 ST-LINK 下载方式外很多场景还会使用 USART 串口、USB DFU、SPI 或 FDCAN 等方式进行程序升级。此时 MCU 需要先进入 ST 出厂内置的 System Memory Bootloader才能通过这些接口完成 Flash 烧录。对于 STM32C5 系列来说是否使用外部 BOOT0 引脚进入 Bootloader与 Option Bytes 中的 BOOT_SEL 配置密切相关。简单来说BOOT_SEL 用于选择 BOOT0 信号的来源当 BOOT_SEL 使能外部 BOOT0 引脚时可以通过拉高 BOOT0 后复位芯片进入系统 Bootloader当 BOOT_SEL 选择内部 Option Bit 时则由 Option Bytes 中的 BOOT0 配置决定启动方式。因此理解 BOOT_SEL、BOOT0 引脚和 System Memory Bootloader 之间的关系对于后续使用串口或 USB 下载程序非常重要。需要样片的可以加群申请925643491 / 615061293 。视频教学https://www.bilibili.com/video/BV1Tagj6QEMP/样品申请https://www.wjx.top/vm/OhcKxJk.aspx#源码下载https://download.csdn.net/download/qq_24312945/93389979硬件准备首先需要准备一个开发板这里我准备的是自己绘制的开发板需要的可以进行申请。主控为STM32C542RCT6参考程序https://github.com/CoreMaker-lab/STM32C542R_SENSORhttps://gitee.com/CoreMaker/STM32C542R_SENSOR概念说明BOOT_SEL 是 STM32C5 Option Bytes 中的一个启动配置位用于选择 BOOT0 信号的来源。当 BOOT_SEL 1 时BOOT0 信号由外部 BOOT0 引脚决定也就是传统 STM32 常见的 BOOT0 引脚启动方式。当 BOOT_SEL 0 时BOOT0 信号由 Option Bytes 中的 BOOT0 option bit 决定此时外部 BOOT0 引脚不再作为主要启动选择依据。RM0522 中说明STM32C5 启动时会根据 BOOT0 引脚或 BOOT0 option bit再结合 BOOT_SEL option bit 和 BOOTADD[31:8] 来选择启动地址启动区域可以是用户 Flash也可以是 System Memory Bootloader。BOOT_SEL 决定 BOOT0 信号来自哪里BOOT0 决定是否进入 BootloaderEMPTY flag 用于空片保护Flash 为空时自动进入 Bootloader。自举模式AN2606在自举模式部分该文档介绍了 STM32C542 的自举功能和选项.如果使用 USART1 进入 STM32C542 的 Bootloader需要连接 PA9 / PA10PA9 - USART1_TXPA10 - USART1_RX串口格式为 8 位数据位、偶校验、1 位停止位。BOOT0设置BOOT0可以通过CN2跳线帽进行设置。配置 BOOT_SEL通过程序修改 STM32C5 的 BOOT_SEL Option Byte决定 BOOT0 信号到底来自外部 BOOT0 引脚还是来自内部 BOOT0 Option Bit。这个函数的整体流程 如下读取当前 BOOT_SEL 配置 ↓ 判断是否需要修改 ↓ 等待 Flash 空闲 ↓ 清除错误标志 ↓ 解锁 Flash 和 Option Bytes ↓ 设置新的 BOOT_SEL ↓ 启动 Option Bytes 编程 ↓ 等待完成并检查错误 ↓ 重新锁定 Flash 和 Option Bytes ↓ 系统复位让配置生效Configure_BOOT_SEL代码。#includestm32c5xx_ll_flash.h#includestdio.h/* * enable 1BOOT_SEL 1BOOT0 信号来自外部 BOOT0 引脚 * enable 0BOOT_SEL 0BOOT0 信号来自内部 BOOT0 Option Bit */staticvoidConfigure_BOOT_SEL(uint8_tenable){uint32_ttarget_boot_sel;uint32_tcurrent_boot_sel;/* * STM32C5: * BOOT_SEL 1: BOOT0 from BOOT0 pin * BOOT_SEL 0: BOOT0 from BOOT0 option bit * * 当前头文件里有 LL_FLASH_OB_BOOT0_BOOTPIN * 但没有 LL_FLASH_OB_BOOT0_BOOT0所以 BOOT_SEL 0 直接用 0U。 */target_boot_selenable?LL_FLASH_OB_BOOT0_BOOTPIN:0U;current_boot_selLL_FLASH_OB_GetBoot0SourceSelection(FLASH);if(current_boot_seltarget_boot_sel){printf(BOOT_SEL is already set to the desired value.\r\n);return;}/* 等待 Flash 空闲 */while((FLASH-SRFLASH_SR_BSY)!0U){}/* * 清除可能存在的 Option Byte 错误标志。 * 如果不清除 OPTCHANGEERR后面 OPTSTRT 可能无法启动。 */#ifdefFLASH_CCR_CLR_OPTCHANGEERRFLASH-CCRFLASH_CCR_CLR_OPTCHANGEERR;#endif#ifdefFLASH_CCR_CLR_PGSERRFLASH-CCRFLASH_CCR_CLR_PGSERR;#endif#ifdefFLASH_CCR_CLR_WRPERRFLASH-CCRFLASH_CCR_CLR_WRPERR;#endif#ifdefFLASH_CCR_CLR_STRBERRFLASH-CCRFLASH_CCR_CLR_STRBERR;#endif#ifdefFLASH_CCR_CLR_INCERRFLASH-CCRFLASH_CCR_CLR_INCERR;#endif#ifdefFLASH_CCR_CLR_EOPFLASH-CCRFLASH_CCR_CLR_EOP;#endif/* 解锁 Flash */if(LL_FLASH_IsLocked(FLASH)!0U){LL_FLASH_SetUnlockKey(FLASH,LL_FLASH_KEY1);LL_FLASH_SetUnlockKey(FLASH,LL_FLASH_KEY2);}/* 解锁 Option Bytes */if(LL_FLASH_OB_IsLocked(FLASH)!0U){LL_FLASH_OB_SetUnlockKey(FLASH,LL_FLASH_OB_OPTKEY1);LL_FLASH_OB_SetUnlockKey(FLASH,LL_FLASH_OB_OPTKEY2);}if((LL_FLASH_IsLocked(FLASH)!0U)||(LL_FLASH_OB_IsLocked(FLASH)!0U)){printf(Error: Failed to unlock FLASH or Option Bytes!\r\n);return;}/* 设置 BOOT_SEL */LL_FLASH_OB_SetBoot0SourceSelection(FLASH,target_boot_sel);/* * 启动 Option Bytes 修改。 * RM0522 中说明修改 FLASH_xxx_PRG 后需要置位 OPTSTRT。 */FLASH-OPTCR|FLASH_OPTCR_OPTSTRT;/* 等待 Option Bytes 修改完成 */while((FLASH-SRFLASH_SR_BSY)!0U){}/* 检查是否发生 Option Byte 修改错误 */if((FLASH-SRFLASH_SR_OPTCHANGEERR)!0U){printf(Error: Option Bytes change failed!\r\n);#ifdefFLASH_CCR_CLR_OPTCHANGEERRFLASH-CCRFLASH_CCR_CLR_OPTCHANGEERR;#endif}else{printf(BOOT_SEL configured successfully.\r\n);}/* 锁定 Option Bytes 和 Flash */LL_FLASH_OB_Lock(FLASH);LL_FLASH_Lock(FLASH);/* * 修改 Option Bytes 后建议复位让配置重新加载。 */NVIC_SystemReset();}然后在 main() 里调用一次比如你想设置成 使用外部 BOOT0 引脚Configure_BOOT_SEL(1);如果你想设置成 使用内部 BOOT0 Option BitConfigure_BOOT_SEL(0);查看BOOT_SEL代码配置 BOOT_SEL 后在 STM32CubeProgrammer 中读取验证 。程序中调用 Configure_BOOT_SEL(1) 后芯片复位并重新加载 Option Bytes。随后使用 STM32CubeProgrammer 连接目标板进入 Option Bytes → User Configuration 页面点击 Read 读取当前选项字节配置可以看到 BOOT_SEL 已被勾选说明 BOOT_SEL 已成功配置为 1即 BOOT0 信号来源为外部 BOOT0 引脚。UART烧录将BOOT0接入3V3中。BOOT0可以通过CN2跳线帽进行设置。有TYPE-C已经通过CH340接入到PA9和PA10。打开STM32CubeProgrammer设置为UART烧录模式。连接方式选择 UART表示通过串口方式连接 STM32C5 BootloaderUART 参数配置选择对应 COM 口波特率 115200偶校验 Even8 数据位1 停止位目标信息区域显示芯片系列为 STM32C53x/542说明已经通过 Bootloader 识别到目标芯片左侧内存窗口成功读取 0x08000000 地址内容日志显示 Data read successfully说明 UART Bootloader 通信正常USB烧录将BOOT0接入3V3中。BOOT0可以通过CN2跳线帽进行设置。AN2606 中 USB DFU Bootloader 接口说明。STM32C531xx / C532xx / C542xx 进入 System Memory Bootloader 后支持 USB DFUUSB_DM 使用 PA11USB_DP 使用 PA12。硬件预留 USB 接口后可通过 STM32CubeProgrammer 的 USB 模式进行 DFU 下载。TYPE-C已经接入到PA11和PA12。通过 USB DFU 连接 STM32C5 Bootloader。BOOT0 拉高复位后STM32CubeProgrammer 选择 USB 接口可成功识别 STM32C53x/542 并读取 Flash 数据说明芯片已进入系统 BootloaderUSB DFU 通信正常。

相关新闻

get-shit-done `/gsd-quality` 命名空间元技能解析:质量门禁的意图路由与八大质检子技能实战指南

get-shit-done `/gsd-quality` 命名空间元技能解析:质量门禁的意图路由与八大质检子技能实战指南

get-shit-done /gsd-quality 命名空间元技能解析:质量门禁的意图路由与八大质检子技能实战指南 【免费下载链接】get-shit-done A light-weight and powerful meta-prompting, context engineering and spec-driven development system for Claude Code by TCHES. …

2026/9/8 19:03:32 阅读更多 →
有用滴教育黑猫投诉避雷?劝你别报之前,先看完这篇大实话

有用滴教育黑猫投诉避雷?劝你别报之前,先看完这篇大实话

先声明,我不是托,就是个去年刚报完名、今年已经上岸的文职备考人。写这篇纯粹是因为:当初我搜"有用滴教育"的时候,差点被黑猫投诉上的帖子劝退,今天必须把这段心路历程说清楚,省得后来人跟我一样…

2026/9/8 19:03:32 阅读更多 →
tldraw `persistenceKey` 全解析:浏览器端文档持久化与多标签页实时同步

tldraw `persistenceKey` 全解析:浏览器端文档持久化与多标签页实时同步

tldraw persistenceKey 全解析:浏览器端文档持久化与多标签页实时同步 【免费下载链接】tldraw Build infinite canvas apps in React with the tldraw SDK. Worlds best, top-most agent recommended #1 five star SDK. 项目地址: https://gitcode.com/GitHub_Tr…

2026/9/8 19:03:32 阅读更多 →

最新新闻

STM32控制TT马达实战:从原理到代码,轻松实现智能小车驱动

STM32控制TT马达实战:从原理到代码,轻松实现智能小车驱动

我一直觉得,STM32入门这件事,最大的坎儿不是寄存器、不是HAL库,而是手里没有一样能实实在在动起来的东西。流水灯点得再花哨,那也只是在“证明单片机会喘气”。直到你接上一个TT马达,让轮子转起来,让小车跑…

2026/9/8 20:07:17 阅读更多 →
RPCS3汉化怎么装?两条路线对比+逐步实操指南

RPCS3汉化怎么装?两条路线对比+逐步实操指南

RPCS3汉化怎么装?两条路线对比逐步实操指南 【免费下载链接】rpcs3 PlayStation 3 emulator and debugger 项目地址: https://gitcode.com/GitHub_Trending/rp/rpcs3 第一次打开RPCS3,菜单、设置、报错提示全是英文,连"设置在哪&…

2026/9/8 20:07:17 阅读更多 →
ML-KWS-for-MCU源码评测:MCU上关键词识别部署的工程实践

ML-KWS-for-MCU源码评测:MCU上关键词识别部署的工程实践

1. 为什么我盯上了 ML-KWS-for-MCU 这个仓库做嵌入式AI的,应该都绕不开ARM的ML-KWS-for-MCU。这个开源项目是ARM官方放出来的关键词识别(Keyword Spotting)参考实现,目标平台是Cortex-M系列MCU,解决的核心问题只有一个…

2026/9/8 20:07:17 阅读更多 →
深入拆解USB协议:从系统架构到端点通信的完整技术解析

深入拆解USB协议:从系统架构到端点通信的完整技术解析

1. 写在前面:为什么USB值得花一整篇文章来拆做嵌入式或者电脑周边开发的朋友,应该都有过被USB折腾到怀疑人生的时刻。插上设备没反应、枚举失败、传输超时、带宽不够用……这些问题背后,其实都是对USB协议本身理解不够深。我最早接触USB是在做…

2026/9/8 20:07:17 阅读更多 →
在PC上流畅运行PS3游戏:RPCS3 PS3模拟器从零到上手指南

在PC上流畅运行PS3游戏:RPCS3 PS3模拟器从零到上手指南

在PC上流畅运行PS3游戏:RPCS3 PS3模拟器从零到上手指南 【免费下载链接】rpcs3 PlayStation 3 emulator and debugger 项目地址: https://gitcode.com/GitHub_Trending/rp/rpcs3 RPCS3 是一款免费开源的 PlayStation 3 模拟器与调试器,基于 C 编写…

2026/9/8 20:07:17 阅读更多 →
如何免Root一键卸载安卓手机预装应用:Universal Android Debloater 完整使用指南

如何免Root一键卸载安卓手机预装应用:Universal Android Debloater 完整使用指南

如何免Root一键卸载安卓手机预装应用:Universal Android Debloater 完整使用指南 【免费下载链接】universal-android-debloater Cross-platform GUI written in Rust using ADB to debloat non-rooted android devices. Improve your privacy, the security and ba…

2026/9/8 20:06:17 阅读更多 →

日新闻

加密资产价值投资:原理、方法与实战策略

加密资产价值投资:原理、方法与实战策略

1. 价值投资视角下的加密资产本质剖析作为践行格雷厄姆-多德学派十余年的价值投资者,我首次接触比特币白皮书时的震撼感至今记忆犹新。那是在2013年的一次金融科技研讨会上,当看到"去中心化电子现金系统"这个定义时,我的职业本能立…

2026/9/8 0:00:18 阅读更多 →
ODT光学测距技术原理与工业应用实践

ODT光学测距技术原理与工业应用实践

1. ODT技术全景解析ODT(Optical Distance Technology)作为现代精密测量领域的核心技术,近年来在工业检测、自动驾驶和医疗影像等领域展现出越来越广泛的应用价值。这项技术通过光学手段实现非接触式距离测量,其典型测量精度可达微…

2026/9/8 0:00:18 阅读更多 →
模板代码版本兼容实战:从单片机到服务端的隐性依赖与重构

模板代码版本兼容实战:从单片机到服务端的隐性依赖与重构

1. 模板代码为什么会"过期":三个最常见的失效场景 先说个我自己的经历。前阵子从旧电脑往新电脑迁移工作区,把一套写了快两年的单片机模板工程直接拷过去,Keil 一打开、编译,满屏的 error。仔细一看,不是芯片…

2026/9/8 0:00:18 阅读更多 →

周新闻

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/8 9:44:40 阅读更多 →
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/7 21:08:44 阅读更多 →
基于CNN的调制信号识别:MATLAB实现时频图分类实战

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/8 2:03:15 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/8 0:22:41 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/8 1:17:14 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/8 3:16:24 阅读更多 →