简介:本资源是一套面向本科毕业设计的完整嵌入式安防系统实战方案,聚焦智能仓库场景下的远程监测与多级报警功能实现,适用于STM32初学者进阶实践及毕设选题参考。系统以STM32F103为核心,集成温湿度、烟雾、人体红外、门磁等传感器,结合OLED本地显示、WIFI远程通信、GSM短信双通道报警及配套Android APP,具备环境感知、状态反馈与主动告警能力。压缩包含524个文件,涵盖可编辑PCB工程(2个pcbdoc)、原理图(2个schdoc)、Keil完整工程(4个uvproj/uvprojx)、C/H源码(74个c+86个h)、编译输出文件(hex/axf/map等)、论文参考(7个docx+44个pdf)、元件清单及4个MP4演示视频,总容量684.32MB。已有835人学习下载,提供从硬件设计、固件开发到APP交互的全链路交付物,结构清晰、注释完整,便于理解模块分工、调试逻辑与系统联调流程。 先说结论:这套基于STM32的智能仓库监测安防系统,是目前本科毕设里性价比最高、知识点覆盖最全的方向之一。它同时踩中了嵌入式、传感器、通信、PCB设计几个热门考察点,工作量足够撑起一篇优秀毕业论文,又不会难到一个人做不完。我前后带过几届学生做类似题目,今天把整个设计和实现过程完整拆开讲一遍,从方案选型、硬件设计、PCB绘制到软件逻辑、联调排错,尽量把该避的坑都提前指出来。
不少同学一上来就纠结“我到底要不要自己做PCB”。我的建议是:如果你题目里写了“含PCB”,那这块必须自己画、自己打样、自己焊接调试,千万别用开发板凑数。答辩时老师翻到实物图或者拿着板子看,一眼就能分辨你是真做了还是走形式。而且本科阶段的PCB设计难度没有想象中高,两层板足够,用嘉立创EDA或者Altium Designer都能完成,成本控制在几十块钱以内。
1. 系统架构与方案选型分析
1.1 项目整体框架:采集、控制、通信三层
智能仓库监测安防系统听起来高大上,本质上就是一个典型的数据采集与远程控制系统。我习惯把整个系统拆成三层来理解:感知层、控制层、应用层。
感知层负责采集仓库环境数据,主要包括温湿度、烟雾浓度、火焰信号、人体红外信号、门窗开关状态等。控制层是核心,用STM32单片机做统一调度,接收传感器数据、执行判断逻辑、控制声光报警设备和通信模块。应用层则是远程监测的出口,可以是手机小程序、PC上位机,或者直接用云平台网页查看。
这三层之间通过串口、GPIO、I2C等接口连接,数据流向是“传感器→STM32→通信模块→云端/手机”。反向控制流程则是“手机/云端→通信模块→STM32→报警/执行机构”。设计时先把这条主链路画出来,后面所有硬件选型和软件编写都围绕它展开,不容易乱。
1.2 主控选型:为什么是STM32F103C8T6
主控芯片我推荐STM32F103C8T6,这也是绝大多数同类毕设的首选。它属于Cortex-M3内核,主频72MHz,Flash 64KB,RAM 20KB,片内资源对于这个项目来说绰绰有余。最关键的是生态成熟:库函数和HAL库资料满天飞,遇到问题搜一下基本都有解决方案,对毕设阶段的学生极其友好。
有的同学会问,那能不能用ESP32或者STM32F407?用ESP32确实自带WiFi,可以省掉一个通信模块,但两个问题:一是ESP32的开发资料虽然在增加,但相对STM32还是少;二是老师看到ESP32会下意识觉得“这跟用Arduino没啥区别”,反而削弱了嵌入式层面的考察分。STM32F103C8T6的优势在于它需要你手动配置时钟、配置外设、处理中断,这正是毕设想考察的能力。
一片C8T6的采购成本大概在5到8块钱,LQFP48封装,手工焊接有一定难度但熟手十分钟能搞定。如果你想降低焊接难度,可以选用同系列的STM32F103C6T6,封装一样,Flash小一点,但货源不如C8T6充足。我还是建议直接上C8T6,性价比和容错率最高。
1.3 传感器与执行器选型对照
传感器选型是整个系统里最灵活的部分,也是拉开工作量差异的地方。我列一个常用方案对照表,方便你根据自己论文的技术路线来选:
| 功能需求 | 推荐器件 | 接口方式 | 采购成本 | 考察知识点 |
|---|---|---|---|---|
| 温湿度检测 | DHT11 / DHT22 | 单总线GPIO | 2~15元 | 时序协议、数据校验 |
| 烟雾/可燃气体 | MQ-2 / MQ-7 | ADC模拟量 | 3~8元 | ADC采集、标定 |
| 火焰检测 | 火焰传感器模块(红外) | GPIO数字量/ADC | 2~5元 | 阈值判断 |
| 人体闯入检测 | HC-SR501人体红外 | GPIO数字量 | 3~6元 | 延时调节、触发逻辑 |
| 门窗状态 | 干簧管/门磁开关 | GPIO数字量 | 1~3元 | 上下拉电阻、状态翻转 |
| 本地显示 | OLED SSD1306 0.96寸 | I2C | 8~15元 | I2C通信、字库显示 |
| 声光报警 | 有源蜂鸣器+LED | GPIO | 1~3元 | 驱动电路、三极管 |
| 远程通信 | ESP8266-01S / HC-05 | UART | 6~15元 | AT指令、串口解析 |
这个清单里,DHT11虽然精度一般(±2°C,±5%RH),但玩明白了单总线时序,就理解了绝大多数低速传感器协议。如果你想让论文多一个“高精度 sensor 接入”的亮点,可以把DHT11换成SHT30,I2C接口,精度高一截,代码也简单。
MQ-2这类气体传感器需要预热,上电刚开始输出的电压会漂移,所以代码里要加延时或者丢弃前几秒的ADC数值。这个细节写进论文里是加分项,答辩时候也可以主动提,说明你真的跑过测试。
2. 硬件设计要点与PCB制作全流程
2.1 最小系统电路设计
STM32最小系统包含电源电路、复位电路、时钟电路、BOOT启动配置、下载调试接口,这五个部分是硬件设计的基石,缺少任何一个都没法跑程序。
电源方面推荐使用AMS1117-3.3稳压芯片,输入5V,输出3.3V给MCU和传感器供电。AMS1117虽然效率一般,但胜在便宜大碗、外围电路简单,只需输入输出各加一个10uF和一个100nF电容滤波。这里注意:如果系统里有MQ-2这种加热型传感器,它的瞬时电流能到150mA以上,AMS1117会明显发热,所以建议把传感器电源和MCU电源用磁珠或0欧电阻分开,避免大电流波动干扰主控供电。
时钟电路采用8MHz无源晶振加两个20pF负载电容,这是F103最经典的配置。晶振到MCU引脚的走线要尽量短,这是PCB布线里的硬性要求。复位电路就一个10K上拉电阻加一个100nF电容,再并联一个按键方便手动复位。
下载调试接口我推荐直接用SWD四线制:SWDIO、SWCLK、GND、3.3V,比JTAG省引脚。板上预留一个4Pin的排针座,配ST-Link V2下载器,成本十几块钱,调试体验远好于串口ISP下载。
2.2 PCB布局布线的核心规则
PCB设计是很多人的痛点,但其实本科阶段不用追求什么高速布线,只要遵守几个基础规则,板子性能就能满足这个项目的需求。
先确定板子尺寸。我建议做成长方形双面板,4cm×6cm左右,既能容纳所有器件,也方便固定在亚克力外壳或者3D打印壳里。板厚用1.6mm,两层铜箔,1盎司铜厚,嘉立创打样5片大概20多块钱,性价比极高。
布局上遵循“功能分区”原则:MCU放中间,晶振紧挨MCU相关引脚,电源电路放一角,传感器接口集中放另一边,通信模块放在板子边缘方便天线朝外。去耦电容必须靠近MCU电源引脚,距离最好不超过3mm,这是很多新手容易忽略的细节——电容放远了,高频噪声滤不掉,系统可能无缘无故复位。
布线规则里最实用的几组参数,我直接给你参考值:信号线最小线宽10mil,电源线30mil以上,GND走线尽量粗,能铺铜的地方全部铺铜。过孔内外径分别用0.3mm/0.6mm,钻孔0.3mm,最基础的成本档位。晶振下面不要走其他信号线,避免耦合干扰。模拟信号线(比如MQ-2的ADC线)离数字信号线远一点,或者用地线隔开。
开关电源区域的布线不涉及,因为整个板子用的是低压直流,没有AC-DC或者反激电源,难度直接降了一档。提醒一句,千万别为了显得高级在毕设里硬塞一个开关电源电路,做不好就是给自己埋雷。
2.3 打样前的检查清单
我见过太多打样回来点不亮板子的情况,大部分是低级错误,这里列一个自检清单,下单前逐项核对:
- 检查每个电源引脚的电压域是否正确,3.3V器件有没有误接到5V上。
- 检查晶振负载电容的焊盘封装,0603的电容不要买成0805。
- 检查USB/串口座子的引脚顺序,很多是翻车重灾区。
- 检查按键、排针的封装方向,确保焊接后能插进外壳。
- 对照原理图用DRC跑一遍连线错误,重点看未连接引脚。
- 确认丝印层的标识清晰,比如电源正负极、串口TX/RX、SWD引脚定义。
- 如果需要贴片生产,勾选嘉立创的SMT贴片服务并核对料单;如果手工焊接,把封装尽量改成直插或大焊盘。
另外我建议打样时顺便在PCB上多放几个测试点,比如把3.3V、GND、PA9、PA10引到排针上。调试阶段不用飞线就能用示波器或万用表量信号,省大量时间。
3. 固件开发:从外设驱动到业务逻辑
3.1 初始化流程与HAL库配置
软件环境我推荐Keil MDK加STM32CubeMX生成HAL库工程。有些老教程还在用标准外设库,能用,但HAL库是目前的主流方向,答辩时提到HAL库和CubeMX配置流程,老师会认为你跟上技术栈了。
CubeMX里需要配置的引脚大致如下:系统时钟RCC选择外部晶振,主频设为72MHz;GPIO里配置蜂鸣器和LED为输出模式,人体红外、火焰传感器、门磁为输入模式;ADC1开启一个通道接MQ-2;I2C1接OLED;USART1接ESP8266,USART2接调试串口(PC端查看日志)。所有配置完成后点击生成代码,再用Keil打开工程写逻辑。
初始化顺序有一个细节:先初始化时钟和GPIO,再初始化外设(I2C、USART、ADC),最后再初始化传感器模块。因为有些传感器上电后需要稳定时间,比如DHT11启动后等1秒再发读取指令才稳,MQ-2更是要预热10分钟以上数值才可靠。我在正式代码里是开机后先OLED显示“SYSTEM BOOTING”,同时延时2秒做传感器稳定,再进入主循环。
3.2 传感器数据采集与处理
DHT11是单总线协议,操作时序比较讲究:主机发送起始信号,DHT11响应后连续输出40位数据,包含湿度整数、湿度小数、温度整数、温度小数、校验和。HAL库里没有现成的单总线驱动,通常用GPIO模拟时序,配合微秒级延时函数实现。代码结构大致如下:
uint8_t DHT11_ReadData(uint8_t *temp, uint8_t *humi) { uint8_t buf[5] = {0}; // 1. 主机拉低总线18ms,然后释放 DHT11_DQ_GPIO_MODE_OUTPUT(); HAL_GPIO_WritePin(DHT11_DQ_PORT, DHT11_DQ_PIN, GPIO_PIN_RESET); HAL_Delay(18); HAL_GPIO_WritePin(DHT11_DQ_PORT, DHT11_DQ_PIN, GPIO_PIN_SET); udelay(30); // 2. 切换到输入模式,等待DHT11响应 DHT11_DQ_GPIO_MODE_INPUT(); while (HAL_GPIO_ReadPin(DHT11_DQ_PORT, DHT11_DQ_PIN) == GPIO_PIN_SET); while (HAL_GPIO_ReadPin(DHT11_DQ_PORT, DHT11_DQ_PIN) == GPIO_PIN_RESET); while (HAL_GPIO_ReadPin(DHT11_DQ_PORT, DHT11_DQ_PIN) == GPIO_PIN_SET); // 3. 读取40位数据 for (int i = 0; i < 40; i++) { while (HAL_GPIO_ReadPin(DHT11_DQ_PORT, DHT11_DQ_PIN) == GPIO_PIN_RESET); udelay(30); if (HAL_GPIO_ReadPin(DHT11_DQ_PORT, DHT11_DQ_PIN) == GPIO_PIN_SET) { buf[i / 8] <<= 1; buf[i / 8] |= 1; } else { buf[i / 8] <<= 1; } while (HAL_GPIO_ReadPin(DHT11_DQ_PORT, DHT11_DQ_PIN) == GPIO_PIN_SET); } if ((uint8_t)(buf[0] + buf[1] + buf[2] + buf[3]) == buf[4]) { *humi = buf[0]; *temp = buf[2]; return 1; } return 0; }这个驱动里最容易出错的是时序延时。DHT11的数据位“0”和“1”是靠高电平持续时间区分的,建议用SysTick做微秒级延时,或者直接__NOP()循环空转。如果你发现读取到的数据偶尔是0或者跳变,基本就是延时不准或者接线太长。
MQ-2的ADC读取则简单得多,直接从ADC通道读原始值,再做一次简单的软件滤波,比如连续采样5次去掉最大最小值取平均。这里可以额外做一个转换:把ADC值映射到烟雾浓度百分比,方便OLED显示和告警阈值对比。火焰传感器输出数字量还是ADC取决于模块型号,如果模块带电位器调节灵敏度,就只接DO引脚;如果想在论文里体现更细腻的数据分析,就用AO引脚读ADC。
3.3 远程上报与告警逻辑
告警逻辑不要写得过于简单,比如“温度超过50度就报警”。好的做法是设计一个状态机,或者用“分级阈值+连续确认”的方式,降低误报率。
我建议把告警分成两个级别:预警和报警。举例来说,温度超过50°C或者烟雾浓度超过一级阈值,蜂鸣器慢速响(比如响300ms停500ms),OLED显示预警信息,同时向远程端发送预警通知;如果温度超过60°C或者烟雾浓度超过二级阈值,蜂鸣器快速响,LED闪烁,远程端弹出紧急报警。人体红外检测到有人闯入或门磁被打开时,直接进入最高级别报警,并且持续录音或拍照(如果加了摄像头模块)。
“连续确认”是什么意思?比如烟雾传感器检测到超标后,不要立刻报警,而是连续检测3次,每次间隔1秒,如果3次都超标才触发报警。这个逻辑能有效避免传感器瞬时波动造成的误报,是工业安防里的常规思路。写进论文里也算一个亮点。
远程上报的核心是串口AT指令控制ESP8266。最基本的流程是:初始化AT、设置WiFi模式、连接路由器、建立TCP连接、发送HTTP GET或POST请求到云平台。下面是典型的AT指令序列:
// ESP8266-01S 通过AT指令连接WiFi并发送HTTP请求 AT\r\n // 测试模块是否在线 AT+CWMODE=1\r\n // 设置为Station模式 AT+CWJAP="SSID","PASSWORD"\r\n // 连接路由器,等待返回WIFI GOT IP AT+CIPSTART="TCP","119.29.29.29",80\r\n // 建立TCP连接 AT+CIPSEND=63\r\n // 发送指定长度数据 GET /api/upload?temp=25&humi=60&smoke=120 HTTP/1.1\r\nHost: yourserver.com\r\n\r\n注意AT指令的返回是异步的,每一句都要等模块返回“OK”或者“ERROR”再执行下一句,千万不能无脑延时。用HAL库的串口接收中断配合一个简单的状态机来解析返回内容,是最稳的做法。如果用的是云平台SDK(比如阿里云、腾讯云、巴法云),那ESP8266的固件可能需要刷成MQTT固件,再通过AT指令发布MQTT消息,逻辑会更复杂一点但更专业。
4. 远程监测方案选型与实测对比
4.1 三种通信方式的取舍
远程监测是本项目的灵魂,通信方案选哪个直接决定工作量方向。我实测过三种主流方案,列一张对比表:
| 方案 | 通信距离 | 成本 | 开发难度 | 适合场景 |
|---|---|---|---|---|
| 蓝牙HC-05 | 10米以内 | 低 | 低 | 宿舍/实验室演示、APP直连 |
| WiFi ESP8266 | 路由器覆盖范围 | 低 | 中 | 真正意义上的远程监测 |
| GSM/GPRS模块 | 全网覆盖 | 中高 | 高 | 无WiFi环境、真实仓库场景 |
本科毕设我推荐优先选ESP8266-WiFi方案。原因是它的技术栈最主流:TCP/IP、HTTP/MQTT协议、云平台对接,这些知识点在答辩时更容易展开,也更贴近实际工程中的应用方式。蓝牙方案适合你不想碰云平台的情况,演示时拿手机走近板子就能看到数据,但“远程”二字名不副实,容易被答辩老师抓住漏洞追问。GSM方案成本高且需要SIM卡,还有月租费用,不推荐。
如果你选了ESP8266,建议用NodeMCU开发板调试逻辑,确认一切正常后再考虑是否换成ESP-01S模块集成到自绘PCB上。NodeMCU自带USB转串口,改写AT指令非常方便;ESP-01S只有8个引脚,需要自己拉GPIO0、GPIO2、RST的上拉电阻,而且板载天线效果一般,信号强度和稳定性都不如NodeMCU调试时好。很多同学在PCB上直接焊ESP-01S,结果连不上路由器,排查半天发现是天线方向不对或者供电电流不够。
这里要提醒一下:ESP8266模块启动瞬态电流能到300mA以上,如果你的电源芯片余量不够,模块会反复重启。解决办法是在模块供电脚加一个大电容(比如470uF电解电容)来缓冲瞬态电流,或者直接从USB 5V接口取电单独供给。
4.2 上位机与移动端接收端搭建
接收端有两条路可以走:一是自己写手机APP或PC上位机,二是用现成云平台的可视化页面。自己写APP看似加分,比如用Android Studio写一个简单的数据展示界面,但开发周期长、调试麻烦;用云平台则可以快速看到效果,比如巴法云、OneNET、阿里云IoT平台都支持免费创建设备,提供HTTP API和MQTT接入。
我更推荐一个组合玩法:用云平台做数据转发和存储,同时自己写一个轻量级的网页从上位机展示数据,两个都做。网页端可以用简单的HTML+JavaScript,通过HTTP GET接口轮询云平台数据,再用ECharts画折线图展示温度湿度变化曲线。这个工作量大概一周就能搞定,但论文里可以多写一小章“监测端设计与实现”,照片和截图也会更丰富。
有一点需要注意:如果选了巴法云这类免费平台,API的调用频率是有限制的,比如免费版每分钟最多请求多少条。STM32端发送数据的频率不要设太高,实测下来10秒上报一次足够,过快反而会被平台限流。
4.3 功耗与稳定性优化
智能仓库监测系统通常要求7×24小时运行,但毕设里没人会真的让它跑几个月,不过“低功耗设计”仍然可以作为论文的一个亮点章节。
STM32的睡眠模式是个很好的切入点。实际工程中不需要每毫秒都在采集数据,可以让MCU在两次采集之间进入睡眠。比如每10秒醒来一次,采集传感器数据、发送到云端、然后继续睡眠,大部分时间都处于低功耗状态。F103进入STOP模式后电流可以降到几十微安,而正常运行时是几十毫安,差距非常明显。
不过采用睡眠模式会带来一个矛盾:DHT11和MQ-2这类传感器本身也需要供电,它们待机时一样耗电。所以更彻底的做法是用MOS管做传感器电源开关,在睡眠前切断传感器电源,只在采集前几百毫秒重新供电。这个设计写进论文里又是一个扎实的小节。
稳定性方面,必须加看门狗。STM32F103内置IWDG(独立看门狗),配置一个128毫秒左右超时时间,主循环里定期喂狗。如果程序跑飞或者死循环,看门狗会自动复位系统,保证设备长期运行不宕机。代码里喂狗的位置要小心,不能放在可能长期阻塞的地方,比如我在DHT11读取函数里加了超时退出机制,防止总线拉死导致主循环卡住。
5. 调试验收与常见问题排查实录
5.1 实测中遇到的典型问题
整个系统的联调阶段是问题最多的时候,我把亲自踩过以及学生反馈比较高频的问题汇总一下,每一条都是真实发生的调试记录。
第一个问题是ESP8266首次上电连不上家里的路由器。排查过程是:串口发送AT,模块有响应;AT+CWJAP,返回ERROR。后来发现是路由器开启了5GHz频段,ESP8266只支持2.4GHz。这不是硬件故障,但会卡住很多新人。解决办法是手机开2.4GHz热点代替路由器测试,或者进路由器后台把双频合一关掉。
第二个问题来自DHT11的数据跳变。在同一环境下,温度值隔几秒就从25°C跳到43°C再跳回来。用示波器看波形后发现信号线太长,上升沿不陡,导致MCU采样的时候误判了高低电平。最终把DHT11到MCU的线缩短到10cm以内,并且在信号线上加了一个4.7K上拉电阻,问题解决。
第三个问题是板子在蜂鸣器响的瞬间MCU会复位。这是典型的电源跌落问题:蜂鸣器是感性负载,关断瞬间会产生反向电动势,如果没有续流二极管,会把电源电压拉低甚至打坏GPIO。解决方案是蜂鸣器两端反向并联一个1N4148二极管,并且蜂鸣器供电单独走电源网络,不要直接从MCU引脚取电,用三极管或MOS管驱动。
第四个问题是OLED显示屏花屏。排查后发现是I2C通信速率太高,SSD1306默认支持400Kbps,但加上长引线和潮湿环境后时序跟不上。把I2C时钟频率降到100Kbps(标准模式)后显示正常。这个经验也说明:SPI接口的OLED虽然多两根线,但抗干扰能力确实比I2C好。
5.2 问题排查速查表
我把联调中最常见的问题整理成一个速查表,遇到问题先对照这张表排查。
| 现象 | 可能原因 | 排查方向 | 解决办法 |
|---|---|---|---|
| 板子上电无反应 | 电源短路/焊接虚焊 | 万用表测3.3V是否正常 | 检查AMS1117和电容极性 |
| ST-Link无法连接 | SWD引脚占用/供电不足 | 检查BOOT0是否拉低 | 按住复位键再点击下载 |
| 程序上电自动复位 | 看门狗误触发 | 检查喂狗位置 | 主循环定期喂狗 |
| 传感器数据全部为0 | I2C/单总线接线错误 | 检查地址和上拉电阻 | 确认引脚复用配置 |
| OLED白屏 | I2C地址不对/速率过高 | 扫描设备地址 | 0x3C或0x3D切换 |
| 手机端看不到数据 | 服务器地址/端口错误 | 用串口助手看AT返回 | 核对IP和端口号 |
| MQ-2数值一直很大 | 传感器未预热 | 上电等待5分钟 | 代码里加预热延时 |
| 报警频繁误报 | 阈值设置太低 | 观察正常运行数据范围 | 提高阈值或加连续确认 |
这只是一部分高频问题,调试验收是一个需要耐心和记录的过程。我建议你从第一天开始就保持一份调试日志,哪怕一行字记录“今天改了DHT11上拉电阻,问题解决”,论文写作时也会轻松很多。
5.3 从毕设到答辩展示:多留一手
很多同学做好实物后就被动了,等答辩前一晚才想起来要拍照、录视频。其实从调试阶段起,就应该随时记录过程材料:示波器波形截图、串口调试助手日志、设计过程的版本对比图,这些都可以作为论文中的“系统测试与分析”素材。
答辩展示时,我不建议只拿出一个静态的板子,可以准备一个完整的两分钟演示脚本:上电后OLED先显示传感器数据,再手动用打火机靠近烟雾传感器,蜂鸣器响、LED闪,同时手机端收到报警推送。这一套动线一跑,老师和评委立刻能看到系统闭环。建议提前录好演示视频,防止现场WiFi不稳定导致连不上云平台。
另外,我强烈建议把Gerber文件和源工程文件打包好,答辩时如果老师问“这个板子是你自己画的吗”,可以直接打开工程现场演示布局和布线。实在不行,至少要能清晰讲出自己梳理过的布局思路和布线规则,这是最容易被追问的分区。
写在最后:这套系统的扩展空间
做完这套系统,你会发现它其实是一个可扩展的嵌入式平台底座。后续如果论文时间有多余,可以考虑加一两个差异化功能,比如通过ESP32-CAM加一个图像采集模块,报警时拍照上传,这就把视觉传感器带进来了;或者用FreeRTOS操作系统替换裸机程序,把采集、显示、通信拆成独立任务,这就往嵌入式操作系统方向推进了一步。
从我的实际带教经验来看,这套项目的完成质量主要取决于PCB设计和联调排错这两块的细心程度。前者决定了你的硬件能不能稳定跑起来,后者决定了你在答辩时能不能从容地讲出经验和教训。真心建议不要只停留在“别人代码能跑通”的水平,自己从原理图一步步推下来,哪怕慢一点,收获是完全不一样的。
本文还有配套的精品资源,点击获取