# 简历项目描述:STM32F103ZET6 多传感器监控系统 > 适用岗位:嵌入式软件工程师(MCU/RTOS 方向)实习 > 仓库:https://github.com/kekezack/STM32F103ZET6-MultiSensor-Monitor --- ## 一、简历正文(2-3 行,放项目区) **基于 CMSIS-RTOS V2 的 STM32F103ZET6 多传感器监控系统** | 个人独立开发 | 2026.07-08 基于 FreeRTOS(CMSIS-RTOS V2 标准抽象层)的嵌入式多任务系统,实现 5 页面 LCD 图形界面、多传感器采集、CLI 调试与智能休眠。采用五层驱动架构 + UI 分层框架,UI 通过函数指针表驱动页面调度,控件库以回调实现 OOP 式封装。 --- ## 二、技能点(面试官会追问,必须能讲透) ### 技术栈 - 芯片/RTOS:STM32F103ZET6(Cortex-M3)+ FreeRTOS(CMSIS-RTOS V2 封装) - 外设:LCD(FSMC)、4 线电阻触摸屏、DHT11、光敏(ADC)、SPI NOR Flash、LED、按键、USART - 工具链:arm-none-eabi-gcc + CMake + Ninja,clang-format 代码规范 ### 可量化的成果(简历写这些有冲击力) | 维度 | 数据 | | -------- | ------------------------------------- | | 代码量 | 约 4800 行 C 代码(User/ 22 文件) | | 驱动模块 | 8 个外设驱动 | | UI 页面 | 5 页(开机/温湿度/光照/系统/LED控制) | | 任务划分 | 3 个 FreeRTOS 任务 + 启动任务 | | 调度周期 | UI 任务 10ms 轮询 | ### 架构亮点(简历 bullet 用) 1. **CMSIS-RTOS V2 标准抽象层**:使用 `osThreadNew`/`osMessageQueueNew` 等标准接口而非裸调 FreeRTOS,理解 RTOS 抽象层价值 2. **UI 分层框架**:`xPage` 函数指针表统一调度渲染/刷新/输入;页面实现三接口(Render/Refresh/Process),新增页面仅需注册 3. **控件库 OOP 式封装**:按钮控件内置回调函数指针 + 焦点/按下状态,C 语言下实现"多态" 4. **全量/增量渲染分离**:切页全量重绘,周期内脏值刷新,降低 LCD 带宽占用 5. **五层驱动架构**:配置表/生命周期/API/调度/硬件抽象五层分离,设备用枚举标识 6. **资源监控**:LCD 实时显示堆剩余、各任务栈水位(`uxTaskGetStackHighWaterMark`) --- ## 三、面试 STAR 叙事(2 分钟口述) **Situation**:需要把多传感器数据采集、显示、交互整合到一个 STM32 系统,且要便于扩展。 **Task**:设计一个可维护、可扩展的嵌入式系统架构,而非"能跑就行"。 **Action**: 1. 采用 CMSIS-RTOS V2 标准接口做多任务,任务职责单一(监视/UI/Shell) 2. 设计 UI 框架:函数指针表驱动 5 个页面,页面只实现统一接口;控件库复用(按钮/标签/数值) 3. 五层驱动架构,配置与运行分离,新增设备只需加配置表 4. 智能休眠:暗光 5 秒自动睡,任意输入唤醒,降低功耗 **Result**: - 系统稳定运行,3 个任务 + 8 个外设协同工作 - 新增页面/LED 控制功能只需实现 3 个接口 + 注册,扩展成本低 - 代码规范统一(匈牙利命名 + Allman + clang-format),可读性强 --- ## 四、ATS 关键词(投简历时嵌入) `嵌入式` `STM32` `FreeRTOS` `CMSIS-RTOS V2` `C语言` `RTOS` `多线程` `任务调度` `驱动开发` `LCD` `传感器` `I2C` `SPI` `UART` `ADC` `DMA` `中断` `GPIO` `嵌入式Linux` `CMake` `Git` `嵌入式系统` `固件开发` `物联网` --- ## 五、可能被追问的问题(提前准备) | 问题 | 参考回答要点 | | ------------------------------------------ | --------------------------------------------------------------- | | 为什么用 CMSIS-RTOS V2 不用原生 FreeRTOS? | 标准抽象层,换内核不用改上层; | | 函数指针表有什么好处? | 新增页面零侵入;调度逻辑集中;table-driven design | | 全量/增量渲染为什么这样设计? | LCD 写像素慢,增量只刷变化区域,降低刷新开销 | | 任务优先级怎么定的? | UI 交互要响应快(AboveNormal),监视周期任务 Normal,Shell 最低 | | 五层驱动怎么理解? | 配置与运行分离、设备枚举标识、单向依赖(高层调低层,允许跳过中间层) | | 遇到过什么 bug 怎么解决? | 如实讲一个调试案例(如 DHT11 时序、触控校准、栈溢出) | --- _生成于 2026-08-02。面试前逐条吃透,尤其"为什么"类问题。_