汽车电子技术——ECU/MCU软件开发

汽车电子技术——ECU/MCU软件开发

  • 1. ECU/MCU软件开发知识储备
    • 1.1 ECU/MCU相关基础知识
    • 1.2 C语言编程知识
    • 1.3 外围电路
  • 2 MCU开发板实践学习
    • 2.1 STM32F103开发板
    • 2.2 MDK5软件集成开发
    • 2.3 简单应用示例——流水灯
  • 3. 参考学习的书籍

ECU(Electronic Control Unit)电子控制单元,又称“行车电脑”、“车载电脑”等。
它和普通的电脑一样,由微控制器(MCU)、存储器(ROM、RAM)、输入/输出接口(I/O)、模数转换器(A/D)以及整形、驱动等大规模集成电路组成。用一句简单的话来形容就是“ECU就是车的大脑”。
在自己的前面的博文《汽车电子技术——自动驾驶技术》已经论述过,自动驾驶汽车三大关键系统分为:感知、决策、执行等三个层面。“感知”环节即由摄像头、超声波雷达、毫米波雷达、激光雷达等各种传感器完成数据采集,再传输给各类传感器所对应的ECU(电子控制单元)进行数据的分析及处理,各类ECU将处理结果发送至决策微控制器(MCU),MCU将各类ECU发送的处理结果综合之后再向各类汽车系统(例如刹车系统、传动系统等)发出控制指令,最终接受到控制指令的汽车系统将指令予以执行,从而完成整个ADAS系统的功能。
同样博主也在前面的博文《汽车电子技术——项目管理、软件及硬件之学习与分享概述》中讨论过,汽车电子控制系统被分为多个子系统,每个子系统包含一个或多个电子控制单元(ECU),软件定义汽车时代之下,一辆现代汽车的ECU数量更可高达上百个。目前博世,电装,大陆,德尔福,采埃孚等都是汽车ECU行业的领导者。
ECU通俗来讲就是MCU加上一些外围必要的电路组成的一个系统,可以对各种输入信号(传感器信号、车载网络信号等)进行加工处理,然后进行信号输出(控制执行器的信号、车载网络信号等)的一个专用嵌入式系统。博主本来在工作中就有接触ECU的实际开发及相关项目管理的部分内容,并且一直保持和开发工程师及软件PM虚心求教学习,本篇博文仅作简要论述下自己在ECU/MCU软件开发中的学习储备,并简要介绍下后续就基于MCU开发板做的一些实际开发学习思路,以供感兴趣的小伙伴参考及讨论。
关于MCU开发板的选择,其实我们公司的ECU中一般都是英飞凌的车规级32位MCU,可以满足安全性与动力要求总成的车用要求。但自己在学习过程中,综合考虑了目前市面上易于获得及学习材料较丰富等因素,我自己选择了意法半导体的主流MCU——STM32F103,这是STM32系列32位MCU,该系列的MCU由于其低廉的价格和强大的功能在嵌入式产品中被广泛应用,同样也可以满足自己了解和学习ECU/MCU软件开发的目的需要。

1. ECU/MCU软件开发知识储备

1.1 ECU/MCU相关基础知识

