STM32保姆级入门教程|第3章:从新建工程到LED闪烁点灯(Hex生成+ST-Link/J-Link切换全攻略)

系列前置博客:

  1. STM32保姆级入门教程|第1章:零基础必看,从认知到实战全解析
  2. STM32CubeIDE配置STM32F103RCT6点亮PA0 LED+J-Link下载教程
    本文核心:解决新手"Hex文件找不到、调试器切换报错、点灯代码难维护"三大痛点,掌握Hex文件自定义生成、ST-Link/J-Link无缝切换,最终实现LED闪烁点灯

一、前置准备

1. 软件准备

  • 已安装STM32CubeIDE(2024/2025版),并完成基础环境配置;
  • 已安装ST-Link、J-Link官方驱动(确保电脑能识别调试器);
  • 前置工程:已完成STM32F103RCT6 PA0引脚GPIO输出模式基础配置(无基础工程可参考系列第二篇)。

2. 硬件准备

硬件器材 规格与说明
STM32开发板 STM32F103RCT6核心板(PA0引脚接LED,低电平点亮)
调试器 ST-Link、J-Link
辅助工具 USB数据线、SWD杜邦线(看是否需要外置LED)、万用表(可选,验证电平)

二、新建STM32CubeIDE工程(零基础也能会)

步骤1:启动软件并选择工作空间

【对应截图1:STM32CubeIDE启动与工作空间选择界面】

  1. 双击打开STM32CubeIDE,首次启动弹出工作空间选择窗口,选择全英文、无空格、无特殊符号 的文件夹(如F:\Stm32Studio);
  2. 勾选Use this as the default and do not ask again,点击Launch启动软件。

步骤2:新建STM32工程

  1. 点击顶部菜单栏 FileNewSTM32 Project,弹出芯片选择窗口。

  2. Commercial Part Number搜索框输入STM32F103RCT6,选中对应芯片后点击Next

💡划重点 记得把第二个红框里面的星星点亮收藏起来,下次就可以直接选择不用搜索

  1. 工程配置页面按以下要求填写:

    • Project Name:填写STM32F103RCT6_LED_Blink(禁止中文/空格/特殊符号);
    • Project Location:默认继承工作空间路径,无需修改;
    • 其余选项保持默认,点击Finish
  2. 弹出切换透视图提示,勾选Remember my decision,点击Yes,进入CubeMX配置界面。

步骤3:基础配置(GPIO+时钟+调试接口)

  1. 左侧System CoreSYSDebug下拉选择Serial Wire(SWD模式,必配,否则芯片锁死)。
  1. 左侧System Core → RCC,HSE下拉选择Crystal/Ceramic Resonator(外部晶振),无外部晶振则选Internal RC Oscillator。
  1. 引脚视图找到PA0,右键选择GPIO_Output

  2. 左侧System CoreGPIO,选中PA0,配置参数:

    • GPIO output level:High(初始熄灭);
    • GPIO mode:Output Push Pull(推挽输出);
    • Pull-up/Pull-down:No pull-up and no pull-down;
    • User Label:LED1(别名,方便代码调用)。
  3. 顶部Clock ConfigurationHCLK输入72,回车自动配置时钟树,无红色报错即成功。

  4. 点击右上角保存图标(💾),弹出提示点击Yes,等待代码生成完成后进入代码编辑界面。


三、Hex文件自定义生成配置(精准找到烧录文件)

新手常见痛点:编译后找不到Hex文件、默认路径太深、想自定义文件名/保存位置,以下是全流程配置:

步骤1:开启Hex文件生成(默认关闭,必配)

  1. 右键点击工程名(STM32F103RCT6_LED_Blink)→ 选择Properties,打开工程属性窗口。

  2. 在左侧列表中找到C/C++ BuildSettings → 右侧选择Tool SettingsMCU Post build outputs

  3. 勾选以下选项(核心):

    • Convert to Intel Hex file (-Oihex):生成Intel格式Hex文件(通用烧录格式);
    • Convert to binary file (-Obinary)(可选):生成bin文件,兼容更多烧录工具;
  4. 点击Apply and Close保存配置。

步骤2:自定义Hex文件保存路径/文件名(可选,新手友好)

  1. 仍在C/C++ BuildSettingsMCU Post build outputs界面;
  2. Artifact name(有的版本叫 Output file name)输入框中自定义文件名(如STM32F103RCT6_LED_Blink);
  3. 若想修改保存路径,可在Build Artifact中调整Output directory(建议新手先使用默认路径,避免配置错误)。

