STM32保姆级入门教程|第7章:串口通信(USART)收发数据 + printf重定向打印调试🔥(功能超详细+CubeIDE 1.19.0手把手)
原创 ✍️ | 新手零门槛,全程新建工程,手把手不踩坑!
文章标签:#stm32 #stm32cubeide #串口通信 #USART #printf重定向 #嵌入式调试 #中断接收 #新手入门 #单片机实战 #HAL库串口
系列前置博客(必看!否则跟不上哦😜):
📚 本章目录(点击可跳转,懒人福音✨)
- 前言(串口有多重要?新手必须拿下!)
- 本章核心功能目标(学完能搞定啥?一目了然)
- 串口通信是什么?大白话讲透(再也不用死记硬背)
- USART硬件接口与接线(必须接对,否则白干!)
- printf重定向原理(为什么能像C语言一样打印?)
- 实战目标:串口收发 + printf打印调试信息
- CubeIDE 1.19.0 新建工程+手把手配置(全程截图,零踩坑)
- 代码功能详解(逐行拆解,新手也能懂)
- 下载验证(见证奇迹的时刻🤩)
- 中断接收实战(收到什么回什么,串口助手互动)
- 关键功能总结(新手必背,避免踩坑)
- 常见问题排查(遇到问题不用慌,速查解决)
- 下篇预告 + 免费资料包
💡 前言(串口到底有多重要?必看!)
大家好,我是BackCatK Chen😎!
前面我们用定时器中断实现了LED精准闪烁,单片机终于能"一心二用"了。但接下来问题来了:程序跑起来后,我们怎么知道它运行得对不对?变量值是多少?卡在哪个环节了? 总不能靠LED闪几下来判断吧?那样效率太低,纯属"盲调",新手调bug能调到怀疑人生!
今天咱们就学嵌入式开发的"眼睛和嘴巴"------串口通信(USART) 。它能让单片机通过两根线(TX/RX)和电脑"聊天",把程序运行状态、变量值、错误信息实时打印到电脑屏幕上。学会这一招,调试效率直接起飞🚀,再也不用瞎猜程序跑没跑、数据对不对了!
重点说明💥:本章不沿用任何前序工程 ,全程从0新建工程,手把手教你配置USART1、实现printf重定向、串口收发数据。本章基于 STM32CubeIDE 1.19.0 版本编写(2025年7月发布的正式版本,芯片列表与STM32CubeMX v6.15.0对齐),哪怕你没保存前序工程,也能轻松跟上,彻底杜绝"工程找不到、配置乱套"的问题!
本章我把串口原理、接线细节、CubeIDE配置、printf重定向代码、中断接收流程全部讲到最细,全程用"大白话+表情包+一步一截图",新手看完不仅能学会,还能直接用串口调试自己的项目,爽到飞起!
🎯 本章核心功能目标(清晰明确,学完不迷茫)
- 搞懂 ✅ 串口通信的本质和USART硬件接口(再也不会接错线)
- 掌握 ✅ CubeIDE 1.19.0 配置USART1的方法(波特率、数据位、停止位全搞定)
- 学会 ✅ printf重定向到串口(像C语言一样用printf打印,调试神器)
- 掌握 ✅ HAL库串口发送函数(HAL_UART_Transmit,想发什么发什么)
- 学会 ✅ 串口中断接收数据(收到电脑发的数据立刻处理,不丢包)
- 实现 ✅ :
- 单片机每秒向电脑发送一次 "Hello STM32!" 字符串
- 单片机收到电脑发来的任何数据,立刻原样返回(回显功能)
- 用printf打印变量值、程序运行状态(调试利器)
- 理解 ✅ 为什么printf重定向是嵌入式调试的"标配"(项目开发必懂)
📡 串口通信是什么?大白话讲透(通俗不烧脑)
3.1 串口通信本质(一句话讲懂,记牢不踩坑)
串口通信 = 单片机与电脑之间的"专属对讲机" 📞
它通过两根线(一根发送TX,一根接收RX),把数据一位一位地顺序传送出去。就像两个人打电话,你说一句我回一句,简单、稳定、成本低,是嵌入式开发中最常用的调试和通信手段,没有之一!
3.2 串口通信关键参数(新手重点记这4个,够用一辈子!)
想让单片机与电脑正常"聊天",双方的"语速"和"说话方式"必须一致,这就需要配置以下4个参数:
| 参数名称 | 功能解释 | 常用值(新手直接抄) |
|---|---|---|
| 波特率(Baud Rate) | 通信速度,单位bps(每秒传送多少位) | 115200(最常用,又快又稳) |
| 数据位(Data Bits) | 一次传送多少位有效数据 | 8位(固定标配) |
| 停止位(Stop Bits) | 数据结束标志,表示一个数据包传完了 | 1位(固定标配) |
| 校验位(Parity) | 用于检测数据传输是否出错 | 无校验(None)(最常用) |
💡 口诀:波特率115200,8位数据1位停,无校验。新手直接背下来,以后配串口就是这组参数,90%的场景都适用!
3.3 串口 vs 其他调试方式(功能大比拼,一眼看清差距)
| 调试方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| LED闪烁 | 简单,不占资源 | 信息量极少,只能表示几种状态 | 最简单的状态指示 |
| 仿真器单步调试 | 功能强大,可看所有变量 | 需要硬件仿真器,打断点影响实时性 | 深度调试,找复杂bug |
| 串口打印(printf) | 信息量大,实时性好,成本低 | 占用一个串口和两个引脚 | 日常调试首选,项目标配 |
💡 结论:串口打印是嵌入式工程师最常用的调试手段,没有之一!学会它,调试效率提升10倍,新手必须拿下!
3.4 USART硬件接口与接线(必须接对,否则白干!)
STM32F103RCT6的USART1引脚定义(新手最常用):
- PA9 → USART1_TX(发送引脚) ,接串口模块的 RX
- PA10 → USART1_RX(接收引脚) ,接串口模块的 TX
接线示意图(重中之重!接错就通信失败):
STM32F103RCT6 USB转TTL模块(CH340/CP2102等)
PA9 (TX) ---------> RX
PA10 (RX) <--------- TX
GND ---------> GND (必须共地,否则电平基准不同,通信失败!)
⚠️ 新手最容易踩的坑:
- TX接TX,RX接RX(错!必须交叉连接:TX→RX,RX→TX)
- 忘记共地(GND)(错!不共地,信号电平没有参考基准,数据全是乱码)
- 用了错误的串口模块(一定要用USB转TTL模块,不能用RS232模块,电平不兼容会烧芯片!)
🖨️ printf重定向原理(为什么能像C语言一样打印?)
4.1 什么是printf重定向?
C语言标准库中的printf函数,默认是把数据打印到屏幕(标准输出) 。但在单片机里,没有操作系统,也没有屏幕,printf不知道该往哪里输出数据,一用就卡死。
printf重定向 就是告诉单片机:"printf打印的东西,统统通过串口1 发送出去!"这样一来,我们在代码里写printf("Hello World!"),数据就会通过PA9引脚发送到电脑的串口助手上显示出来。
4.2 重定向核心操作(两步搞定,新手直接抄)
- 包含头文件 :
#include "stdio.h"(使用printf必须包含) - 重写底层发送函数 :在STM32CubeIDE(GCC编译器)下,需要重写
__io_putchar()函数。这是GCC标准库中printf底层调用的字符输出函数,重写它就能把printf的输出"拐"到串口上去。
🎯 实战目标:串口收发 + printf打印调试信息
本次实战从零新建工程,不依赖任何前序工程,硬件只需一个USB转TTL模块,实现以下功能:
✅ 效果1:单片机每隔1秒向电脑发送 "Hello STM32!\r\n"(串口助手能收到)
✅ 效果2:用printf打印变量值和程序运行状态(例如打印 "System Init OK!"、"Count = xxx")
✅ 效果3:单片机收到电脑发来的任何数据,立刻原样返回(回显功能,证明接收正常)
✅ 效果4:中断方式接收,不丢数据,不占用CPU
硬件基础:PA9(USART1_TX)→ 串口模块RX,PA10(USART1_RX)→ 串口模块TX,GND → GND。
🛠️ CubeIDE 1.19.0 新建工程+手把手配置(一步一截图,零踩坑,新手直接照搬)
重点🔥:全程从0新建工程,不沿用任何前序工程,每一步都有截图,哪怕你是纯新手,跟着做也能搞定!
💡 本章基于 STM32CubeIDE 1.19.0 版本编写。如果你使用的是其他版本(如1.18.0、1.17.0等),界面和操作流程基本一致,可以直接照搬,不用担心版本差异。
步骤1:新建CubeIDE工程(核心第一步,从零开始)
操作步骤(全程截图,直接照搬):
- 打开STM32CubeIDE,点击首页
Start a new STM32 project(新建工程) - 在弹出的窗口中,搜索芯片型号
STM32F103RCT6,选中后点击Next - 填写工程名称(例如
USART1_Printf_Demo),选择工程保存路径,点击Finish,等待工程创建完成