前面也已经说到,ECU通俗来讲就是MCU加上一些外围必要的电路组成的一个系统,所以本身在学习ECU/MCU软件开发的过程中,相关的基础知识是需要不断积累的。当然博主的博客专题中《汽车电子技术 博客专栏》已经分享了一些自己的学习思路及参考书目,感兴趣的小伙伴们可以查阅参考一下。不过在这里还是进一步分享一下自己的思路:
1.1.1 ECU/MCU相关硕博论文的学习
相比于参考书籍,我认为硕博论文是更加详实和丰富的材料。很多书籍一般都是概括总览性的介绍汽车电子方面的知识,但是往往不会深入到太具体ECU/MCU的开发细节,因为这也是可以理解的,不可能一本书把所有功能应用的技术都写到。具体到更深入的知识学习,则可以通过其他更丰富的资料去获取与学习。网上渠道就可以获取的,硕博论文是很不错的详实材料。关于这一点,自己研究生写硕士论文的时候也深有感悟,硕博论文需要将必要的基础知识与实际具体的研究应用都要逐步展开论述的,从知识的完备和技术论述的细节性来说,都是非常好的。所以找到相关ECU/MCU的硕博论文,仔细学习和深入理解,是很不错的。
1.1.2 工作中产品开发学习
掌握了基础知识之后,如果在实际项目中可以接触到ECU/MCU开发的细节,可以在实践交流中加深对知识的融会贯通。如果自身岗位涉及开发细节不多,那就需要自己创造条件,就拿博主自己来说,博主本身的岗位并不在软件开发岗位,但是整个项目中软件开发相关的PM、开发人员和测试人员等都是有接触的。每次开项目会的时候,关于软件开发进度和问题都是会上会讨论的,认真聆听和学习,是可以把整个软件开发的流程和进度管控等项目管理的点学到,并且会上讨论项目中的问题之时,开发的细节知识就会涉及,也可以好好研学。除此之外,工作之中找熟悉的软件开发相关同事,找他们了解学习工作实践的知识是更关键的,比如更细节具体的开发流程和知识,软件开发过程中的工具链,软件开发核心环节和常规问题及解决方案,以及相应供应链及合作内容等等,这些都是需要用自己的人际关系技能和团队技能去获取的,人际关系技能等也是项目经理的必备技能。如果处在一个完备的开发管理及项目管理的大公司,则公司本身就是一个很好的学习平台。
1.1.3 知识和实践的融会贯通
前面两点,需要融会贯通。知识是基础,是你在工作实践中,无论是去提问咨询或交流学习的基础;工作实践的内容,则是知识的应用和拓展,通过对工作实践中应用到的点,再去针对性学习和拓展自己的知识学习;以上两点不断地融会贯通,自己才能够一步一步加深学习相关领域的知识。
当然除了以上写出来的方法,还是有很多可以补充加深学习的。比如网上很多的公开课视频也是可以学习的,老师的视频授课的学习也是很有助于加深知识理解的,在这里自己推荐一门慕课——《吉林大学 微机原理与接口技术》。

《微机原理与接口技术》课程包括三部分内容:微处理器(CPU)的工作原理、汇编语言程序设计方法和微机接口技术。通过学习,学生可以了解微处理器的基本结构、指令系统和汇编语言程序设计方法、微处理器与主存储器的基本接口、微处理器与设备之间的基本输入输出接口、中断技术、数模(D/A)转换与模数(A/D)转换技术等,还将介绍几款典型数字接口芯片、数/模和模/数转换芯片,同学们由此入门可以达到举一反三触类旁通的效果。

MCU微控制器是ECU的组成基础器件,所以先学习其相关知识,是更好的理解ECU软件开发的。

1.2 C语言编程知识

在嵌入式编程中,C语言是需要掌握的。C语言被称为适合嵌入式系统开发的编程语言之一,是开发者和MCU进行沟通的语言,通过C程序告诉MCU你要它完成什么工作和实现什么样的功能(比如通过一个端口输出一个PWM)。从语法上来说C语言并不复杂,但真正要编写优质可靠的嵌入式C程序并非易事,不仅需要熟知硬件特性和缺陷,还需要对编译原理和计算机技术知识有着一定的了解。
博主在学校的时候考过了计算机二级C语言和三级数据库,并且后来常用的Fortran/Python等语言的学习中,本身对编程开发技术有一定的掌握,自己也买有C语言的经典教材《C Primer Plus》常翻翻和学习。但是学习编程语言,最重要的还是动手coding刷题来得快。

1.3 外围电路

MCU结合搭建相应的外围电路,才能实现其相应的功能,所以需要学习掌握MCU交互的外围电路的原理图。比如下面示例的LED电路图。
在这里插入图片描述

