嵌入式实习

#你以为的实习VS真实的实习#实习之前:

跟了个再常见不过的嵌入式小项目——用STM32F4做个温湿度监测仪,说是“开发”,其实更像拆零件拼积木。对着数据手册啃寄存器配置,勉强搞懂了GPIO怎么翻IO口,HAL库怎么初始化串口;跟着例程改了改ADC采样,勉强能从传感器抠出点数据;做分页显示?其实就是串口发指令,让LCD屏一行行滚着显示温湿度数值。

碰着bug就抓瞎:传感器数据乱跳,以为是代码问题,在Keil里下了二十多个断点,单步跟踪寄存器状态,最后发现是面包板电源接触不良;串口收发乱码,对着示波器看波形,折腾半天才想起没配波特率时钟树;想加个低功耗模式,翻遍参考手册改了电源控制寄存器,结果芯片直接罢工,折腾到实验室快关门才被学长提醒“没开唤醒源”。

刷B站看到别人用AI写代码,想着“这玩意儿能救我”,下班路上就搜“STM32 AI辅助开发”,下了三四个插件,装完发现要么识别不了HAL库语法,要么生成的代码跑飞,最后还是得翻数据手册——跟原来没差别。

实习之后:

满脑子想着“终于能接触点‘高级’项目了”,结果入职第一天,导师扔来个需求:“基于STM32H7的新开发板,实现电机FOC控制,下周出原型。”盯着开发板上的H7芯片——跟之前用的F4架构差了一截,寄存器位宽都不一样;HAL库版本升级,好多函数名都变了;连串口调试助手都连不上,提示“端口被占用”,折腾半小时才发现是虚拟机抢了COM口。

对着需求文档发懵:矢量控制?PID参数整定?以前只玩过开环PWM调速,现在要搞闭环反馈,公式推导看得头大;查社区论坛,帖子大多是“STM32F1跑FOC”的老帖子,H7的资料少得可怜;改了三版代码,电机要么抖得像筛糠,要么直接烧保险丝,导师扫了眼代码:“中断优先级没配对,你当这是51单片机?”

半夜蹲在实验室啃面包,盯着示波器上跳动的波形,突然有点恍惚:“是不是我太笨了?别人都能上手的项目,我怎么连基础配置都搞不定?”

好了,矫情到此为止。

后来才明白,嵌入式这行哪有什么“酷炫项目”?不过是新人踩过的坑比代码行数还多。我们刚接触新平台时,连寄存器地址都记不住,看数据手册像看天书,焊个杜邦线都能连反;被硬件工程师吐槽“原理图都看不懂”,被测试同事抱怨“代码没注释”——这些都太正常了。

公司招你进来,不是因为你多厉害,是因为他们相信“普通人也能通过学习解决问题”。实习不是考试,没必要追求“完美交付”,你该做的是:拆开发板时多拍两张引脚图,调不通时多问一句“是不是电源问题”,被骂了就记笔记下次避开——这些“笨功夫”,才是嵌入式工程师的生存法则。

别总盯着“我要学多少新技术”,也摸摸自己焊坏的开发板、改秃的代码、熬红的眼睛——这些才是你成长的证据。

上一个十年,我们在课本里背“嵌入式系统”;这一个十年,我们在焊锡味里,把它变成自己的手艺。之前:

跟了个再常见不过的嵌入式小项目——用STM32F4做个温湿度监测仪,说是“开发”,其实更像拆零件拼积木。对着数据手册啃寄存器配置,勉强搞懂了GPIO怎么翻IO口,HAL库怎么初始化串口;跟着例程改了改ADC采样,勉强能从传感器抠出点数据;做分页显示?其实就是串口发指令,让LCD屏一行行滚着显示温湿度数值。

碰着bug就抓瞎:传感器数据乱跳,以为是代码问题,在Keil里下了二十多个断点,单步跟踪寄存器状态,最后发现是面包板电源接触不良;串口收发乱码,对着示波器看波形,折腾半天才想起没配波特率时钟树;想加个低功耗模式,翻遍参考手册改了电源控制寄存器,结果芯片直接罢工,折腾到实验室快关门才被学长提醒“没开唤醒源”。

刷B站看到别人用AI写代码,想着“这玩意儿能救我”,下班路上就搜“STM32 AI辅助开发”,下了三四个插件,装完发现要么识别不了HAL库语法,要么生成的代码跑飞,最后还是得翻数据手册——跟原来没差别。

实习之后:

满脑子想着“终于能接触点‘高级’项目了”,结果入职第一天,导师扔来个需求:“基于STM32H7的新开发板,实现电机FOC控制,下周出原型。”盯着开发板上的H7芯片——跟之前用的F4架构差了一截,寄存器位宽都不一样;HAL库版本升级,好多函数名都变了;连串口调试助手都连不上,提示“端口被占用”,折腾半小时才发现是虚拟机抢了COM口。

