STM32F103 的启动配置主要涉及 启动模式选择 和 启动文件初始化,以下是关键要点:
1. 启动模式选择
STM32F103 通过 BOOT0 和 BOOT1 引脚电平决定启动位置:
| BOOT1 | BOOT0 | 启动模式 | 用途 |
|---|---|---|---|
| 0 | 0 | 主闪存存储器(Main Flash) | 默认模式,用户程序通常烧录在此 |
| 0 | 1 | 系统存储器(System Memory) | 内置 Bootloader,用于串口/USB下载程序 |
| 1 | 1 | 内置SRAM | 调试阶段临时运行代码,掉电丢失 |
硬件配置方法:
- 通过跳线帽或电路设置 BOOT0 和 BOOT1 引脚电平。
- 程序正常运行时,一般配置为 BOOT0=0, BOOT1=0(从主闪存启动)。
2. 启动文件(Startup File)
启动文件(如 startup_stm32f10x_hd.s)负责初始化硬件环境,包括:
- 堆栈(Stack/Heap)初始化:定义堆栈大小(在
.s文件中修改)。 - 中断向量表:定义异常和中断处理函数的入口地址。
- 复位处理:跳转到
SystemInit()初始化时钟,最终调用main()函数。
关键文件选择:
- 根据 Flash 容量选择对应的启动文件:
startup_stm32f10x_ld.s:小容量(16-32KB)startup_stm32f10x_md.s:中容量(64-128KB)startup_stm32f10x_hd.s:大容量(256-512KB)startup_stm32f10x_xl.s:超大容量(≥512KB)
3. 时钟配置
在 SystemInit() 函数(位于 system_stm32f10x.c)中完成时钟初始化:
- 默认使用内部 8MHz RC 振荡器(HSI),通过 PLL 倍频到 72MHz。
- 若需使用外部晶振(HSE),需修改代码:
// 在 system_stm32f10x.c 中启用 HSE #define SYSCLK_FREQ_72MHz // 并确保 RCC 配置中启用 HSE 和 PLL
4. 用户程序入口
启动流程:
- 复位后从
0x00000000(Flash 起始地址)读取初始堆栈指针(SP)。 - 跳转到
Reset_Handler,执行以下操作:- 调用
SystemInit()初始化时钟。 - 复制数据段(
.data)到 RAM,清零.bss段。 - 进入
main()函数。
- 调用
常见问题
-
程序无法启动:
- 检查 BOOT 引脚电平是否正确。
- 确认启动文件是否与芯片 Flash 容量匹配。
- 检查时钟配置是否正确(如外部晶振未启振)。
-
调试模式配置:
- 使用 SRAM 启动(BOOT0=1, BOOT1=1)时,需通过调试器(如 ST-Link)加载程序。
代码示例(时钟初始化片段)
void SystemInit(void) {
// 启用外部晶振(HSE)并配置 PLL 到 72MHz
RCC->CR |= RCC_CR_HSEON; // 开启 HSE
while (!(RCC->CR & RCC_CR_HSERDY)); // 等待 HSE 就绪
RCC->CFGR |= RCC_CFGR_PLLMULL9 | RCC_CFGR_PLLSRC_HSE; // PLL 9倍频
RCC->CR |= RCC_CR_PLLON; // 开启 PLL
while (!(RCC->CR & RCC_CR_PLLRDY)); // 等待 PLL 就绪
RCC->CFGR |= RCC_CFGR_SW_PLL; // 切换系统时钟到 PLL
}
通过以上配置,STM32F103 即可正确初始化并运行用户程序。
ch32v103与stm32f103的区别
ch32v103与stm32f103的区别 Ch32v103与STM32f103是两种不同的芯片,虽然它们都是基于ARM Cortex-M3内核的32位微控制器,但它们在硬件配置、功能、性能等方面
2023-08-22 15:49:00
STM32CubeIDE下配置STM32F103输出带死区的互补PWM波
STM32F103的TIM1和TIM8是高级定时器,可以产生嵌入死区时间的互补PWM波,使用STM32CubeIDE完成相关配置,可以直接生成代码,输出带死区的PWM波。
2023-11-01 09:41:07
如何对STM32F103 ADC寄存器进行配置
STM32F103系列有几个ADC?STM32F103系列的ADC主要特征有哪些?如何对STM32F103 ADC寄存器进行配置?
绝代双骄
2021-09-27 09:08:10
STM32F103VET6
2024-04-30 10:50:55
stm32f103 flash模拟eeprom
STM32F103是意法半导体(STMicroelectronics)推出的一款32位单片机系列,该系列芯片具有高性能和丰富的外设接口,广泛应用于工业控制、消费电子、汽车电子等领域。其中
2024-01-09 11:21:36
学习STM32F103的ADC功能
三勺最近在学习STM32F103的ADC功能,居然连最简单的独立模式的单通道的电压采集都不能实现,这就不能忍了,这是对智商的侮辱。
2023-10-24 16:06:03
STM32F103 PWM输出配置有哪些步骤呢
PWM是什么?STM32F103 PWM输出比较模式有哪几种?STM32F103 PWM输出配置有哪些步骤呢?
wo4456
2021-11-15 07:52:12
STM32F103启动文件 精选资料分享
、BLX2.11、BX2.12、TEMPORT2.13、B2.14、IF,ELSE,ENDIF2.15、END三、keil自带的汇编语言帮组文档四、堆栈五、复位程序一、概述STM32F103启动文件STM32F103启动文件是由汇.
倪love
2021-08-05 07:50:31
基于STM32F103的三相变频器方案设计
成熟三相变频器方案,基于STM32F103设计开发: 原理图和PCB源文件(AD软件)。 BOM清单 基于STM32F103控制源代码工程文件(keil) 软件硬件设计详细说明 责任编辑:xj 原文
2020-12-07 10:33:38
芯片短缺如何用HK32F103换掉STM32F103
本篇笔记主要记录因为芯片短缺,使用HK32F103换掉了STM32F103的过程和注意事项。 准备工作 准备之前的STM32F103工程。 测试准备 芯片更换 因为今年F103的价格炒的飞高,之前用
2021-11-01 14:14:48
stm32f103的中断服务函数在启动文件
stm32f103的中断服务函数在启动文件:***startup_stm32f10x_md.s***处
caokyo
2021-08-24 06:47:10
STM32F103系统时钟是如何进行配置的
STM32F103系统时钟配置时钟树的理解确定分频倍频之后再做STM32F103时钟树假设外接晶振8MHz,现在需要配置出系统72MHz时,需要配置代码(外部晶振8MHz配置系统时钟为72MHz
飘逸的D
2021-08-18 08:01:11
STM32F103时钟配置流程 精选资料分享
STM32F103时钟配置流程转载链接STM32F103时钟配置流程http://www.51hei.com/bbs/dpj-109332-1.html(出处: 单片机论坛)前言:一般情况下
goodmbby
2021-08-12 07:39:16
STM32F103单片机时钟树结构图及时钟配置
STM32属于Cortex-M3内核的单片机,时钟结构比之前的51单片机较复杂的多,根据数据手册,STM32F103的时钟结构如下图所示。
2023-01-19 16:36:00
STM32F103入门系列
+GPIOx_LCKR作用和配置STM32F103五分钟入门系列(三)GPIO的常用库函数使用方法总结+一个网络上的误区参考:51单片机(四)定时器中断(+数码管—24小时制钟表)STM32F103五分钟入门系列(八)SysTick滴答定时器+SysTick中断实现跑马灯STM32F103五分钟入门系列(
胡政鹏邮箱
2021-08-17 09:03:47