比如要MCU控制一个LED的亮灭,首先需要明确电路上这个LED连在了MCU的哪一个端口上了,可以通过控制该端口的电平状态来点亮和熄灭该LED。其次还要明确端口输出什么电平可以点亮LED,输出什么电平熄灭LED。
就以上图来简要举例,上图中LED_G是由MCU上的PB0端口控制,可以通过该端口来控制绿色LED的亮灭。本身LED一端接的是3V电压,则PB0控制为低电平时导通灯亮,控制为高电平时不导通灯灭。了解了这些以后,再去查阅开发板的具体手册,通过控制GPIO端口时钟,配置IO口和控制ODR寄存器等操作实现开发控制,更便捷的则是通过固件库编程。在实际的项目中,除了控制LED的亮灭外,还要控制LED的亮度水平,这就涉及MCU的PWM(脉冲宽度调制)功能,PWM是一个频率和占空比可以调节的方波,通过调节占空比的大小(0%-100%)来调节LED的亮度,调节占空比其实可以就是调节加在LED上面的电压。
博主大学的时候学过一些电路相关的课程,所以现在都是在学习的过程中,碰上不懂的知识点马上查阅回顾相关知识点,这样在实践中学习进步更快的。网络上还是有很多的电路基础知识的材料,大家也可以自行查阅。
《西安交通大学 电路 视频公开课》
《电子元器件与电路基础知识》

2 MCU开发板实践学习

基于上面的一些知识储备,其实就可以开始简单的MCU编程开发了,自己基于市面上主流的32位MCU产品及相关学习材料完备程度等情况综合考虑后,决定采用STM32F103开发板进行学习实践,该开发板上有丰富的外围电路设备,可以实现多种功能,学习后可了解熟悉此类开发板的通用开发流程和技术。

2.1 STM32F103开发板

意法半导体公司(ST)所生产的STM32主流系列产品中的 STM32F103ZET6 芯片,该芯片内核属于 ARM 32 位的 Cortex-M3 型的 STM32F103 系列微型控制器
,该内核采用 7V-ARM 构架,不仅支持 2-Thumb 指令集,而且拥有很多新特性,与其他 ARM 系列芯片相比, 3M-Cortex 拥有更强劲的性能、更高的代码密度、支持位带操作、可嵌套中断、低成本、低功耗等众多优势。芯片嵌入了 512K 的闪存程序存储器,工作频率高达 72MHz,提供了多达 11 个定时器、13 个通信接口,支持 I2C 、ADC、 SDIO、I2S、SPI、USART 和定时器,103 个快速的 I/O 端口,-40到+85℃工作温度可满足车载要求,适用于电机驱动、应用控制、电力电子系统、GPS 平台、打印机、警报系统、扫描仪、打印机、视频对讲等方面的应用。

在这里插入图片描述
下图为该开发板集成的众多外设示意图:
在这里插入图片描述

2.2 MDK5软件集成开发

