嵌入式开发一:初识Stm32

目录

一、嵌入式简介

1.1 嵌入式概念

1.2 嵌入式系统的组成

1.3 嵌入式的分类

1.3.1 嵌入式系统的分类

1.3.2 嵌入式处理器的分类

二、单片机简介(MCU嵌入式微控制器)

2.1 单片机是什么

2.2 单片机的作用是什么

2.3 单片机的发展历程

2.4 单片机发展趋势

2.5 复杂指令集计算机(CISC)精简指令集计算机(RISC)区别

2.6 计算机的冯诺依曼结构VS哈佛结构

三、CortexM系列介绍

3.1 ARM公司

3.2 ARM的体系架构

3.3 Cortex内核分类及特征

3.3 Cortex-M3/4/7介绍

四、Stm32介绍

4.1 Stm32是什么

4.2 Stm32命名规则

4.3  Stm32选型

4.4 系统架构 

五、Stm32原理图介绍

5.1 学会查看数据手册

5.2 主控芯片MCU 

5.3 最小系统

5.3.1 电源电路

5.3.2 复位电路

5.3.3 BOOT启动电路

5.3.4 晶振电路

5.3.5 下载调试电路

5.4 其他电路

5.4.1 引出IO口

5.4.2 USB 串口/串口 1 选择接口

5.4.3 按键

5.4.4 有源蜂鸣器

5.4.5 USB 串口

一、嵌入式简介

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.3 Cortex-M3/4/7介绍

四、Stm32介绍

4.1 Stm32是什么

   ST:意法半导体;

   M:Microcontroller/微控制器 全称:意法半导体⽣产的32位处理器;

      我们教学⽤的这款ST的控制器STM32F4067ZGT6,就是基于ARM的Cortex-M4内核的微处理器(MCU)

     ST公司累计推出了: 5大类、18个系列、1000多个型号的Cortex内核微控制器。

ST中文社区网: https://www.stmcu.orq.cn

ST官网: https://www.st.com

4.2 Stm32命名规则

    以我们使用的Stm32F407ZGT6为例。

Stm32F407ZGT6芯片资源介绍

4.3  Stm32选型

依据原则:性能由高到低,由大到小。

4.4 系统架构 

     STM32F407ZGT6芯片内部的总线矩阵是一种用于连接处理器核心、外设和存储器之间的高速数据传输的结构,它提供了高速、多通道的数据传输通路,为嵌入式系统的设计和开发提供了灵活性和性能保障。

  • 总线矩阵提供了处理器核心(如ARM Cortex-M4)与芯片内部外设(如定时器、串口、SPI、I2C等)和存储器(如Flash、SRAM等)之间的连接通路。
  • 这些通路以总线的形式存在,允许处理器核心通过总线与外设和存储器进行数据交换和通信。

五、Stm32原理图介绍

5.1 学会查看数据手册

如何获取数据手册?

     (1)ST官网: https://www.st.com
     (2)ST中文社区网: https://www.stmcu.org.cn/

正点原子开发板对应的主控型号和封装

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 口。该芯片的配置十 分强悍,很多功能相对 STM32F1 来说进行了重大改进,比如 FSMC 的速度,F4 刷屏速度可达 3300W 像素/秒,而 F1 的速度则只有 500W 左右。 MCU 部分的原理图如图 2.1.1.1-1 和图 2.1.1.1-2(由于 MCU 引脚比较多,因此我们把原理 图分成 2 部分,方便查看)所示:

 

 

5.3 最小系统

最小系统:保证MCU正常工作的最小电路组成单元

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 其他电路

5.4.1 引出IO口

正点原子探索者 STM32F407 引出了 STM32F407ZGT6 的所有 IO 口,如图 2.1.2.1 所示:

      图中P7、P8和P9为MCU主IO引出口,这三组排针共引出了102个IO 口,STM32F407ZGT6 总共有 112 个 IO,除去 RTC 晶振占用的 2 个,还剩 110 个,这三组主引出排针,总共引出了 102 个 IO,剩下的 8 个 IO 口分别通过:P10(PA9&PA10)、P4(PA2&PA3)、P2(PB10&PB11) 和 P5(PA11&PA12)等 4 组排针引出。

5.4.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.4.3 按键

正点原子探索者 STM32F407 板载总共有 4 个输入按键,其原理图如图 2.1.20.1 所示:

KEY0、KEY1 和 KEY2 用作普通按键输入,分别连接在 PE4、PE3 和 PE2 上,这里并没有 使用外部上拉电阻,但是 STM32 的 IO 作为输入的时候,可以设置上下拉电阻,所以我们使用 STM32 的内部上拉电阻来为按键提供上拉。 KEY_UP 按键连接到 PA0(STM32 的 WKUP 引脚),它除了可以用作普通输入按键外,还可 以用作 STM32 的唤醒输入。注意:这个按键是高电平触发的。

