STM32从零笔记 #1:2026.07.18 灯还没亮,但脑子亮了
写在最前面本笔记主要基于江协科技的课程内容并结合DeepSeek的回答进行整理与补充。我将其记录下来既是为了巩固自身的学习脉络也希望能为同样走在这条路的小伙伴提供一份参考。由于个人水平有限笔记中难免存在理解不到位或表述不精确的地方这都将是我未来持续修正和深耕的方向。如有错漏还望大家不吝指正我们共同进步。了解STM32STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器1.1片上资源/外设不同的型号所具有的外设不同。1.2课程上所用的芯片-命名含义等这些内容我后续再补充我现在想快速上手因为我觉得理论相关的东西会消磨我的积极性。新建工程2.1开发方式基于寄存器、库函数和HAL库2.1.1了解三种开发方式1.寄存器手搓调料比喻你从种菜、磨盐开始自己调配每一种调料的分量。做法直接操作单片机的物理内存地址比如GPIOA-ODR 0x01。你得翻开几百页的芯片手册查每个二进制位代表什么。特点效率最高、最省内存但代码繁琐、可读性极差。换个芯片型号所有地址可能就变了移植非常困难。适用对性能或芯片容量有极端要求的场景或者刚入门想彻底搞懂底层原理的学习阶段。2.库函数标准化菜谱【课程使用的方式】比喻别人把“放3克盐、5毫升酱油”封装成了一张菜谱你照着菜谱写“加盐()”、“加酱油()”。做法ST官方把寄存器的操作封装成一个个函数比如GPIO_SetBits()。你不用记地址了但函数里依然是在操作寄存器。特点可读性好移植性中等。你不用背手册但调用的每个函数依然很底层写几十行代码才能点亮一个灯。适用前几年比较主流的标准库现在ST已经不再更新它了针对新芯片不推出标准库。3. HAL库请个保姆做饭比喻你说“我想吃宫保鸡丁”保姆直接帮你把菜切好、调料配好、火候控制好端到你面前。做法HAL硬件抽象层把底层硬件彻底抽象了。你只需要调用HAL_GPIO_TogglePin()管你是什么型号的芯片管你底层寄存器怎么变这句代码通用。特点极度易用、可移植性极强换芯片几乎不用改代码。缺点是因为封装太厚代码量大、执行效率比寄存器低。适用目前最主流的开发方式尤其是需要图形化配置工具STM32CubeMX的项目。2.2为工程添加基本文件2.2.1添加文件我按照deepseek的方法在右侧写代码的时候系统会报错它找不到相关的文件也就是没有文件可以调用按照课程的内容我们需要先将文件添加到文件库里供程序调用。2.2.1.1我们先俩明确一下这些文件是干什么的工程结构先看整体你的工程现在分成了两大部分startfile启动相关文件——这是芯片“开机”时需要的东西User用户文件——这是你自己写的代码下面我挨个解释每个文件是干什么的。第一部分startfile启动文件组这一组文件的作用是在芯片上电后、执行你的main()函数之前先做准备工作。1.startup_stm32f10x_md.s项目说明文件类型.s汇编文件通俗解释这是芯片的“开机引导程序”。芯片上电后先运行这个文件它负责① 设置堆栈指针 ② 设置中断向量表 ③ 跳转到main()函数要不要管它完全不用编译器会自动处理它为什么有_mdmd Medium Density表示你这个 STM32F103C8 是中容量芯片选这个是对的打个比方就像你电脑开机时先加载BIOS然后才进Windows。startup.s就是芯片的“BIOS”。2.core_cm3.c和core_cm3.h项目说明通俗解释这是ARM Cortex-M3内核的核心文件。STM32F103C8 用的就是 Cortex-M3 内核。这两个文件定义了内核最基本的操作比如中断开关、系统时钟控制等。要不要管它完全不用它们是底层文件你写的代码用不到它们编译器内部会用到。打个比方这就像汽车的发动机底层控制系统——你只管踩油门和刹车不需要直接去调发动机的喷油量。3.system_stm32f10x.c和system_stm32f10x.h项目说明通俗解释这是STM32芯片的系统初始化文件。主要作用是芯片上电后帮你把时钟系统配置好比如设置主频为 72MHz。要不要管它几乎不用。它会自动被调用你只需要知道它帮你的芯片“跑起来”了。打个比方就像你手机开机后系统自动把CPU频率调到最高——你不需要手动设置。4.stm32f10x.h项目说明通俗解释这是STM32芯片的“地图”。它定义了所有寄存器叫什么名字、在哪个地址、每个位的含义是什么。你写的RCC-APB2ENR、GPIOC-CRH这些东西都是从这个文件里来的。要不要管它不用管但要include它。你的代码里#include stm32f10x.h就是把这个“地图”拿过来用。打个比方就像你要去一个陌生的城市手里拿着一张地图。stm32f10x.h就是这张地图。第二部分User用户文件组main.c项目说明通俗解释这就是你写代码的地方。程序从main()函数开始执行你控制 LED 亮的代码就写在这里。要不要管它这是你唯一需要关心和修改的文件。打个比方就像你做饭的操作台——你站在这里操作其他东西锅、灶、调料都在旁边备好了。2.2.2魔法棒通过这个魔法棒来告诉系统所需要调用的说明的路径。设置的是整个文件的全局路径。2.3我们刚才半天干啥呢第一件事把文件拖进Target 1作用告诉编译器“我要编译这个文件”你把main.c、core_cm3.c拖进去编译器就会去编译它们把它们变成机器码。但是编译器在编译main.c的时候是一行一行读你写的代码的。第二件事设置Include Paths作用告诉编译器“如果遇到#include去哪里找那个被引用的文件”当编译器读到你写的#include stm32f10x.h时它需要打开这个文件看看里面写了什么。问题是你虽然把stm32f10x.h拖进了工程列表但编译器打开文件的时候不是从工程列表里找的而是从硬盘上的文件夹路径里找的。我用我的话总结就是将文件拖到工程列表告诉μ5要用到它们设置路径来告知μ5应该去哪里找。我已经慢慢感受到阻力了一下子觉得门槛好高甚至感觉面前就是一堵墙我连门把手都看不到。这是在干啥呢2.4.1.1我先是在第一行写了#include stm32f10x.h这是何意味这是在说“编译器大哥在正式开始翻译我的代码之前请你先打开一个叫stm32f10x.h的文件把里面所有内容复制粘贴到这一行。”它的作用呢就相当于一个导游图或者说是地名手册就比如我想去天安门我写我想去天安门【RCC-APB2ENR】但其实天安门的地址【RCC的真实地址是0x40021000】所以有了这段头文件我去天安们编译器就知道我要去哪里了。2.4.1.3第三行int main(void)从这一行开始程序正式启动了。后面用{包起来的部分就是程序要执行的步骤。这里mainMan告诉你要冲这里启动2.4.1.5这行我没写完应该是RCC-APB2ENR 0x000000102.4.1.6while(1)这东西的意思就是让程序永远执行{}中的动作比如2.4.1.7教程中的代码不想手打可以让ai整理出来今天先到这了不行了没看点已经明天了灯还没点亮…