📌 小提醒:工程名称不要有中文、空格,否则可能报错;保存路径尽量简单,避免深层文件夹,方便后续查找工程文件。
步骤2:配置USART1(串口核心配置,新手直接抄)
操作步骤:
-
点击左侧
Pinout & Configuration→Connectivity→ 选择USART1

-
在
Mode栏中,选择 Asynchronous (异步通信模式,最常用)

-
此时右侧芯片引脚图会自动将 PA9 设为 USART1_TX ,PA10 设为 USART1_RX (不用手动配引脚,CubeIDE自动搞定,太贴心了!)

-
切换到
Parameter Settings界面,配置如下参数(直接照抄):- Baud Rate:115200 (波特率)
- Word Length:8 Bits (including Parity) (数据位8位)
- Parity:None (无校验)
- Stop Bits:1 (停止位1位)

📌 功能解释:这一步配置了串口通信的基础参数,必须与电脑端串口助手设置的参数完全一致,否则会出现乱码或收不到数据。新手直接用115200-8-N-1这个组合,全球通用!
步骤3:开启USART1全局中断(实现接收中断必须做!)
操作步骤:
- 切换到
NVIC Settings界面 - 找到
USART1 global interrupt,勾选 Enable(开启USART1中断总开关) - 优先级(Priority)默认即可