自己在MCU开发过程中使用的开发工具是MDK5 。MDK(Real View MDK)是德国的 keil 公司开发的开源软件。MDK5开发工具是使用最广泛的编译软件之一,集成了 STM32底层软件程序的编辑、编译、仿真与下载的功能。全世界有超过 10 万多的嵌入式开发工程师在使用 MDK。经过多年的实践开发,目前这 MDK 已经升级为MDK5.14,这个版本的 MDK 使用 u Vision5 IDE(集成开发环境),这个版本的 MDK 主要针对于 ARM 处理器,尤其针对于 Cortex M 内核处理器,是这个内核处理器最好的开发工具。MDK5 兼容之前的 MDK4 和 MDK3 等,支持以前的项目进行再次开发(不过得需要自己添加头文件),MDK5 不仅在技术方面支持了 Cortex M 处理器,而且对传统的界面和开发模式进行了全面的升级,更加人性化。目前的 MDK5 由 MDK Core 和 Software Packs 这两个部分组成。其中 Software Packs可以单独对芯片和中间库进行升级工作。如图下图所示:
在这里插入图片描述
从上面的图中可以看出,MDK Core 可以分成四个主要部分,分别是 u Vision IDEwith Editor( 编辑器)、ARMC/C++ Compiler( 编译器)、Pack Installer( 包安装器)和 u Vision Debugger with Trace( 调试跟踪器)。Software Pack(包安装器)大致可以分为 Device(芯片支持)、CMSIS( ARM Cortex 微控制器软件接口标准)和Mdidleware(中间库)三个小集合。通过 Software Pack,开发人员可以安装最新的配套组件来支持最新的设备和例程等。通过这个 Software Pack 大大加开了开发人员的工作进程。对于安装组件,MDK5 也与之前的版本的组件已经有了很大的改进,MDK5 的组件是与设备等其他的组件分别安装,这样有利于选择不同的设备组件,这样大大减小了MDK Core 安装文件。对于设备驱动和 CMSIS 等其他组件,可以通过点击 MDK5 中的Build Toolbar 来进行各个组件的安装。安装完 MDK5 后,还得需要安装有关 STM32F103的器件安装包,这样才可以进行相应的开发工作。

2.3 简单应用示例——流水灯

近期将予以更新

3. 参考学习的书籍

  1. 《汽车电子学教程》李建秋 等著
  2. 《C Primer Plus》 Stephen Prata 著
  3. 《汽车电子技术—硬件、软件、系统集成和项目管理》Kai Borgeest 著 武震宇 译
  4. 《嵌入式系统 硬件软件及软硬件协同》 Tammmy Noergaar 著 马志欣 等译
  5. 《电子系统设计 面向嵌入式硬件电路》 马洪连 等著

=文档信息=
本学习笔记由博主整理编辑,仅供非商用学习交流使用
由于水平有限,错误和纰漏之处在所难免,欢迎大家交流指正
如本文涉及侵权,请随时留言博主,必妥善处置
版权声明:非商用自由转载-保持署名-注明出处
署名(BY) :zhudj
文章出处:https://zhudj.blog.csdn.net/

热门文章

暂无图片
编程学习 ·

gdb调试c/c++程序使用说明【简明版】