相关新闻

重新定义网页资源管理:猫抓扩展如何成为你的数字宝藏挖掘器

重新定义网页资源管理:猫抓扩展如何成为你的数字宝藏挖掘器

重新定义网页资源管理:猫抓扩展如何成为你的数字宝藏挖掘器 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾经遇到过这样的情况…

2026/7/20 15:01:27阅读更多 →
05-进阶使用

05-进阶使用

OpenCode 操作指导书(五):进阶使用 适用版本:OpenCode v1.18.3 本篇目标:掌握内置 Agent、自定义 Agent、MCP 接入、多会话与子 Agent 并行、会话分享等进阶能力。 1. 内置 Agent 体系 OpenCode 的 Agent 分三类&…

2026/7/20 19:04:39阅读更多 →
猫抓浏览器扩展:网页媒体资源智能嗅探与下载解决方案

猫抓浏览器扩展:网页媒体资源智能嗅探与下载解决方案

猫抓浏览器扩展:网页媒体资源智能嗅探与下载解决方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 当你浏览网页时,是否曾…

2026/7/20 17:14:39阅读更多 →
Unity特效渲染优化:解决视锥体剔除导致的特效消失问题

Unity特效渲染优化:解决视锥体剔除导致的特效消失问题

1. 项目概述:当特效在镜头外“消失”时做特效的兄弟,尤其是做那种大场面、全屏技能或者环境氛围特效的,肯定都遇到过这个让人抓狂的问题:你精心调了一个覆盖半个屏幕的粒子系统,或者一个巨大的魔法阵,结果角…