📌 功能解释:只有开启中断,单片机才能在收到数据时自动触发中断服务函数,不用CPU一直傻傻查询串口状态。不开启的话,接收函数只能轮询,效率极低,容易丢数据!
步骤4:配置一个LED引脚(可选,用于指示程序运行状态)
为了让效果更直观,我们可以配置PA0作为LED指示灯(和前几章一样),每收到一次数据就翻转一次LED状态。
操作步骤:
- 在引脚图中找到
PA0,设置为GPIO_Output - 配置参数:推挽输出、无上下拉、低速、别名设为
LED

步骤5:生成代码
点击右上角的GENERATE CODE 按钮,等待代码生成完成。

💻 代码功能详解 + 实战编写(逐行拆解,新手也能懂)
生成代码后,我们需要添加4部分代码,实现printf重定向、串口发送、中断接收和LED翻转。
7.1 包含头文件(第一步,必须做)
打开 main.c,在文件开头 /* USER CODE BEGIN Includes */ 和 /* USER CODE END Includes */ 之间添加:
c
/* USER CODE BEGIN Includes */
#include "stdio.h" // 使用printf必须包含的头文件
#include "string.h" // 使用字符串处理函数(后面会用到)
/* USER CODE END Includes */

7.2 printf重定向代码(核心!新手直接复制)
在 main.c 文件上 USER CODE BEGIN 0 方,/* USER CODE BEGIN 0 */ 和 /* USER CODE END 0 */ 之间添加以下代码:
c
/* USER CODE BEGIN 0 */
// printf重定向到底层串口发送函数(新手必加,直接复制)
// 功能:把printf要打印的字符,通过USART1一个一个发送出去
int __io_putchar(int ch)
{
// HAL_UART_Transmit:HAL库串口发送函数
// 参数1:&huart1(指定用USART1发送)
// 参数2:(uint8_t *)&ch(要发送的数据,取ch的地址)
// 参数3:1(只发送1个字节)
// 参数4:0xFFFF(超时时间,设大一点避免发送失败)
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
/* USER CODE END 0 */

📌 逐行功能解释(新手必看):
__io_putchar:这是GCC编译器(STM32CubeIDE使用的编译器)中printf底层调用的字符输出函数,它是一个弱定义函数,我们重写它,让每个字符都通过串口发出去。HAL_UART_Transmit:HAL库提供的阻塞式串口发送函数,会一直等待数据发送完毕才返回。因为printf打印的数据量通常不大,阻塞发送完全够用。
💡 小提醒:添加完这段代码后,就可以在程序的任何地方使用printf了,和C语言一模一样,是不是很爽!
7.3 声明外部变量和缓冲区(用于中断接收)
在 main.c 文件开头,/* USER CODE BEGIN PV */ 和 /* USER CODE END PV */ 之间添加:
c
/* USER CODE BEGIN PV */
// 串口接收数据缓冲区(存放收到的数据)
uint8_t rx_buffer[1]; // 每次只接收1个字节(中断方式下,一字节一中断)
// 接收完成标志(1表示收到数据,0表示没有)
volatile uint8_t rx_complete = 0;
/* USER CODE END PV */

7.4 启动串口中断接收(让串口开始"监听")
在 main 函数中,/* USER CODE BEGIN 2 */ 和 /* USER CODE END 2 */ 之间添加:
c
/* USER CODE BEGIN 2 */
// 启动串口中断接收(核心!一行代码让串口开始监听)
// 参数1:&huart1(指定USART1)
// 参数2:rx_buffer(接收数据存放的数组)
// 参数3:1(每次接收1个字节,收到后立即触发中断)
HAL_UART_Receive_IT(&huart1, rx_buffer, 1);
// 用printf打印系统启动信息(测试重定向是否成功)
printf("\r\n=====================================\r\n");
printf("STM32 USART1 Printf Demo Start!\r\n");
printf("System Clock: %d MHz\r\n", HAL_RCC_GetSysClockFreq()/1000000);
printf("USART1 Baud Rate: 115200\r\n");
printf("Ready to receive data...\r\n");
printf("=====================================\r\n\r\n");
/* USER CODE END 2 */

📌 功能解释:
HAL_UART_Receive_IT:启动中断方式接收,只调用一次,之后每次收到指定数量的数据,就会自动进入中断回调函数。非阻塞,不占用CPU。- 后面的
printf语句用来验证重定向是否成功,同时打印系统时钟频率等调试信息。
⚠️ 特别注意 :在STM32CubeIDE 1.19.0版本中,使用printf时有一个隐藏的坑 ------如果打印的字符串末尾没有
\n,printf的缓冲区不会自动刷新,数据可能不会立即发送出去,导致串口助手收不到或延迟收到。所以新手一定要记住:每个printf语句结尾都要加上\r\n!
7.5 主循环中添加定时发送(每秒发送一次)
在 while(1) 循环中,/* USER CODE BEGIN 3 */ 和 /* USER CODE END 3 */ 之间添加:
c
/* USER CODE BEGIN 3 */
// 每隔1秒发送一次 "Hello STM32!" (用HAL_Delay简单实现,后续可用定时器优化)
HAL_Delay(1000); // 延时1秒
printf("Hello STM32!\r\n"); // 通过串口发送字符串
// 如果收到了数据,处理接收到的数据(回显并翻转LED)
if(rx_complete == 1)
{
rx_complete = 0; // 清除标志
// 把收到的数据原样发送回去(回显功能)
HAL_UART_Transmit(&huart1, rx_buffer, 1, 0xFFFF);
// 翻转LED,指示收到数据
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
// 打印调试信息(可选)
printf("[RX] Received: 0x%02X ('%c')\r\n", rx_buffer[0], rx_buffer[0]);
// 重新启动中断接收(必须!否则只能接收一次)
HAL_UART_Receive_IT(&huart1, rx_buffer, 1);
}
/* USER CODE END 3 */

📌 逐行功能拆解(新手必看,搞懂每一句):
HAL_Delay(1000):延时1秒,让单片机每隔1秒发送一次 "Hello STM32!"。这里用HAL_Delay是为了演示简单,实际项目中建议用定时器中断实现非阻塞延时(参考第6章)。printf("Hello STM32!\r\n"):通过串口发送字符串。\r\n是回车换行,让串口助手显示时自动换行。if(rx_complete == 1):检查是否收到了数据。rx_complete会在中断回调函数中被置1。HAL_UART_Transmit:阻塞式发送函数,把收到的数据原样发回电脑(回显)。HAL_GPIO_TogglePin:翻转LED,直观提示收到了数据。- 重点 :处理完数据后,必须再次调用
HAL_UART_Receive_IT重新开启中断接收,否则只能收到第一个字节,之后就收不到了!
7.6 编写串口中断回调函数(处理接收完成事件)
在 main.c 文件最下方(main 函数之后),/* USER CODE BEGIN 4 */ 和 /* USER CODE END 4 */ 之间添加:
c
/* USER CODE BEGIN 4 */
// 串口接收完成回调函数(HAL库中断机制自动调用)
// 功能:当HAL_UART_Receive_IT设定的接收数量达到时,自动执行此函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
// 判断是不是USART1产生的中断(防止其他串口干扰)
if(huart->Instance == USART1)
{
// 设置接收完成标志,告诉主循环有数据到了
rx_complete = 1;
// 注意:这里不要调用 HAL_UART_Receive_IT 重新开启接收!
// 应该由主循环处理完数据后再重新开启,否则会覆盖数据。
}
}
/* USER CODE END 4 */