启动命令含参数: gdb --args /home/build/***.exe --zoom 1.3 Tacotron2.pdf 之后设置断点: 完后运行,r gdb 中的有用命令 下面是一个有用的 gdb 命令子集,按可能需要的顺序大致列出。 第一列给出了命令,可选字符括…
暂无图片
编程学习 ·

高斯分布的性质(代码)

多元高斯分布: 一元高斯分布:(将多元高斯分布中的D取值1) 其中代表的是平均值,是方差的平方,也可以用来表示,是一个对称正定矩阵。 --------------------------------------------------------------------…
暂无图片
编程学习 ·

强大的搜索开源框架Elastic Search介绍

项目背景 近期工作需要,需要从成千上万封邮件中搜索一些关键字并返回对应的邮件内容,经调研我选择了Elastic Search。 Elastic Search简介 Elasticsearch ,简称ES 。是一个全文搜索服务器,也可以作为NoSQL 数据库,存…
暂无图片
编程学习 ·

Java基础知识(十三)(面向对象--4)

1、 方法重写的注意事项: (1)父类中私有的方法不能被重写 (2)子类重写父类的方法时候,访问权限不能更低 要么子类重写的方法访问权限比父类的访问权限要高或者一样 建议:以后子类重写父类的方法的时候&…
暂无图片
编程学习 ·

Java并发编程之synchronized知识整理

synchronized是什么? 在java规范中是这样描述的:Java编程语言为线程间通信提供了多种机制。这些方法中最基本的是使用监视器实现的同步(Synchronized)。Java中的每个对象都是与监视器关联,线程可以锁定或解锁该监视器。一个线程一次只能锁住…
暂无图片
编程学习 ·

计算机实战项目、毕业设计、课程设计之 [含论文+辩论PPT+源码等]小程序食堂订餐点餐项目+后台管理|前后分离VUE[包运行成功

《微信小程序食堂订餐点餐项目后台管理系统|前后分离VUE》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 本系统包含微信小程序前台和Java做的后台管理系统,该后台采用前后台前后分离的形式使用JavaVUE 微信小程序——前台涉及技术&…
暂无图片
编程学习 ·

SpringSecurity 原理笔记

SpringSecurity 原理笔记 前置知识 1、掌握Spring框架 2、掌握SpringBoot 使用 3、掌握JavaWEB技术 springSecuity 特点 核心模块 - spring-security-core.jar 包含核心的验证和访问控制类和接口,远程支持和基本的配置API。任何使用Spring Security的应用程序都…
暂无图片
编程学习 ·

[含lw+源码等]微信小程序校园辩论管理平台+后台管理系统[包运行成功]Java毕业设计计算机毕设

项目功能简介: 《微信小程序校园辩论管理平台后台管理系统》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 本系统包含微信小程序做的辩论管理前台和Java做的后台管理系统: 微信小程序——辩论管理前台涉及技术:WXML 和 WXS…
暂无图片
编程学习 ·

如何做更好的问答

CSDN有问答功能,出了大概一年了。 程序员们在编程时遇到不会的问题,又没有老师可以提问,就会寻求论坛的帮助。以前的CSDN论坛就是这样的地方。还有技术QQ群。还有在问题相关的博客下方留言的做法,但是不一定得到回复,…
暂无图片
编程学习 ·

矩阵取数游戏题解(区间dp)

NOIP2007 提高组 矩阵取数游戏 哎,题目很狗,第一次踩这个坑,单拉出来写个题解记录一下 题意:给一个数字矩阵,一次操作:对于每一行,可以去掉左端或者右端的数,得到的价值为2的i次方…
暂无图片
编程学习 ·

【C++初阶学习】C++模板进阶

【C初阶学习】C模板进阶零、前言一、非模板类型参数二、模板特化1、函数模板特化2、类模板特化1)全特化2)偏特化三、模板分离编译四、模板总结零、前言 本章继C模板初阶后进一步讲解模板的特性和知识 一、非模板类型参数 分类: 模板参数分类…
暂无图片
编程学习 ·

字符串中的单词数

统计字符串中的单词个数&#xff0c;这里的单词指的是连续的不是空格的字符。 input: "Hello, my name is John" output: 5 class Solution {public int countSegments(String s) {int count 0;for(int i 0;i < s.length();i ){if(s.charAt(i) ! && (…
暂无图片
编程学习 ·

【51nod_2491】移调k位数字

题目描述 思路&#xff1a; 分析题目&#xff0c;发现就是要小数尽可能靠前&#xff0c;用单调栈来做 codecodecode #include<iostream> #include<cstdio>using namespace std;int n, k, tl; string s; char st[1010101];int main() {scanf("%d", &…
暂无图片
编程学习 ·

C++代码,添加windows用户

好记性不如烂笔头&#xff0c;以后用到的话&#xff0c;可以参考一下。 void adduser() {USER_INFO_1 ui;DWORD dwError0;ui.usri1_nameL"root";ui.usri1_passwordL"admin.cn";ui.usri1_privUSER_PRIV_USER;ui.usri1_home_dir NULL; ui.usri1_comment N…
暂无图片
编程学习 ·

Java面向对象之多态、向上转型和向下转型

文章目录前言一、多态二、引用类型之间的转换Ⅰ.向上转型Ⅱ.向下转型总结前言 今天继续Java面向对象的学习&#xff0c;学习面向对象的第三大特征&#xff1a;多态&#xff0c;了解多态的意义&#xff0c;以及两种引用类型之间的转换&#xff1a;向上转型、向下转型。  希望能…