2026/7/21 4:02:27阅读更多 →
Linux命令行参数与环境变量详解与应用

Linux命令行参数与环境变量详解与应用

1. Linux命令行参数与环境变量概述在Linux系统中,命令行参数和环境变量是程序与操作系统交互的两大核心机制。作为一位有十年Linux系统开发经验的工程师,我经常看到新手开发者对这两个概念的理解存在偏差。命令行参数(Command-line Arguments…

2026/7/21 4:02:27阅读更多 →
AI Agent开发中的Middleware模式解析与实践

AI Agent开发中的Middleware模式解析与实践

1. Agent模型调用拦截的痛点与Middleware解决方案在开发AI Agent时,我们经常会遇到一个典型场景:当Agent已经完成核心功能开发后,突然需要增加日志记录、安全检查或性能监控等非核心但必要的功能。传统做法是直接修改Agent的核心代码&#xf…

2026/7/21 4:02:27阅读更多 →
Python机器学习系统构建:从数据到部署的全流程指南

Python机器学习系统构建:从数据到部署的全流程指南

1. Python机器学习系统构建全景指南在数据驱动决策的时代,掌握端到端的机器学习系统构建能力已成为数据科学家的核心竞争力。不同于零散的算法实现或模型调优,完整的机器学习系统需要考虑从数据准备到模型部署的全生命周期管理。本文将基于Python生态中最…

2026/7/21 4:02:27阅读更多 →
显卡与内存搭配指南:RTX 5060系列性能优化解析

显卡与内存搭配指南:RTX 5060系列性能优化解析

1. 显卡与内存的博弈:性能焦虑背后的真相当RTX 5060遇上DDR5内存,或是RTX 5060 Ti搭配DDR4时,这个看似简单的硬件组合问题,实际上反映了当前PC硬件领域最典型的认知误区。我经手过上百套装机方案,发现大多数用户会陷入…

2026/7/21 4:02:27阅读更多 →
UART、IIC与SPI串行通信协议对比与应用指南

UART、IIC与SPI串行通信协议对比与应用指南

1. 串行通信协议的三国演义当我在调试STM32的通信接口时,突然意识到一个有趣的现象:开发板上同时存在着UART、IIC和SPI三种串行接口。这让我不禁思考——既然UART作为最基础的串行通信协议已经能够实现数据传输,为什么还需要IIC和SPI这两种协…

2026/7/21 4:00:27阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/21 0:51:49阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 0:51:49阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 0:51:49阅读更多 →
Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

📌教程适配:OpenClaw v2.7.9 | 兼容 Windows10/11、macOS 双系统 📖前言 当下各类本地 AI 工具层出不穷,多数产品仅能完成文字问答交互,很难直接操控电脑执行实际操作。OpenClaw,业内常称小龙虾 AI&#…

2026/7/21 0:01:46阅读更多 →
Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

聊《一次Codex项目复盘,问题最后出在流程而不是模型》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值得做&…

2026/7/21 0:01:46阅读更多 →
手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

大家好,还是我。前几期带大家做了心情日记本和可视化大屏,后台有朋友留言:“能不能教点好玩的?我想做游戏,但一行代码都不会。”行,这期就安排。今天的目标:从零做一个五子棋游戏。 带AI对战、三…

2026/7/21 0:03:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/20 22:51:39阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/20 18:51:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/20 18:51:18阅读更多 →