📌 功能解释:
HAL_UART_RxCpltCallback:这是HAL库定义的串口接收完成回调函数,名字固定,不能改!当HAL_UART_Receive_IT设定的接收数量(本例是1字节)完成时,硬件自动触发中断,HAL库处理后调用这个回调函数。- 我们在回调里只做最简单的事:置标志位。不要在回调里做复杂处理(比如printf打印),否则可能导致中断嵌套或其他问题。把数据处理放到主循环里,这是良好的编程习惯。
✨ 下载验证(见证奇迹的时刻!新手必看)
代码编写完成后,就可以下载到单片机,看看串口助手是不是能收到数据了!
操作步骤:
- 连接J-Link/ST-Link到单片机和电脑(下载程序用)
- 连接USB转TTL模块到电脑USB口,并确保接线正确(PA9→RX, PA10→TX, GND→GND)
- 打开电脑上的串口调试助手软件(推荐使用SSCOM、XCOM或VOFA+)
- 设置串口参数:端口号 选USB转TTL模块对应的COM口,波特率115200,数据位8,停止位1,无校验,无流控
- 点击 打开串口
- 回到CubeIDE,点击右上角的"下载"按钮,下载程序到单片机
- 下载完成后,单片机自动运行,观察串口助手窗口
【截图17:下载程序界面(标注下载按钮、下载完成)】
【截图18:串口助手参数设置(标注端口号、115200、8N1、打开串口)】
✅ 预期现象:
-
串口助手启动信息 :一上电就会收到类似以下信息:
===================================== STM32 USART1 Printf Demo Start! System Clock: 72 MHz USART1 Baud Rate: 115200 Ready to receive data... ===================================== -
每秒收到一次:"Hello STM32!" 字符串,说明定时发送成功。
-
回显功能测试 :在串口助手的发送区输入任意字符(比如
A),点击发送,会立刻在接收区看到收到的字符A,同时LED状态翻转,并且会打印类似[RX] Received: 0x41 ('A')的调试信息。

