DAY 1
一、嵌入式的概述
国内定义:嵌入式就是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于对于体积、可靠性、功耗、性能等方面有严格要求的专用计算机系统,要求嵌入式开发人员对嵌入式知识体系有清晰的认知。
更简单的说,处理桌面PC和服务器之外,所有的控制类设备都是嵌入式。
思考:通用计算机系统和专用计算机系统(嵌入式系统)之前的区别?
两者的区别是技术要求和技术发展方向,通用计算机的技术要求是处理大量、高效的数据,而技术发展要求是总线速度的提升和存储能力的拓展。专用计算机系统的技术要求是可控制化,技术发展要求是对系统的可靠性进行提升。
二、嵌入式的特点
硬件特点:
体积小,集成效率高
低功耗,电磁兼容性(抗干扰能力强)
面向特定的应用(针对不同的用户)
软件特点:
软件一般采用C语言开发(接近底层,可以直接操作地址)
程序一般固化在ROM或者Flash中( 掉电不丢失)
软件要和硬件密切相关( 7人团队 3个软件 2个硬件 1个驱动 1个测试)
三、C51和STM32的关系
C51属于传统的8位单片机,诞生于上世纪70年代,是由Intel公司在1980年开发的MCS-51系列单片机发展出来,也被称为8051。一般现在在大学中教学,满足不了现在的市场需求(成本低、性能高、功耗低、多任务、易用界面),一般用在小家电、消费类电子产品。
基于这样的市场需求,ARM公司推出了一款基于ARMv7架构的Cortex M3/M4的32位的内核,一般用在工控场景,ST公司就基于这个内核推出了一款新的MCU(微处理器),就叫做STM32。
四、芯片的内核架构
ARM 是一家公司 设计芯片的IP内核(不生产芯片) 授权给其他的半导体公司(三星、ST意法半导体、TI德州仪器 )
ARM以前的内核:ARM7 ARM9 ARM11 (经典)
ARM现在的内核:Cortex A Cortex R Cortex M
A系列:面向高端智能产品(手机、平板、数字电视 一般搭载操作系统....... A8 A53 A72....)
R系列:面向高性能实时应用(航空航天、汽车制动系统、硬盘..... R5 R8....)
M系列:面向成本敏感型产品(低功耗、智能穿戴产品、智能家居、消费类电子产品..)
五、STM32的应用领域
STM32属于微控制器,本身自带了很多常用的通信接口(UART、IIC、SPI),可以控制很多的设备,STM32一般用在低功耗产品,如智能手环、微型四轴飞行器、扫地机器人......
- 智能手环
2.智能门锁
3.智能家居
六、STM32的就业前景
STM32系列芯片介于低端芯片和高端芯片之间,相比于低端芯片,STM32拥有强大的内核架构、更多的片上外设,并且搭载实时操作系统(RTOS uCOSII、FreeRTOS、RT-thread.....),相比于高端芯片,STM32的成本更低,实时性更好。所以STM32属于嵌入式开发人员必须学习的内容。
就业的方向有很多,走向成功的三要素(天时、地利(珠三角)、人和) 网络招聘
七、集成开发环境的搭建
- MDK软件的下载
如果想要学习STM32,需要安装对应的开发环境,一般都是使用德国KEIL公司设计的KEIL5,但是由于KEIL公司在2005年被ARM公司收购,所以KEIL5也被称为ARM-MDK,想要下载软件的安装包,可以去KEIL公司的官网 www.keil.com
可以看到MDK的版本为5.34,但是一般实际开发中会使用较低的版本,为大家准备的是5.26版本。
2.MDK软件的结构
MDK-Core:包含了库管理器以及Cortex M系列的设备(也包含最新的ARMv8-M架构)
ARM C/C++ Compiler:包含编译器、汇编器、链接器.......
Device:包含启动文件(汇编语言)、硬件抽象层、通用的工业标准CMSIS的驱动程序
- MDK软件的版本
MDK属于商业软件,需要购买正版授权,如果出于学习的目的,则可以破解软件(解除代码的限制) 如果不破解 则代码超过32KB 无法编译通过
- MDK软件的安装
- 安装MDK5.26版本 集编辑、编译、下载为一体 双击安装即可
注意:软件的安装路径中不能存在中文以及特殊的字符,建议在电脑的某个盘新建一个英文文件夹
注意:可能会在软件的安装过程中提示“是否安装ULINK的驱动” 点击“不安装”
- 对KEIL5软件进行破解 利用破解器 记住打开KEIL5软件的时候需要用管理员权限
注意:破解器可能会被电脑的杀毒软件当做木马对待,所以建议提前关闭杀毒软件。
- MDK软件破解完成 需要安装ST公司对应的芯片支持包(芯片型号、芯片外设库函数...)
MDK软件安装完成后,是不会帮大家添加半导体公司的芯片,需要大家手动安装或者在线更新 芯片的支持包可以在KEIL公司官网下载 www.keil.com/dd2/pack
双击安装即可,但是如果安装失败,可以参考这个文档
- MDK软件的配置
- 修改MDK5软件的编码格式(修改为GB2312),并设置显示行号 + TAB制表符4个空格
- 配置MDK5软件的自动补齐功能 方便大家去开发
练习:完成开发环境的搭建
注意:如果自己电脑的用户名是中文,则编译程序的时候会导致编译失败,解决方案如下
预习:STM32F4xx中文参考手册的第7章 通用IO
晨讲(15分钟左右):讲解冯-诺依曼结构和哈弗结构的区别和特点 (奖励一杯奶茶)
午讲(10分钟):你觉得你的优势是什么? (奖励一杯奶茶)
任务:思考自己打算在STM32阶段实现哪个项目? 基础+拓展
DAY 2
一、STM32的开发方式
STM32的开发方式有三种:函数库开发 + 寄存器开发 + 图形界面开发
- 函数库开发(别人做饭,自己动手吃)
ST公司针对STM32开发了两套库(标准外设库 + HAL库),对于目前的市场趋势而言,ST公司主推HAL库,已经对标准外设库停止维护,但是国内大多数的公司还是在采用标准外设库开发(更稳定、资料更多、容易维护)。
库是ST公司的开发人员为开发者提供的一系列函数接口,使用库函数开发,开发人员不需要对底层的寄存器有过多的了解,只要学习过C语言就可以使用函数来配置对应的寄存器。
优点:
程序容易维护
代码可读性好
提高开发效率
缺点:
相比于寄存器开发,使用库函数开发的程序的运行效率稍微低一些,大概低10%~15%左右,但是对于一些实时性要求不高的产品来说,可以忽略不计。
- 寄存器开发(自己做饭,自己动手吃)
STM32属于32位的MCU,STM32内部的资源十分丰富,就导致寄存器的数量和复杂度都增大了,就要求开发人员对底层的知识掌握的非常扎实。
优点:
运行效率高
节约存储空间
缺点:
开发效率低
程序不容易维护
程序可读性差
一般来说,在项目开发的过程中绝大部分的代码都是采用函数库开发,如频繁调用的中断服务函数就需要采用寄存器开发(实时性强)。
- 图形界面开发(别人做饭,别人喂你吃)
为了开发人员考虑,ST公司近几年推出了一款图形界面软件(STM32CubeMx),也被称为初始化代码生成器,用户只需要根据实际情况来选择对应的按钮和功能就可以自动生成代码,可以极大程度的提高开发效率,但是一旦程序出现问题,就不容易维护,所以适合有经验的工程师使用,图形界面软件自动生成的代码也是基于HAL库。
优点:
不需要写代码
开发效率较高
缺点:
不容易维护
运行效率稍低
二、STM32的开发平台
- STM32开发平台的芯片
本次阶段使用的开发平台为GECM4开发板,M4开发板搭载的芯片是ST公司设计的芯片,型号为STM32F407ZET6,芯片采用的内核为ARM公司设计的Cortex M4内核(主频高达168MHZ,带DSP和FPU 浮点运算单元),对于芯片型号的说明可以参考ST公司提供的芯片选型手册。
STM32 32位MCU
F 基础型
407 高性能
Z 引脚数目144
E 闪存容量 512K
T 封装QFP (硬件工程师)
6 温度范围 -40 ~ +85
- STM32开发平台的资源
三、STM32的工程建立
一般在实际开发过程中,大家可能只是负责其中的一个模块,所以就必须提前搭建好一个可以方便移植的工程模板,方便大家对程序进行维护和交接,所以就需要把写好的代码进行模块化编程(封装源文件+头文件)。以标准外设库开发为例,搭建工程的方式如下:
使用函数库开发,搭建工程的方式有两种:在线搭建 + 离线搭建 两种的区别如下
- 在线搭建
要确保在安装开发环境的时候已经安装了芯片支持包(芯片型号、芯片外设的驱动程序)
需要注意:如果安装的芯片支持包的版本较新,则内部并不会集成标准外设库的接口,所以如果打算使用标准外设库并且打算在线添加,则需要安装一个版本较低的芯片支持包。
- 离线搭建(推荐)
离线搭建的方式是指去官网下载标准外设库的库压缩包,通过调用库压缩包中的文件来实现工程的建立。
练习:按照文档要求,搭建一个工程模板 (只需要搭建这一次即可,以后再也不用搭建)
四、STM32的程序下载
STM32想要下载程序的方法有两种:串口下载 + 下载器下载(JTAG、JLINK、STLINK.....),这里就涉及到STM32启动方式(自举模式)。这里可以参考STM32F4中文参考手册的2.4章节。
STM32启动方式(自举模式)有三种:从用户闪存启动(Flash)、从系统存储器启动、从内部SRAM启动。
STM32的自举模式可以通过芯片的两个引脚BOOT0和BOOT1进行配置,这两个引脚在芯片复位时的电平状态决定了芯片复位之后从哪个区域运行程序。
- 主Flash启动 (推荐)
指的是从用户闪存空间启动(FLash空间 512K),也是最常用的工作模式,一般用JTAG接口和SW接口下载程序的时候意味着程序要下载到Flash中,在复位之后也是从Flash运行程序。一般用户闪存(Flash)可以反复擦除10万次左右,所以不用担心芯片锁死或者被擦爆。
- 硬件接线(JLINK下载器) BOOT0必须接地 BOOT0 = 0 BOOT1=X
2.安装JLINK的驱动程序 注意:如果安装最后弹出一个窗口 记得勾选MKD5
3.检查JLINK驱动是否安装成功 我的电脑-设备管理器-通用串行总线控制器-JLINK-Drvier
4.打开MKD5,进行下载器的配置 点击魔术棒---DEBUG---选择JLINK---配置为SW模式
5.点击MKD5的下载按钮 Download,等待程序下载完成即可
练习:利用Flash自举模式下载程序,熟悉下载流程
- 系统存储器启动
系统存储器指的是芯片中一块固定的区域,这块区域的程序的功能是由芯片厂商在出厂的时候就写入的一段程序,也被称为启动引导程序(BootLoader),是无法修改的,所以系统存储器其实就是一块ROM(只读存储器),一般通过系统存储器启动都是打算采用串口下载的方式烧写程序(ST公司的固件中包含了串口下载的功能),但是一般不常用,因为配置起来比较麻烦。
- 硬件接线(串口线) BOOT1 = 0 BOOT0 = 1 按一下复位键 (可以执行BootLoader)
2.安装CH340驱动 安装驱动之前需要把线接好
3.检查CH340驱动是否安装成功 并知道CH340提供的端口 我的电脑-设备管理器-端口
4.打开串口下载软件FlyMCU,进行简单的配置 端口 + 波特率 + 可执行文件
5.再次设置BOOT0=0,BOOT1=0(选择Flash自举),按一下复位(程序开始运行)
练习:利用系统存储器自举模式来完成程序的下载和运行(熟悉串口下载程序的流程)
作业:完成STM32CubeMx软件的安装,并学习软件的配置(如何利用该软件搭建工程)
预习:阅读ST公司提供的函数库帮助手册(外设的使用和配置、库函数的命名规则、内核 结构)
预习:阅读ST公司编写关于GPIO的外设源文件+头文件 (函数的参数+函数的使用+注释)
晨讲:请简述CM3和CM4内核中的寄存器组R0-R15的作用,尽量详细+举例 (一杯奶茶)
会从线上或者线下抽 线上的同学可以在晚上录制一个简单的视频
午讲:能不能说一下入职之后的职业规划是什么?