目录
2.5 复杂指令集计算机(CISC)精简指令集计算机(RISC)区别
一、嵌入式简介
1.1 嵌入式概念
嵌入式,一般是指嵌入式系统。本质上是计算机系统的⼀种。 计算机系统的应用市场: ①服务器市场:超强性能的处理器 ②桌面市场:通用处理器 ③嵌入式市场:嵌入式处理器。如何理解嵌入式系统?
是以应用为中心,以计算机技术为基础,软硬件可裁剪适用于对功能、可靠性、成本、体积、 功耗有严格要求的专用计算机系统。嵌入式系统通常是嵌入到目标设备中的,为特定的任务提供计算和控制功能。是将应用程序、操作系统、和计算机硬件集成在⼀起的系统。
1.2 嵌入式系统的组成
硬件:处理器 + 外围设备电路(外设) 软件: 操作系统 + 应用程序
1.3 嵌入式的分类
1.3.1 嵌入式系统的分类
片级: 单片机(stm32f407芯片) 、DSP等以arm为核心的产品
板级: 最小系统板
系统级: 产品
1.3.2 嵌入式处理器的分类
1. 嵌入式微处理器(MPU) :以通用计算机中的标准CPU为微处理器,并将其装配在专门设计的电路板上,构成嵌入式系统。这种系统具有较强的通用性和可扩展性,但是体积和功耗较大。
2. 嵌入式微控制器(MCU) :以单片机为代表,将微处理器、存储器、I/O接口等集成在一块芯片上,构成嵌入式系统。这种系统具有单片化、体积小、功耗低、可靠性高的特点,是目前工业控制的主流。
3.嵌入式数字信号处理器(DSP) :以DSP为代表,对系统结构和指令进行了特殊设计,使其适合执行信号处理算法,如数字滤波、FFT、 谱分析等。这种系统具有高速、高精度、低功耗的特点,但是编程难度较高,适合复杂的信号处理应用。
4.嵌入式片上系统(SOC) :以SOC为代表,将一个或多个微处理器、存储器、外围功能模块等集成在一块芯片上,构成嵌入式系统。这种系统具有高度集成、高性能、低成本的特点,但是设计难度较大,适合高端的嵌入式应用。
二、单片机简介(MCU嵌入式微控制器)
2.1 单片机是什么
单片机: Single-Chip Microcomputer,单片微型计算机,是一种集成电路芯片。
2.2 单片机的应用场景
1.仪器仪表:电源/示波器/焊台
2.家用电器:空调/冰箱/洗衣机
3.工业控制:机器人/PLC/电梯
4.汽车电子:GPS/ABS/胎压监测
2.3 单片机的发展历程
2.4 单片机发展趋势
2.5 复杂指令集计算机(CISC)精简指令集计算机(RISC)区别
复杂指令集计算机(CISC)和精简指令集计算机(RISC)是两种计算机体系结构的范例,它们在处理指令和执行操作时具有不同的设计理念和优势。
2.6 计算机的冯诺依曼结构VS哈佛结构
冯·诺依曼结构和哈佛结构是计算机系统中两种不同的指令和数据存储方式。
1. 冯·诺依曼结构(Von Neumann Architecture):
冯·诺依曼结构是早期计算机系统采用的主要架构之一。它将程序指令和数据存储在同一块存储器中,即存储器中的指令和数据共享同一个地址空间。在冯·诺依曼结构中,指令和数据都以二进制形式存储在存储器中,并由同一组总线连接到中央处理器(CPU)。CPU依次从存储器中读取指令和数据,并按照程序顺序执行。2. 哈佛结构(Harvard Architecture):
哈佛结构将程序指令和数据存储在两个独立的存储器中,分别称为指令存储和数据存储器。在哈佛结构中,指令和数据使用不同的总线传输到CPU。因此,指令和数据具有独立的地址空间,不会发生地址冲突。哈佛结构通常能够实现更高的效率,因为CPU可以同时从指令存储器和数据存储器中读取数据,而不会发生竞争或冲突。二者的区别:
(1)存储器分配:冯·诺依曼结构将指令和数据存储在同一块存储器中,而哈佛结构将它们存储在两个独立的存储器中。
(2)总线结构:冯·诺依曼结构使用单一总线连接CPU和存储器,而哈佛结构使用分离的指令总线和数据总线。
(3)地址空间:在冯·诺依曼结构中,指令和数据共享同一地址空间,而在哈佛结构中,它们具有独立的地址空间。
(4)并行性:由于哈佛结构中指令和数据具有独立的存储器和总线,因此它有更好的并行性和效率。总的来说,冯·诺依曼结构适用于一般的计算机系统,而哈佛结构通常用于嵌入式系统和特定应用领域,以提高效率和性能。
三、CortexM系列介绍
3.1 ARM公司
ARM(Advanced RISC Machines)公司:只做内核设计和IP授权,不参与芯片设计。既可以认为是一个公司的名字,也可以认为是对一类微处理器的统称。
①公司的名称。②⼀类处理器的统称 ③⼀类技术:ARM 架构,用来设计处理器的技术。
3.2 ARM的体系架构
ARM11(armv6)之后,命名方式改成了cortex- ?系列:
cortex-M: mcu /微处理器
cortex-R:real time 实时处理器;汽车
cortex-A:application 高端处理器,可以运行系统(Linux);手机、平板
3.3 Cortex内核分类及特征
3.4 Cortex-M3/4/7介绍
四、Stm32介绍
4.1 Stm32是什么
2007 年 6 月,ST 在北京发布了全球第一款基于 ARM Cortex M3 内核的 32 位通用微控制 器芯片:STM32F103,以优异的性能,丰富的资源,超高的性价比,迅速占领市场,从此一鸣 惊人,一发不可收拾,截止到 2020 年 6 月,STM32 累计出货量超过 45 亿颗。
ST:意法半导体;M:Microcontroller/微控制器 全称:意法半导体生产的32位处理器;
我们教学用的这款ST的控制器STM32F4067ZGT6,就是基于ARM的Cortex-M4内核的微处理器(MCU)
STM32 与 51 的性能对比 :这里我们选的 51 是性能比较好的 STC15 系列做为对比,如果换成传统 51,速度会比 STC15 慢 12 倍左右。最强 H7 的 DMIPS 性能约为 STC15 的 30 倍,即便是 STM32F103 也大概有 STC15 性能的 3 倍,由此可见 STM32 的强大,而且最便宜的 STM32F103,价格大概在 5 块多人民币, 和 STC15 系列的价格差不多。
简单来说是,价格差不多的情况下,51 能做的,STM32 都能做,51 不能做的,STM32 也能做,因此,越来越多的企业选择使用 STM32 替代 51,所以,大家如果能学会STM32,找工作的时候,也会有一定的优势。
4.2 STM32F407资源简介
由表可知,STM32 内部资源还是非常丰富的,将针对这些资源进行详细的使用介绍, 并提供丰富的例程,供大家参考学习,相信经过学习,会对 STM32F407 有一个全面的了解和掌握。
4.3 STM32F407 设计选型
STM32 从 2007 年推出至今, ST公司累计推出了: 5大类、18个系列,超过 1000 个型号的Cortex内核微控制器。为了方便大家选择合适的型号设计产品,本节给大家讲讲 STM32 的设计选型。ST中文社区网: https://www.stmcu.orq.cn ST官网: https://www.st.com
4.3.1 STM32系列
ST公司累计推出了: 5大类、18个系列,如下表所示:
可以看到,STM32 主要分两大块,MCU 和 MPU,MCU 就是我们常见的 STM32 微控制 器,不能跑 Linux,而 MPU 则是 ST 在 19 年才推出的微处理器,可以跑 Linux。重点介绍 MCU 产品,探索者开发板使用的 STM32F407ZGT6 属于主流 MCU 分类里面的高性能 F4 系列。 由于 STM32 系列有很好的兼容性,我们只要能够熟练掌握其中一任何一款 MCU,就可以很方便的学会并使用其他系列的 MCU。
4.3.2 Stm32命名规则
以我们使用的Stm32F407ZGT6为例。如图所示,STM32 的产品名字里面包含了:家族、类别、特定功能、引脚数、闪存容量、 封装、温度范围等重要信息,这些信息可以帮助我们识别和区分 STM32 不同芯片。
4.4 Stm32选型
了解了 STM32 的系列和命名以后,我们再进行 STM32 选型就会比较容易了,这里我们只 要遵循:由高到低,由大到小的原则,就可以很方便的完成设计选型了;
由高到低原则:在不能评估项目所需性能的时候,可以考虑先选择高性能的 STM32 型号进 行开发,比如选择 F4/F7/H7 等,在高性能 STM32 上面完成关键性能(即最需要性能的代码) 开发验证,如果满足使用要求,则可以降档,如从 H7→F7→F4→F1,如不满足要求,则可以升档,如从 F4→F7→H7,通过此方法找到最佳性价比的 STM32 系列。
由大到小原则:在不能评估项目所需 FLASH 大小、SRAM 大小、GPIO 数量、定时器等资源需求的时候,可以考虑先选择容量较大的型号进行开发,比如选择 512K/甚至 1M FLASH 的型号进行开发,等到开发完成大部分功能之后,就对项目所需资源有了定论,从而可以根据实际情况进行降档选择(当然极少数情况可能还需要升档),通过此方法,找到最合适的 STM32 型号。 整个选型工作大家可以在正点原子开发板上进行验证,一般我们开发板都是选择容量比较大/资源比较多的型号进行设计的,这样可以免去大家自己设计焊接验证板的麻烦,加快项目开 发进度。
五、Stm32设计
这里我们简单给大家介绍一下 STM32 的原理图设计,上一节我们通过选型原则可以确定项目所需的 STM32 具体型号,但是在选择型号以后,需要先设计原理图,然后再画 PCB、打 样、焊接、调试等步骤。这里我们重点介绍如何设计 STM32F407ZGT6 的原理图。
任何 MCU 部分的原理图设计,其实都遵循:最小系统 + IO 分配的设计原则。在开始设计原理图之前,我 们要通读一遍对STM32F407ZGT6原理图设计非常有用的手册 : STM32F407ZGT6 的数据手册,可以说不看这个数据手册,我们就无法设计 STM32F407ZGT6 原理图。
5.1 数据手册
在设计 STM32F407 原理图的时候,我们需要用到一个非常重要的文档:STM32F407 数据 手册,里面对 STM32F407 的 IO 定义和说明有非常详细的描述,是我们设计原理图的基础。STM32F407ZGT6.pdf 数据手册是针对 STM32F407 系列的数据手册,主要包括 8 个章节, 如表 2.3.4.1 所示,整个 STM32F407 数据手册,对我们开发以及学习 STM32 来说都比较重要,因此建议大家 可以简单的通读一遍这个文档,以加深印象。对于原理图设计,最重要的莫过于引脚定义这一 章节了,只有知道了 STM32 的引脚定义,才能开始设计原理图。
5.2 主控芯片MCU
正点原子探索者 STM32 开发板选择的是 STM32F407ZGT6 作为 MCU,该芯片是 STM32F407 里面配置非常强大的了,它拥有的资源包括:192KB SRAM、1024KB FLASH、12 个 16 位定时器、2 个 32 位定时器、2 个 DMA 控制器(共 16 个通道)、3 个 SPI、2 个全双工 I2S、3 个 IIC、6 个串口、2 个 USB(支持 HOST/SLAVE)、2 个 CAN、3 个 12 位 ADC、2 个 12 位 DAC、1 个 RTC(带日历功能)、1 个 SDIO 接口、1 个 FSMC 接口、1 个 10/100M 以太网 MAC 控制器、1 个摄像头接口、1 个硬件随机数生成器以及 112 个通用 IO 口。 MCU 部分的原理图如图 2.1.1.1-1 和图 2.1.1.1-2(由于 MCU 引脚比较多,因此我们把原理图分成 2 部分,方便查看)所示:
5.3 最小系统
最小系统就是保证 MCU 正常运行的最低要求,一般是指 MCU 的供电、复位、晶振、BOOT 等部分。
5.3.1 电源电路
正点原子探索者 STM32 开发板板载的电源供电部分,其原理图如图 2.1.29.1 所示:
图中,总共有 3 个稳压芯片:U10/U11/U12,DC_IN 用于外部直流电源输入,范围是 DC6~15V, 输入电压经过 U10 DC-DC 芯片转换为 5V 电源输出,其中 VD1 是防反接二极管,避免外部直流电源极性搞错的时候,烧坏开发板。K1 为开发板的总电源开关,F1 为 1000ma 自恢复保险 丝,用于保护 USB。U11 和 U12 均为 3.3V 稳压芯片,给开发板提供 3.3V 电源,其中 U11 输出 的 3.3V 给数字部分用,U12 输出的 3.3V 给模拟部(ES8388)使用,分开供电,以得到最佳音频。正点原子探索者 STM32 开发板板载了两组简单电源输入输出接口,其原理图如图 2.1.30.1 所示:
图中,VOUT1 和 VOUT2 分别是 3.3V 和 5V 的电源输入输出接口,有了这 2 组接口,我们 可以通过开发板给外部提供 3.3V 和 5V 电源了,虽然功率不大(最大 1000ma),但是一般情况都够用了,大家在调试自己的小电路板的时候,有这两组电源还是比较方便的。同时这两组端 口,也可以用来由外部给开发板供电。
5.3.2 复位电路
正点原子探索者 STM32F407 的复位电路如图 2.1.7.1 所示:
因为 STM32 是低电平复位的,所以我们设计的电路也是低电平复位的,这里的 R51 和 C65 构成了上电复位电路。同时,开发板把 TFT_LCD 的复位引脚也接在 RESET 上,这样这个复位 按钮不仅可以用来复位 MCU,还可以复位 LCD。
5.3.3 BOOT启动电路
正点原子探索者 STM32F407 的启动模式设置端口电路如图 2.1.8.1 所示:
5.3.4 晶振电路
5.3.5 下载调试电路
正点原子探索者 STM32F407 板载的标准 20 针 JTAG/SWD 接口电路如图 2.1.4.1 所示:
这里采用的是标准的 JTAG 接法,但是 STM32 还有 SWD 接口,SWD 只需要最少 2 跟线(SWCLK 和 SWDIO)就可以下载并调试代码了,这同我们使用串口下载代码差不多,而且速度非常快,能调试。所以建议大家在设计产品的时候,可以留出 SWD 来下载调试代码, 而摒弃 JTAG。STM32 的 SWD 接口与 JTAG 是共用的,只要接上 JTAG,你就可以使用 SWD 模式了(其实并不需要 JTAG 这么多线),当然,你的调试器必须支持 SWD 模式,DAP、ST LINK、JLINK 和 ULINK 等都支持 SWD 调试。 特别提醒,JTAG 有几个信号线用来接其他外设了,但是 SWD 是完全没有接任何其他外设的,所以在使用的时候,推荐大家一律使用 SWD 模式!!!
5.4 IO 分配
完成以上引脚的设计以后,STM32F407 的最小系统就完成了,关于这些引脚的实际原理图, 可以参考探索者开发板的原理图。接下来就可以开始进行 IO 分配了。 IO 分配就是在完成最小系统设计以后,根据项目需要对 MCU 的 IO 口进行分配,连接不同的器件,从而实现整体功能。比如:GPIO、IIC、SPI、SDIO、FSMC、USB、中断等。遵循: 先分配特定外设 IO,再分配通用 IO,最后微调的原则.
经过以上几个步骤,我们就可以完成 STM32F407 的原理图设计了。
5.5 其他电路
5.5.1 引出IO口
正点原子探索者 STM32F407 引出了 STM32F407ZGT6 的所有 IO 口,如图 2.1.2.1 所示:
图中P7、P8和P9为MCU主IO引出口,这三组排针共引出了102个IO 口,STM32F407ZGT6 总共有 112 个 IO,除去 RTC 晶振占用的 2 个,还剩 110 个,这三组主引出排针,总共引出了 104 个 IO,剩下的 8 个 IO 口分别通过:P10(PA9&PA10)、P4(PA2&PA3)、P2(PB10&PB11) 和 P5(PA11&PA12)等 4 组排针引出。
5.5.2 USB 串口/串口 1 选择接口
正点原子探索者 STM32F407 板载的 USB 串口和 STM32F407ZGT6 的串口是通过 P10 连接起来的,如图 2.1.3.1 所示:
图中 TXD/RXD 是相对 CH340 来说的,也就是 USB 串口的发送和接收脚。而 USART1_RX 和 USART1_TX 则是相对于 STM32F407ZGT6 来说的。这样,通过对接,就可以实现 USB 串口和 STM32F407ZGT6 的串口通信了。同时,P10 是 PA9 和 PA10 的引出口。 这样设计的好处就是使用上非常灵活。比如需要用到外部TTL串口和STM32通信的时候, 只需要拔了跳线帽,通过杜邦线连接外部 TTL 串口,就可以实现和外部设备的串口通信了;又比如我有个板子需要和电脑通信,但是电脑没有串口,那么你就可以使用开发板的 RXD 和 TXD 来连接你的设备,把我们的开发板当成 USB 转 TTL 串口用了。
5.5.3 按键
正点原子探索者 STM32F407 板载总共有 4 个输入按键,其原理图如图 2.1.20.1 所示:
KEY0、KEY1 和 KEY2 用作普通按键输入,分别连接在 PE4、PE3 和 PE2 上,这里并没有 使用外部上拉电阻,但是 STM32 的 IO 作为输入的时候,可以设置上下拉电阻,所以我们使用 STM32 的内部上拉电阻来为按键提供上拉。 KEY_UP 按键连接到 PA0(STM32 的 WKUP 引脚),它除了可以用作普通输入按键外,还可以用作 STM32 的唤醒输入。注意:这个按键是高电平触发的。
5.5.4 有源蜂鸣器
正点原子探索者 STM32F407 板载了一个有源蜂鸣器,其原理图如图 2.1.23.1 所示:
有源蜂鸣器是指自带了震荡电路的蜂鸣器,这种蜂鸣器一接上电就会自己震荡发声。而如 果是无源蜂鸣器,则需要外加一定频率(2~5Khz)的驱动信号,才会发声。这里我们选择使用有源蜂鸣器,方便大家使用。 图中 Q4 是用来扩流,R65 则是一个下拉电阻,避免 MCU 复位的时候,蜂鸣器可能发声的现象。BEEP 信号直接连接在 MCU 的 PF8 上面,PF8 可以做 PWM 输出,所以大家如果想玩高级点(如:控制蜂鸣器“唱歌”),就可以使用 PWM 来控制蜂鸣器。
5.5.5 USB 串口
正点原子探索者 STM32 开发板板载了一个 USB 串口,其原理图如图 2.1.31.1 所示
以上便是为大家带来的STM32的第一节的内容,主要认识嵌入式系统和对于stm32有个大概的认识,后面会逐步介绍每个外设的固件库使用方法,如有兴趣,感谢点赞、关注、收藏,若有不正地方,还请各位大佬多多指教!