步骤3:编译验证Hex文件生成

  1. 点击顶部工具栏锤子图标 (Build)编译工程,控制台显示Build Finished. 0 errors, 0 warnings.即为成功;
  2. 打开工程目录 → Debug文件夹,可看到生成的xxx.hex文件(与自定义文件名一致)。

四、ST-Link/J-Link调试器切换全流程(附避坑)

核心需求:同一工程兼容ST-Link和J-Link两种调试器,无需重新创建工程,只需切换调试配置:

前提:硬件连接规则

调试器引脚 STM32核心板SWD引脚 备注
3.3V 3.3V/VCC 禁止接5V,否则烧坏芯片/调试器
SWDIO SWDIO/DIO 数据引脚,接反无法通信
SWCLK SWCLK/CLK 时钟引脚,接反无法通信
GND GND 共地,必须接

步骤1:配置ST-Link调试器(默认配置)

  1. 点击顶部菜单栏RunRun Configurations...,打开运行配置窗口;

  2. 左侧选择STM32 Cortex C/C++ Application → 右键工程名 → New Configuration,新建配置;

  3. 右侧切换到Debugger选项卡:

    • Debug probe选择ST-Link (ST-LINK GDB server)
    • Interface选择SWD(必选,JTAG模式占用引脚多,新手不用);
    • Reset mode选择Software system reset(烧录后自动复位运行);
  4. 点击Apply保存,命名为ST-Link_Config(方便区分)。

步骤2:切换为J-Link调试器

【对应截图15:J-Link调试配置界面】

  1. 仍在Run Configurations窗口,复制上述ST-Link配置(右键ST-Link_ConfigDuplicate),命名为J-Link_Config
  2. 切换到Debugger选项卡:
    • Debug probe选择 SEGGER J-Link
    • Interface仍选择SWD
    • Device name填写芯片型号(如STM32F103RC,必须精准,否则识别失败);
  3. 点击Apply保存配置。

步骤3:调试器切换使用

  1. 烧录时,点击顶部工具栏绿色播放图标旁的下拉箭头 ,选择对应的配置(ST-Link_Config/J-Link_Config);
  2. 点击播放图标,软件自动识别对应调试器并烧录程序,无需重复接线(只需替换调试器硬件)。

五、LED闪烁点灯

完成工程、Hex、调试器配置后,编写优化版闪烁代码,解决基础版代码"难维护、改引脚要全改"的问题:

1. 闪烁核心原理

LED闪烁本质是**"电平翻转+延时"**:PA0引脚交替输出低电平(亮)、高电平(灭),中间加入固定时长延时,形成视觉上的闪烁效果。

  • 优化版思路:用宏定义封装引脚和电平逻辑,代码可读性更高、更易维护。

2. 优化版闪烁代码编写(附截图)

【对应截图17:main.c文件代码编辑界面】

  1. 打开工程CoreSrcmain.c文件,在/* USER CODE BEGIN Includes */下方添加宏定义(封装引脚和电平):
c 复制代码
/* USER CODE BEGIN Includes */
// 封装LED引脚和电平逻辑,后期修改仅需改此处
#define LED1_PORT GPIOA
#define LED1_PIN  GPIO_PIN_0
#define LED1_ON   GPIO_PIN_RESET  // 低电平点亮
#define LED1_OFF  GPIO_PIN_SET    // 高电平熄灭
/* USER CODE END Includes */
  1. while(1)主循环中写入优化版闪烁代码:
c 复制代码
/* USER CODE BEGIN WHILE */
while (1)
{
  // 点亮LED
  HAL_GPIO_WritePin(LED1_PORT, LED1_PIN, LED1_ON);
  HAL_Delay(500);  // 延时500ms
  // 熄灭LED
  HAL_GPIO_WritePin(LED1_PORT, LED1_PIN, LED1_OFF);
  HAL_Delay(500);  // 延时500ms
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */

⚠️ 关键说明:

  • 宏定义LED1_ON/LED1_OFF对应硬件电路的点亮逻辑,若你的LED是高电平点亮,只需修改这两个宏定义;
  • HAL_Delay()是毫秒级延时函数,参数越大,闪烁越慢,例如改为1000则1秒亮、1秒灭。

六、实战验证(多调试器烧录+闪烁效果测试)

1. 编译烧录验证

  1. 点击顶部工具栏锤子图标(Build)重新编译工程,确保无报错;
  2. 选择任意调试器配置(ST-Link/J-Link),点击播放图标烧录程序;
  3. 烧录完成后,开发板PA0引脚的LED会以1秒为周期循环闪烁,验证成功。

STM32保姆级入门教程|第3章:从新建工程到LED闪烁点灯

2. 手动烧录Hex文件(备用方案)

若调试器直接烧录失败,可手动烧录Hex文件:

  • ST-Link:使用ST-Link Utility软件,选择FileOpen File导入Hex文件 → Program & Verify烧录;
  • J-Link:使用J-Flash软件,选择芯片型号 → 导入Hex文件 → Auto programming烧录。

七、常见问题排查(90%新手必踩的坑)

故障现象 排查优先级 解决方法
生成Hex文件后提示"文件为空" 1 1. 未勾选Convert to Intel Hex file;2. 工程编译有报错,需先解决编译错误;3. 自定义路径无写入权限(换默认路径)
切换J-Link后提示"Device not found" 1 1. 检查J-Link驱动是否安装成功;2. Device name填写错误(如STM32F103RC而非STM32F103RCT6);3. SWD接线是否接反
切换调试器后烧录成功但LED不闪 2 1. 延时函数参数过小(如10ms,肉眼无法识别);2. 宏定义电平逻辑与硬件不符;3. 芯片复位模式配置错误(改为Software system reset
新建工程编译报错 2 1. 工程名/路径含中文/空格;2. 时钟树配置错误(HCLK超过芯片最大主频);3. 固件包未完整安装

八、核心知识点总结

  1. 新建工程关键:必须配置SWD调试接口和时钟树,PA0引脚设为推挽输出模式,避免芯片锁死或功能异常;
  2. Hex文件生成 :STM32CubeIDE默认不生成Hex文件,需手动勾选Convert to Intel Hex file,自定义文件名/路径更便于管理;
  3. 调试器切换 :同一工程可创建多个调试配置,ST-Link/J-Link核心区别是Debug probe选择和J-Link需填写精准的Device name
  4. LED闪烁优化:用宏定义封装引脚和电平逻辑,后期修改无需改动核心代码,提升可维护性。

原创不易,如果本文对你有帮助,欢迎点赞👍、收藏⭐、关注➕,有任何问题都可以在评论区留言,我会一一回复!

本文所使用的工程文件已上传至配套资源中,如有需要可自行下载。也可关注博主后留言获取。

🎁欢迎关注,获取更多技术干货!

公众号:BackCatK Chen,文章末尾可以扫码关注

🎁资料包亮点

这份资料包涵盖了从硬件电路设计STM32单片机开发 ,再到Linux系统学习的全链路内容,适合不同阶段的学习者:

  • 硬件基础:包含硬件电路合集、硬件设计开发工具包,帮你打牢底层基础。
  • STM32专项:从环境搭建、开发工具、传感器模块到项目实战,还有书籍和芯片手册,一站式搞定STM32学习。
  • C语言进阶:C语言学习资料包,助你掌握嵌入式开发的核心语言。
  • 面试求职:嵌入式面试题合集,提前备战技术面试。
  • Linux拓展:Linux相关学习资料包,拓宽技术视野。
📂资料包目录
  • 00-STM32单片机环境搭建
  • 01-硬件电路合集
  • 02-硬件设计开发工具包
  • 03-C语言学习资料包
  • 04-STM32单片机开发工具包
  • 05-STM32传感器模块合集
  • 06-STM32项目合集
  • 07-STM32单片机书籍&芯片手册
  • 08-Linux相关学习资料包
相关推荐
辰哥单片机设计3 小时前
MPU6050陀螺仪(STM32)
stm32·单片机·嵌入式硬件
我不是程序猿儿6 小时前
【嵌入式】stm32的时钟配置入门及切入
stm32·单片机·嵌入式硬件
是大强7 小时前
斯密特触发器作用
单片机
爱倒腾的老唐8 小时前
03、制作 STM32 最小系统
stm32·单片机·嵌入式硬件
悠哉悠哉愿意9 小时前
【物联网学习笔记】串口接收
笔记·单片机·嵌入式硬件·物联网·学习
灵魂尾巴.9 小时前
单片机数据存储器
单片机·嵌入式硬件
番茄灭世神9 小时前
空气质量检测仪项目笔记——硬件介绍
stm32·单片机·嵌入式·gd32·国产芯片
集芯微电科技有限公司10 小时前
适用于GaN PD快充65W/33W超高频驱动器
人工智能·单片机·嵌入式硬件·深度学习·神经网络·机器学习·生成对抗网络
GodKK老神灭10 小时前
Keil下载时的具体指令详解
单片机·嵌入式硬件