本仓库用于展示本人在校企合作项目中的嵌入式软件开发工作,内容为从完整工程中整理出的个人负责模块,不是可直接独立编译的完整产品工程。
- 项目时间:2024.01—2024.06
- 项目类型:校企合作项目
- 目标设备:基于 OBD 接口的新能源汽车车载智能仪表终端
- 核心平台:STM32F407 + FreeRTOS
- 主要技术:CAN 2.0A/2.0B、UDS 诊断通信、消息队列、互斥锁、软件定时器、状态管理、异常恢复
系统通过 OBD 接口接入整车 CAN 网络,读取车辆运行状态并在本地仪表端显示,同时完成链路状态管理、通信超时处理和异常提示。
- 设计单通道 CAN 服务模块,封装初始化、启动、收发、状态查询和总线恢复流程。
- 适配标准帧 / 扩展帧、数据帧 / 远程帧以及 CAN FIFO 接收。
- 增加发送超时、接收超时、总线异常和运行时恢复处理。
- 通过平台抽象层隔离 STM32 HAL 与上层业务逻辑。
对应代码:
01_Service/service/service_can/02_Platform/platform_mcu/can/Core/Inc/can.hCore/Src/can.c
- 维护车辆数据快照、数据有效性、车辆连接状态和通信在线状态。
- 为仪表显示和上层业务提供统一的数据访问接口。
- 处理车辆数据更新、状态切换、超时失效和恢复后的重新同步。
对应代码:
01_App/app/app_vehicle_data/01_App/app/app_system_state/01_App/app/app_init/
- 实现主机通信服务任务及命令 / 响应队列处理。
- 对车辆信息、仪表数据、诊断状态和通信错误进行统一的寄存器 / 状态映射。
- 对请求超时、CAN 发送失败、车辆无响应和链路断开进行错误归类与上报。
- 支持与现有应用任务队列的消息桥接,为车辆诊断和数据展示提供接口。
对应代码:
01_Service/service/service_host_comm/01_App/app/app_task_common.h01_App/app/app_dtc_table.h01_App/app/app_version.h
- 使用消息队列、互斥锁、信号量和软件定时器实现任务间解耦。
- 对 FreeRTOS API 做 OSAL 统一封装,降低业务层对具体 RTOS 实现的依赖。
- 支持任务超时、队列超时和资源状态错误的统一处理。
对应代码:
02_Platform/platform_os/Core/Inc/FreeRTOSConfig.hCore/Src/freertos.c
- 实现蜂鸣器 / 指示灯控制服务,为连接状态、通信异常等场景提供反馈。
- 保留 CAN 模块测试辅助代码,用于台架联调、报文收发验证和问题定位。
对应代码:
01_Service/service/service_buzzer_led_ctrl/99_Utils/obd_module_test_demo.c99_Utils/obd_module_test_demo.h
01_App/ 应用层:车辆数据、系统状态、初始化及界面交互相关模块
01_Service/ 服务层:CAN、主机通信、蜂鸣器/指示灯等服务
02_Platform/ 平台层:CAN 抽象、FreeRTOS/OSAL 封装
Core/ STM32/CubeMX 生成的 CAN 与 FreeRTOS 配置关联文件
99_Utils/ 台架联调与模块测试辅助代码
本仓库仅保留与本人负责内容直接相关的代码,未上传以下内容:
- STM32 HAL、CMSIS、FreeRTOS 内核、USB、LVGL 等第三方或厂商代码;
- 完整 Keil 工程、编译输出、下载文件和本地调试日志;
- 与本人职责无关的显示驱动、存储驱动及其他业务模块;
- 整车 ECU 的 CAN ID、DID 映射、标定参数、测试数据和企业内部配置。
因此,仓库中的代码需要放回原工程并补齐依赖后才能编译。为避免泄露整车协议细节,公开版本不包含具体车型的 ECU 地址、DID 表和生产配置。
本仓库只用于个人技术总结和求职作品展示,不代表任何企业的正式产品发布,也不包含完整商业工程。若项目存在保密或知识产权约束,应以项目方书面授权和公司制度为准。