STM32程序的常用的两种烧录方式

STM32有两种常用的烧录方式,一是利用JLink和STLink调试下载,二是利用串口线直接下载

一、ISP(In-System Programming)

在系统编程,使用引导程序(Bootloader)加上外围UART/SPI等接口进行烧录。

二、ICP (In-circuit programmer)

在电路编程,使用SWD/JTAG接口

这两种方式有什么区别以及怎么用我们得先了解一下STM32的地址映射

看Block0中有两块标为橙色的,Flash和System memory

  • Main memory 主存储区、存放代码的地方

  • System memory系统存储区、System memory是STM32在出厂时内置Bootloader的地方

STM32的启动方式

 STM32有两个BOOT引脚,通过配置不同的高低电平,可以让单片机从不同的地址开始运行。

  • BOOT0=0, BOOT1任意(JLink和STLink调试下载:ICP)

通常我们是在Main memory 主存储区(0x0800 0000)运行程序,BOOT0引脚拉低即可。

这种情况,KEIL软件给STM32烧录程序,就是直接在这个地址烧录,烧录完,直接在这个地址处运行。

  • BOOT0=1,BOOT1=0(串口直接下载:ISP)

这种情况就用在使用串口方式给STM32烧录程序,这时单片机从系统存储器(0x1FFF 0000)启动,运行的是出厂预置的BootLoader程序,可以接收串口发来的程序,并将其写入Main memory(0x0800 0000),程序烧录完成后,再将BOOT0引脚拉低,Main memory(0x0800 0000)处运行刚烧录的代码了。

  • BOOT0=1,BOOT1=1

这种情况是从内存中启动,内置SRAM(也就是STM32的内存中),既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。

### STM32STLink与CMSIS的区别及应用场景 #### 工具功能概述 STLink 是一种硬件调试工具,主要用于通过 JTAG 或 SWD 接口实现对 STM32 微控制器的编程和调试操作[^1]。它提供了物理层的支持,允许开发者将固件烧录到目标设备并实时监控程序运行状态。 相比之下,CMSIS(Cortex Microcontroller Software Interface Standard)是一个由 ARM 提供的标准软件接口框架,旨在简化基于 Cortex-M 架构微控制器的应用开发过程[^2]。CMSIS 定义了一组通用 API 和结构体来访问处理器核心以及片内外设资源,从而提高代码可移植性和重用率。 #### 技术层面分析 - **STLink 特性** - 主要作用于硬件级别,负责建立主机 PC 软件环境 (如 Keil MDK, IAR Embedded Workbench 或 VSCode 配合 PlatformIO 插件) 同实际嵌入式板卡间的通信桥梁。 - 支持多种版本型号(ST-LINK/V2-1,V3SET等),具备不同的性能参数满足各类需求场景下的效率考量[^3]. - **CMSIS 功能模块** - 包含 Core、DSP Library 及 RTOS Profile 等子组件部分;其中Core包含了启动文件(startup code),系统配置函数(SystemInit()),中断向量表(vector table mapping mechanism). - 对应具体厂商产品线还会扩展出 Peripheral Access Layer(PAL),即外设寄存器映射描述文档,便于统一管理复杂多样的内部单元逻辑电路设计. #### 应用场景对比 当涉及到项目初期选型阶段时需考虑如下因素: | 方面 | STLink | CMSIS | |------------|----------------------------------|-----------------------------------| | 使用目的 | 下载程序至MCU闪存区 | 编写高效能跨平台应用程序 | | 开发周期定位| 整个流程中的后期验证环节 | 前期架构规划与中间编码实施期间 | | 成本投入 | 初次购置成本相对固定 | 几乎无额外开销 | 因此如果仅是从经济角度出发的话,则优先推荐利用现有开源解决方案配合简单串口bootloader完成基础测试任务即可达成初步效果评估的目的;而对于追求极致优化成果或者长期维护便利性的商业级作品而言,投资购买正版授权许可后的全套官方支持服务无疑更加划算合理些. ```c // 示例:使用CMSIS-Core初始化SysTick定时器 void SysTick_Init(void){ if (SysTick_Config(SystemCoreClock / 1000)){ while(1); // 如果配置失败则进入死循环 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值