对着需求文档发懵:矢量控制?PID参数整定?以前只玩过开环PWM调速,现在要搞闭环反馈,公式推导看得头大;查社区论坛,帖子大多是“STM32F1跑FOC”的老帖子,H7的资料少得可怜;改了三版代码,电机要么抖得像筛糠,要么直接烧保险丝,导师扫了眼代码:“中断优先级没配对,你当这是51单片机?”

半夜蹲在实验室啃面包,盯着示波器上跳动的波形,突然有点恍惚:“是不是我太笨了?别人都能上手的项目,我怎么连基础配置都搞不定?”

好了,矫情到此为止。

后来才明白,嵌入式这行哪有什么“酷炫项目”?不过是新人踩过的坑比代码行数还多。我们刚接触新平台时,连寄存器地址都记不住,看数据手册像看天书,焊个杜邦线都能连反;被硬件工程师吐槽“原理图都看不懂”,被测试同事抱怨“代码没注释”——这些都太正常了。

公司招你进来,不是因为你多厉害,是因为他们相信“普通人也能通过学习解决问题”。实习不是考试,没必要追求“完美交付”,你该做的是:拆开发板时多拍两张引脚图,调不通时多问一句“是不是电源问题”,被骂了就记笔记下次避开——这些“笨功夫”,才是嵌入式工程师的生存法则。

别总盯着“我要学多少新技术”,也摸摸自己焊坏的开发板、改秃的代码、熬红的眼睛——这些才是你成长的证据。

上一个十年,我们在课本里背“嵌入式系统”;这一个十年,我们在焊锡味里,把它变成自己的手艺。
全部评论
佬,双非本 2 硕,对硬件电路不咋感兴趣,模电数电稀烂,比较喜欢码代码,嵌入式推荐哪条路呢。
1 回复 分享
发布于 2025-08-02 14:17 江苏
看到“焊锡味”这三个字感觉这辈子都有了。
点赞 回复 分享
发布于 2025-09-09 16:09 广东
那下一个十年会怎样呢大佬
点赞 回复 分享
发布于 2025-07-21 13:50 四川

相关推荐

2025-12-22 12:20
已编辑
南昌大学 嵌入式软件开发
基本是围绕项目问的,参考价值有限1. 请大概说一下CAN总线的仲裁和通信逻辑。2. CAN总线的显性电平跟隐性电平是怎么区分的?3. CAN总线的通信波特率是多少?4. 实际传输过程中是否遇到过CAN总线错误(如发送或接收错误、数据丢失等)相关问题?5. 如何对不同ID的CAN消息做过滤?6. CAN消息过滤器的屏蔽规则(过滤规则)是什么?7. IMU模块通过什么方式通信?8. 从IMU获取数据的整个流程是什么?9. IMU数据多久同步一次?10. 接收IMU数据是在任务中周期性地查询吗?11. 查询IMU数据的频率是多高?12. 任务是通过OS delay来实现延时的吗?13. 创建task后,task里面都会做哪些处理,任务运行的结构是什么样的?14. 读取IMU数据时,查询过程中会发什么指令,IMU如何回应?15. IMU发送数据的触发动作是什么?16. IMU的发送频率是多少?17. 在不清楚IMU发送频率的情况下,如何决定接收任务的周期以避免丢包?18. 接收IMU数据时,buffer是怎么设置的?如果一包数据接收完但未处理,后续再来数据会怎么处理?19. FreeRTOS的任务调度机制是什么样的?20. task有几个状态?21. 任务从运行态切到就绪态的切换条件是什么?22. 任务从运行态到阻塞态的情况中,等待的资源有哪些?主动进入阻塞态的方式有哪些?23. 通过消息队列传输数据时,接收端是怎么处理的?24. 就绪态的任务是通过什么方式管理的?25. 任务上下文切换的过程是什么?会保存哪些变量?26. ARM架构的通用寄存器有哪些?27. 任务栈空间是怎么分配的?28. 是否对栈的使用率(使用了多少)做过检测?29. 电机控制是通过什么方式实现的(如何控制电机的转速和方向)?30. 电机转速调节的具体实现方式是什么?31. 实现DMA功能需要配置哪些内容?32. DMA从外设(如IMU数据接收)搬运到RAM时,源地址和目的地址配置的差异(尤其是增长方向方面)有哪些?33. 给了一段数组和指针运算的代码,给出输出结果并说明推导过程。题目还行,没有手撕
点赞 评论 收藏
分享
评论
19
15
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务