5.4.4 有源蜂鸣器

正点原子探索者 STM32F407 板载了一个有源蜂鸣器,其原理图如图 2.1.23.1 所示:

有源蜂鸣器是指自带了震荡电路的蜂鸣器,这种蜂鸣器一接上电就会自己震荡发声。而如 果是无源蜂鸣器,则需要外加一定频率(2~5Khz)的驱动信号,才会发声。这里我们选择使用有源蜂鸣器,方便大家使用。 图中 Q4 是用来扩流,R65 则是一个下拉电阻,避免 MCU 复位的时候,蜂鸣器可能发声的现象。BEEP 信号直接连接在 MCU 的 PF8 上面,PF8 可以做 PWM 输出,所以大家如果想玩高级点(如:控制蜂鸣器“唱歌”),就可以使用 PWM 来控制蜂鸣器。

5.4.5 USB 串口

正点原子探索者 STM32 开发板板载了一个 USB 串口,其原理图如图 2.1.31.1 所示

       以上便是为大家带来的STM32的第一节的内容,主要认识嵌入式系统和对于stm32有个大概的认识,后面会逐步介绍每个外设的固件库使用方法,如有兴趣,感谢点赞、关注、收藏,若有不正地方,还请各位大佬多多指教!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2990520.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

HP Pavilion Plus Laptop 16-ab0040TU原厂Win11系统

惠普HP星16-abxxxx笔记本电脑原装出厂Windows11系统镜像安装包下载,恢复出厂开箱状态预装OEM系统 适用型号: 16-ab0011TU、16-ab0040TU、16-ab0041TU、16-ab0042TU、16-ab0043TU 16-ab0044TX、16-ab0045TX、16-ab0046TX、16-ab0047TX 链接&#xff1a…

mac资源库的东西可以删除吗?提升Mac运行速度秘籍 Mac实用软件

很多小伙伴在使用mac电脑处理工作的时候,就会很疑惑,电脑的运行速度怎么越来越慢,就想着通过删除mac资源库的东西,那么mac资源库的东西可以删除吗?删除了会不会造成电脑故障呢? 首先,mac资源库…

Android使用ProtoBuf 适配 gradle7.5 gradle8.0

ProtoBuf 适配 Gradle7.5 gradle-wrapper.properties 配置 distributionUrlhttps\://services.gradle.org/distributions/gradle-7.5-bin.zipProject:build.gradle: plugins {id com.android.application version 7.4.2 apply falseid com.android.library versio…

Unreal Engine子类化系统UButton

UE系统Button点击事件无法传递参数,通过子类化系统Button添加自定义参数扩展实现Button点击事件参数传递点击C类文件夹,在右边的区域点击鼠标右键,在弹出的菜单中选择“新建C类”在弹出的菜单中选中“显示所有类”,选择Button作为…

Vscode上使用Clang,MSVC, MinGW, (Release, Debug)开发c++完全配置教程(包含常见错误),不断更新中.....

1.VSCode报错头文件找不到 clang(pp_file_not_found) 在Fallback Flags中添加 -I(是-include的意思,链接你的编译器对应头文件地址,比如我下面的是MSVC的地址) 问题得到解决~

uniapp-css多颜色渐变:左右+上下

案例展示 案例代码&#xff1a; 代码灵感&#xff1a;使用伪类进行处理 <view class"headBox"></view>.headBox {height: 200rpx;background: linear-gradient(to right, #D3D5F0, #F0DCF3, #F7F6FB, #DAE8F2, #E1D3EE);position: relative; }.headBox…

【论文速读】|理解基于大语言模型的模糊测试驱动程序生成

本次分享论文&#xff1a;Understanding Large Language Model Based Fuzz Driver Generation 基本信息 原文作者&#xff1a;Cen Zhang, Mingqiang Bai, Yaowen Zheng, Yeting Li, Xiaofei Xie, Yuekang Li, Wei Ma, Limin Sun, Yang Liu 作者单位&#xff1a;南洋理工大学…

13.电子产品拆解分析-插排带3USB

13.电子产品拆解分析-插排带3USB 一、功能介绍二、电路分析以及器件作用1、三个插座之间通过电线连接,总开关控制火线2、通过FSD3773低待机功耗原边反馈AC/DC驱动芯片控制5V的输出一、功能介绍 ①一键控制总电源开关;②带三路USB输出;③最大支持2500W输出,10A输出电流;④8…