🎉 恭喜!你已经学会了STM32的串口通信,并掌握了printf重定向这个调试神器!以后写代码再也不用瞎猜了,printf一下,变量值、程序流程一目了然!
📝 关键功能总结(新手必背,避免踩坑!)
- 📡 串口接线:TX接RX,RX接TX,必须共地(GND),否则通信失败。
- ⚙️ 串口参数:波特率115200,8位数据,1位停止,无校验(115200-8-N-1),必须与串口助手一致。
- 🖨️ printf重定向 :重写
__io_putchar,调用HAL_UART_Transmit发送字符。在CubeIDE(GCC编译器)下只需要这一个函数即可。 - 🔔 中断接收启动 :
HAL_UART_Receive_IT(&huart1, rx_buffer, 1);只调用一次,收到指定字节数后触发回调。 - 📌 接收回调函数 :
HAL_UART_RxCpltCallback,名字固定,内部只做标志位置位,不处理复杂逻辑。 - 🔄 重新开启接收 :在主循环处理完数据后,必须再次调用
HAL_UART_Receive_IT,否则接收中断只触发一次。 - 🚀 阻塞发送 vs 中断发送 :
HAL_UART_Transmit是阻塞发送,适合少量数据;大量数据发送建议用HAL_UART_Transmit_IT或DMA(后续章节)。 - 📊 调试利器:printf可以打印变量值、程序流程、错误信息,比LED闪烁强大100倍!
- ⚠️ 换行符陷阱 :在STM32CubeIDE 1.19.0中,printf语句结尾必须加
\r\n,否则数据可能不会立即发送到串口。
❌ 常见问题排查(遇到问题不用慌,对照排查!新手必看)
新手最容易踩的7个坑,全部整理好了,遇到问题直接对照,快速解决!
-
🚫 串口助手收不到任何数据
- 原因1:接线错误(TX接TX,RX接RX,或者忘了共地)。检查:万用表测一下GND是否连通。
- 原因2:串口模块驱动未安装(CH340/CP2102需要装驱动)。
- 原因3:串口助手端口选错(选成其他COM口了)。
- 原因4:程序未启动串口(没调用
HAL_UART_Receive_IT或发送函数)。
-
⏱️ 串口助手收到乱码
- 原因1:波特率设置不一致(最常见!检查CubeIDE配置和串口助手是否都是115200)。
- 原因2:晶振频率配置错误(STM32F103默认使用外部8MHz晶振,若板子没有外部晶振需改为内部HSI,否则系统时钟不准)。
-
🔇 printf打印不显示或卡死
- 原因1:没有重定向
__io_putchar函数。 - 原因2:重定向函数中使用了
HAL_UART_Transmit,但串口未初始化完成(确保在MX_USART1_UART_Init()之后调用printf)。 - 原因3:printf语句末尾忘记加
\r\n,缓冲区未刷新。解决 :每个printf结尾都加上\r\n。
- 原因1:没有重定向
-
💡 只能收到第一个字节,后续收不到
- 原因1:在主循环处理完数据后,忘记重新调用
HAL_UART_Receive_IT。 - 原因2:在回调函数里直接调用了
HAL_UART_Receive_IT,导致数据覆盖或标志紊乱。正确做法:回调里只置标志,主循环处理完后重新开启接收。
- 原因1:在主循环处理完数据后,忘记重新调用
-
❌ 编译报错 "undefined reference to __io_putchar"
- 原因:可能编译器未链接标准库。解决:项目属性 → C/C++ Build → Settings → Tool Settings → MCU GCC Linker → 勾选
Use nano.specs(使用精简标准库)。
- 原因:可能编译器未链接标准库。解决:项目属性 → C/C++ Build → Settings → Tool Settings → MCU GCC Linker → 勾选
-
🚨 接收数据时程序跑飞或死机
- 原因1:接收缓冲区溢出(数组定义太小)。确保缓冲区大小足够容纳可能收到的最大数据量。
- 原因2:中断优先级设置不当导致嵌套问题。新手保持默认优先级即可。
-
🖥️ 串口助手显示正常,但printf没有输出浮点数
- 原因:STM32CubeIDE 1.19.0 默认未启用浮点数printf支持。解决:项目属性 → C/C++ Build → Settings → MCU GCC Linker → Miscellaneuos → 在 "Linker flags" 中添加
-u _printf_float。
- 原因:STM32CubeIDE 1.19.0 默认未启用浮点数printf支持。解决:项目属性 → C/C++ Build → Settings → MCU GCC Linker → Miscellaneuos → 在 "Linker flags" 中添加
💡 小提醒:如果还是解决不了,评论区留言,我会一一回复,帮你排查问题~ 新手遇到问题很正常,多试几次,慢慢就不会踩坑了!
📢 下篇预告(精彩不容错过!新手必追)
STM32保姆级入门教程|第8章:PT100高精度测温实战 + ADS1232驱动 + 24位ADC数据解析
手把手教你:从0配置SPI接口、驱动24位高精度ADC芯片ADS1232、处理PT100采样数据、用串口打印实时温度曲线。搞懂工业级测温的完整信号链,为你的项目加上"专业范儿"!
原创不易,创作花费大量时间和精力💦,如果本文对你有帮助,欢迎 点赞👍、收藏⭐、关注➕,有任何问题,评论区留言,我会一一回复!你的支持,就是我持续更新的动力~
🎁欢迎关注公众号,获取更多技术干货!
博主准备到这份资料包涵盖了从硬件电路设计 到STM32单片机开发 ,再到Linux系统学习的全链路内容,适合不同阶段的学习者:
- 硬件基础:包含硬件电路合集、硬件设计开发工具包,帮你打牢底层基础。
- STM32专项:从环境搭建、开发工具、传感器模块到项目实战,还有书籍和芯片手册,一站式搞定STM32学习。
- C语言进阶:C语言学习资料包,助你掌握嵌入式开发的核心语言。
- 面试求职:嵌入式面试题合集,提前备战技术面试。
- Linux拓展 :Linux相关学习资料包,拓宽技术视野。

📂资料包目录
- 00-STM32单片机环境搭建
- 01-硬件电路合集
- 02-硬件设计开发工具包
- 03-C语言学习资料包
- 04-STM32单片机开发工具包
- 05-STM32传感器模块合集
- 06-STM32项目合集
- 07-STM32单片机书籍&芯片手册
- 08-Linux相关学习资料包