排序算法-计数排序

一、计数排序 这种排序算法 是利用数组下标来确定元素的正确位置的。 如果数组中有20个随机整数&#xff0c;取值范围为0~10&#xff0c;要求用最快的速度把这20个整数从小到大进行排序。 很大的情况下&#xff0c;它的性能甚至快过那些时间复杂度为O(nlogn&#xff09;的排序。…

汽车底盘域的学习笔记

前言&#xff1a;底盘域分为传统车型底盘域和新能源车型底盘域&#xff08;新能源系统又可以分为纯电和混动车型&#xff0c;有时间可以再研究一下&#xff09; 1&#xff1a;传统车型底盘域 细分的话可以分为四个子系统 传动系统 行驶系统 转向系统 制动系统 1.1传动系…

Golang | Leetcode Golang题解之第52题N皇后II

题目&#xff1a; 题解&#xff1a; func totalNQueens(n int) (ans int) {columns : make([]bool, n) // 列上是否有皇后diagonals1 : make([]bool, 2*n-1) // 左上到右下是否有皇后diagonals2 : make([]bool, 2*n-1) // 右上到左下是否有皇后var backtrack func(int)…

git如何查询回退之前的提交记录

git如何查询回退之前的提交记录 使用 git reflog 命令&#xff1a; 使用 git reflog 命令&#xff1a; git refloggit reflog 显示的是你的本地引用日志&#xff0c;它包含了所有HEAD指向变更的历史记录&#xff0c;即使那些已经被删除的提交也会出现在这里。当你误操作回退并…

【QA】Git的底层原理

前言 本文通过一个简单的示例&#xff0c;来理解Git的底层原理。 示例 1、新建本地仓库并上传第一个文件 相关步骤&#xff1a; 新建仓库及创建文件查看文件状态将文件添加到暂存区将文件提交到本地仓库 HMTeenLAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-…

国产麒麟v10系统下打包electron+vue程序,报错unknown output format set

报错如下&#xff1a; 报错第一时间想到可能是代码配置原因报错&#xff0c;查看代码似乎感觉没啥问题 又查看具体报错原因可能是因为icon的原因报错&#xff0c;后面查阅发现ico在各系统平台会不兼容&#xff0c;也就是ico是给win下使用的&#xff0c;此处改下图标格式就ok&am…

生成扩散模型漫谈:信噪比与大图生成(下)

©PaperWeekly 原创 作者 | 苏剑林 单位 | 科学空间 研究方向 | NLP、神经网络 上一篇文章《生成扩散模型漫谈&#xff1a;信噪比与大图生成&#xff08;上&#xff09;》中&#xff0c;我们介绍了通过对齐低分辨率的信噪比来改进 noise schedule&#xff0c;从而改善直接…

Flutter应用下拉菜单设计DropdownButtonFormField控件介绍

文章目录 DropdownButtonFormField介绍使用方法重点代码说明属性解释 注意事项 DropdownButtonFormField介绍 Flutter 中的 DropdownButtonFormField 是一个用于在表单中选择下拉菜单的控件。它是 DropdownButton 和 TextFormField 的组合&#xff0c;允许用户从一组选项中选择…

Unity类银河恶魔城学习记录15-1,2 p153 Audio Manager p154 Audio distance limiter

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili AudioManager.cs using System.Collections; using System.Collections.Gen…

uniapp制作分页查询功能

效果 代码 标签中 <uni-pagination change"pageChanged" :current"pageIndex" :pageSize"pageSize" :total"pageTotle" class"pagination" /> data中 pageIndex: 1, //分页器页码 pageSize: 10, //分页器每页显示…

【iconv】Linux c++ 中文字符串转十六进制 GBK 编码/内码

文章目录 问题描述c 代码CMakeLists.txt参考链接 问题描述 Linux 系统默认使用的是 UTF-8 编码&#xff0c;并且 c 中没有标准库可以直接将中文字符转为 GBK 编码/内码。因此需要借助 iconv 库来实现。 在实现代码之前&#xff0c;可以在一下在线工具网站进行中文字符到各个编…

Java根据模板动态生成Pdf(添加页码、文件加密、Spire免费版本10页之后无法显示问题、嵌入图片添加公章、转Base64)

Java根据模板动态生成Pdf&#xff1a;添加页码、文件加密、Spire免费版本10页之后无法显示问题、嵌入图片添加公章、转Base64 引言【Java根据模板动态生成Pdf资源地址】示例一&#xff1a;动态生成带页码的PDF报告示例二&#xff1a;加密PDF以保护敏感信息示例三&#xff1a;应…