stm32学习笔记-1 STM32简介

news2024/11/20 20:25:44

1 STM32简介

[toc]

注:笔记主要参考 江科大自化协 教学视频“STM32入门教程-2023持续更新中”。
注:工程及代码文件放在了本人的Github仓库。


1.1 套件简介

本教程使用STM32最小系统板(STM32F103C8T6)+面包板硬件平台进行学习。使用面包板可以完成任意硬件的连接,相比于成品的开发板方式,使用面包板更有利于对硬件电路的学习,而且也可以避免开发板的一些问题(如引脚冲突、引脚无法更改等)。但是,面包板也有缺点,比如实验现象不对有可能时程序接线的问题,所以连线时要更加细心一些。主要套件如下:

图1-1 STM32开发套件简介

STM32是一款32位单片机(51单片机是8位单片机),其中“ST”是ST公司(得捷电子Digi-Key是其官方授权的分销商),“M”则是“MicroController Unit, MCU”的缩写,即STM32基于ARM Cortex-M内核开发的32位微控制器。补充一点概念上的区别(不是非常认同但先这么记着):

MCU 和单片机的区别:

  1. 原理不同:
    mcu又称单片微型计算机(Single Chip Microcomputer )或者单片机,重点在于单片
    单片机则是把一个计算机系统集成到一个芯片上,重点在于芯片,相当于微型计算机但缺少I/O设备。
  2. 指代对象不同:
    MCU是指单片微型计算机或者单片机。单片机则是微型计算机家族中的一个分支而已。
  3. 范畴不同:
    CPU有三个分支:DSP、MCU(Micro Control Unit,微控制器单元)、MPU(Micro Processor Unit,微处理器单元)。
    单片机是MCU中最具有代表性,是MCU的实现。
  4. 功能不同。
    MCU在不同的场合有不同的应用。例如手机、遥控器甚至汽车电子和机器手臂的控制等都有涉及。
    单片机的使用领域比MCU的要更为广泛,从家用电器和通讯设备到智能仪表以及导航系统都有应用。
  5. 用途不同:
    MCU倾向于不同信息源的多种数据的处理诊断和运算,更侧重于控制
    而单片机就是一块芯片,主要是对数据进行高速化处理

注:但通常认为MCU和单片机概念等价。

STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器,常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等。下面是ST公司官网上对于自家STM32 MCU的产品型号介绍:

图1-2 STM32产品型号

注:通常来说,无线wifi都用esp,用stm32的个人玩家很少。

ARM既指ARM公司,也指ARM处理器内核。ARM公司是全球领先的半导体知识产权(IP)提供商(只设计内核,不生产实物),全世界超过95%的智能手机和平板电脑都采用ARM架构。ARM公司设计ARM内核,半导体厂商完善内核周边电路并生产芯片。ST公司就是ARM公司的授权厂商之一。下面是ARM公司设计的内核系列:

图1-3 ARM内核系列

根据上图,ARM针对不同的应用场景设计了不同型号的内核。经典款逐渐不够用之后,AREM公司推出了新一代的Cortex内核来满足市场需求,并推出了Cortex-A、Cortex-R、Cortex-M三种系列。通常,A系列适用于高端应用领域(如手机芯片),R系列主要针对实时处理领域(如硬盘监控器),M系列适用于单片机领域。

1.2 STM32芯片内部的外设

下图的左侧是所有STM32芯片的内部结构示意图。可以看出ARM公司设计的内核只是其中的一部分(但最关键,相当于CPU),其他公司围绕着这个内核设计一系列外围电路配合其工作,进而发挥内核的性能。右侧图则给出了本节课程所使用的STM32芯片:STM32F103C8T6。

STM32F103C8T6主要指标
系列:主流系列STM32F1
内核:ARM Cortex-M3
主频:72MHz
RAM(运行内存):20K(SRAM)
ROM(程序存储器):64K(Flash)
供电:2.0~3.6V(标准3.3V)。由于USB供电是5V,所以还要加稳压芯片。(注:51单片机为5V供电)
封装:LQFP48

图1-4 STM32芯片内部结构示意图
表1-1 STM32F1系列的片上资源/外设
英文缩写名称补充说明英文缩写名称补充说明
NVIC嵌套向量中断控制器内核中用于管理中断的设备,如配置中断优先级。CANCAN通信常用于汽车领域。
SysTick系统滴答定时器内核中的定时器,给操作系统(如FreeRTOS、UCOS等)提供定时服务,以完成任务切换。USBUSB通信可以做模拟鼠标、模拟U盘等设备。
RCC复位和时钟控制使能各模块时钟,上电默认其他外设模块均无时钟。RTC实时时钟可接备用电池,掉电保持运行。
GPIO通用IO口可以用GPIO来点灯、读取按键等。CRCCRC校验
AFIO复用IO口可以完成复用端口的重定义,中断端口的配置。PWR电源控制可使芯片进入睡眠模式,节能。
EXTI外部中断引脚有电平变化会触发中断。BKP备份寄存器接备用电池,掉电保存数据。
TIM定时器最常用,功能最多的外设,可以测频率、生成PWM波等。分为高级定时器、通用定时器(最常用)、基本定时器。IWDG独立看门狗当程序死机或死循环时,复位程序。
ADC模数转换器芯片内的12位ADC外设,无需外接AD芯片。WWDG窗口看门狗
DMA直接内存访问帮助CPU搬运大量数据。DAC数模转换器
USART同步/异步串口通信异步串口UART应用更多。SDIOSD卡接口用于读取SD卡数据。
I2CI2C通信FSMC可变静态存储控制器用于扩展内存,或配置成其他总线协议。
SPISPI通信USB OTGUSB主机接口让STM32作为USB主机,读取其他设备。

注意:

  1. 前两个加粗资源表示是位于Cortex-M3内核里面的外设,剩下的都是位于内核之外的外设。
  2. 上表给出的是STM32F1系列芯片中所有的外设,而具体到STM32F103C8T6芯片,则不包含最后4种外设。
  3. 关于芯片外设的具体介绍,可以参考数据手册《STM32F10xxx参考手册》、《STM32F103x8B数据手册》。
图1-5 STM32系列产品命名规则

1.3 STM32芯片系统结构

图1-6 STM32芯片系统结构

首先来看看STM32的芯片系统结构(只需要大致了解一下即可):

  • Cortex-M3:内核。注意ICode、DCode、System是直接从内核引出的三根总线。
  • Flash:存储编写的程序。ICode总线和DCode总线主要用于连接Flash闪存。
  • SRAM:用于存储程序运行时的变量数据。
  • ICode:指令总线。加载程序指令。
  • DCode:数据总线。加载数据,如常量和调试参数。
  • System:系统总线。连接到Flash以外其他外设上,如SRAM、FSMC(本课程不会用到)。
  • AHB系统总线:先进高性能总线。用于挂载最基本的(如复位和时钟控制RCC、SDIO)、或者性能比较高的外设。
  • APB2、APB1:先进外设总线。用于连接一般的外设。通常AHB(72MHz)性能总体高于APB,而APB2(72MHz)性能高于APB1(36MHz)。所以APB2连接外设中稍微重要的部分,如GPIO、各外设的1号接口;剩下的次要外设给APB1。
  • 桥接2、桥接1:由于AHB和APB的总线协议、 总线速度、数据传输格式上的差异,需要加上2个桥接,来完成数据的转换和缓存。
  • DMA2、DMA1:拥有和CPU相同的总线控制权,用于帮助CPU完成数据搬运这样简单但重复的活,相当于CPU的小秘书。若外设需要进行数据搬运,那么会直接找DMA(DMA请求),DMA就会获得总线控制权来搬运数据,整个过程无需CPU的参与。

1.4 STM32芯片引脚定义

图1-6 STM32F103C8T6引脚定义

上图给出了UP主自己做的STM32F103C8T6引脚定义。一些说明如下:

  1. 标红色的是电源相关的引脚,标蓝色的是最小系统相关的引脚,标绿色的是IO口、功能口引脚。所以 最小系统板主要关心红色和蓝色部分。
  2. 类型:S代表电源、I代表输入、O代表输出、I/O代表输入输出。
  3. I/O口电平:表示I/O所能容忍的电压,默认3.3V,FT表示5V。注意没有FT标志的引脚都需要加装电平转换电路。
  4. 主功能:上电默认功能。
  5. 默认复用功能:I/O口上同时连接的外设功能引脚,配置IO口时可以设置是主功能/复用功能。
  6. 重定义功能:如果需要某一个端口上实现两个功能,那么可以将其中一个功能重映射到另一个空闲端口上,这个空闲端口的重定义功能需要包含相应的功能。
  7. 推荐优先使用加粗的IO口,没有加粗的可能需要配置或兼具其他功能,使用时需要注意。

下面来一一介绍这些引脚的功能:

引脚1:备用电池供电。可接3V电池,系统断电时为芯片内部的RTC和备用寄存器提供电源。
引脚2:IO口/入侵检测/RTC。IO口输出或读取高低电平;入侵检测提供安全保障,可以将外部一些防拆的触点接在此端口,若触点电平变化,STM32芯片会自动清空寄存器数据;RTC可输出RTC校准时钟、RTC闹钟脉冲、秒脉冲。
引脚3、4:IO口/32.765kHzRTC晶振。
引脚5、6:系统主晶振,一般8MHz,芯片内的锁相环电路将时钟倍频成72MHz作为系统主时钟。
引脚7:系统复位引脚。N表示低电平复位。
引脚8、9:芯片内部模拟部分的电源,如ADC、RC振荡器等。VSS接地、VDD接3.3V。
引脚10~19、21~22、25~33、41~43、45~46:共26个默认普通IO口。 其中的PA0兼具WKUP功能,用于唤醒处于待机状态的STM32。
引脚20:IO口/BOOT1引脚。BOOT1引脚用于控制启动模式。
引脚23/24、35/36、47/48:系统的主电源口。STM32采用分区供电的方式,所以供电口多。
引脚34、37~40:IO口/调试端口。STM32支持SWD和JTAG两种调试方式。SWD只需SWDIO、SWCLK两根线;JTAG需要全部的5根。教程使用STLINK(SWD)下载程序,此时剩余3个引脚可配置成IO口。
引脚44:BOOT0,和BOOT1配合,用于启动配置。启动配置就是指定程序开始运行的位置,一般程序在Flash程序存储器中运行,但在某些情况下可以指定程序在别的地方开始执行以完成特殊功能。

  • “主闪存存储器”启动模式最常用。
  • “系统存储器”模式用于串口下载程序,系统存储器中存储的是一段STM32的BootLoader程序,其作用就是接收串口数据然后刷新到主闪存中。当5个调试端口全被配置成IO口时,单片机将无法再下载程序!! 此时只能使用串口下载程序的方式进行补救。另外,当手头上没有STLINK和JLINK,也可以使用串口来下载程序,通俗来说就是“刷机”。😂
  • “内置SRAM”模式主要用于程序调试,使用较少,本教程不会出现。
  • 注意BOOT值是在上电一瞬间(第4个时钟上升沿)有效,后面随意,即BOOT1引脚后续会变成普通IO口。

1.5 STM32最小系统

图1-7 STM32F103C8T6最小系统原理图

上面给出了STM32最小板的原理图。单片机只有一个芯片无法正常工作,还需要连接一些最基本的电路,称之为最小系统电路。即,最小板仅保留引脚中的电源部分(红色)和最小系统部分(蓝色)

  • STM32及供电:连接了4个电源进行分区供电,每个电源的正负极之间都加了滤波电容滤除电源波纹。备用电源VBAT有需要就接上。
  • 晶振:8MHz主时钟,内部锁相环倍频到72MHz主频。C1、C2是两个起振电容。若需要RTC功能还需要接32.768kHz晶振,这个晶振经过215分频就可以得到1s的计数。
  • 复位:给单片机提供复位信号,低电平复位。C3保证上电瞬间NRST为低电平,后续充电变成高电平。左侧并联的按键提供手动复位的功能。
  • 启动配置:拨动中间的开关就可以让BOOT1、BOOT0引脚选择相应的高低电平了。开发板上选择了跳线帽实现。
  • 下载端口:使用STLINK下载程序,需要将SWDIO、SWCLK两个引脚接出来方便引线,GND必须引出来,3.3V供电可以不引,但是建议这四个引脚都引出来。
  • 没有给出的稳压芯片:常用的5V转3.3V稳压芯片有XC6204、XC6206、AMS1117等。

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

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

相关文章

微信小程序 Springboot校园自动点餐系统带跑腿 java

开发语言:Java 小程序前端框架:uniapp 小程序运行软件:微信开发者 可选运行软件:webapp (hbuiderx) 前端开发语言:vue.js 后端技术:Springboot(SpringSpringMVCMyBatis) 可选技术:springboot 后端开发环境:idea和eclipse都支持 数据库:mysql …

六、服务端开发

服务器端开发&#xff1a;服务器设计框架&#xff1a;缓解和转发的作用连接音箱和app最大一个作用转发一个app操作音箱app绑定音箱服务器类实现&#xff1a;jsoncpplibventverser.h#ifndef SERVER_H #define SERVER_H#include <event.h>#define IP "172.17.7.99&…

【C++入门】缺省参数

目  录1 缺省参数1.1 缺省参数概念1.2 缺省参数分类1.3 缺省参数使用注意1 缺省参数 1.1 缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。 在调用该函数时&#xff0c;如果没有指定实参&#xff0c;则采用该形参的缺省值&#xff0c;否则使用指定的实…

Spring Profiles 实现多环境配置 ,切换环境

Spring Profiles 实现多环境配置 Spring Profiles 就是针对应用程序&#xff0c;不同环境需要不同配置加载的一种解决方案。 使用场景: 我们平常项目开发&#xff0c;经常需要根据不同的环境进行配置的修改&#xff0c;比如在本地开发会加载本机的配置和开发环境数据库&#x…

【NKOJ-昨天今天和明天】考试游记

目录 昨天上午的序列 - 30pts今天上午的扫除 - 100pts明天上午的教室 - 100pts明天上午的数组 - 100pts明天上午的函数 - 100pts 题目排序太合理了,EDCBA依次变难,导致我对着A题苦思冥想了半小时...但是A题是[LeetCode 907. 子数组的最小值之和]的换皮题(除了题目一点没变)然…

初始OAuth2.0

1. 什么是OAuth2.0 OAuth2.0是目前使用非常广泛的授权机制&#xff0c;用于授权第三方应用获取用户的数据。 举例说明&#xff1a;用户可以通过选择其他登录方式来使用gitee&#xff0c;这里就使用到了第三方认证。 OAuth 引入了一个授权层&#xff0c;用来分离两种不同的角色…

前端工程化

一、前端工程化1、webpack&#xff08;1&#xff09;定义&#xff1a;是一个前端的构建工具。前端代码格式多&#xff08;html、css、js、图片&#xff09;&#xff0c;前端构建工具的作用是将各种格式不同文件打包到一起&#xff0c;方便项目的上线运行。&#xff08;将开发环…

Java学习笔记---干货

Java学习 一、java版本 JavaSE &#xff1a;标准版&#xff08;桌面应用程序、控制台程序&#xff09; JavaEE&#xff1a;E企业级开发&#xff08;Web端&#xff0c;服务器的开发&#xff09; JDK&#xff1a;Java开发工具 JRE&#xff1a;Java运行环境 JVM&#xff1a;…

通信原理笔记—基带信号的功率谱

目录 二进制纯随机序列基带信号的功率谱&#xff1a; 基带信号的功率谱分析&#xff1a; (1)信号(t)的功率谱&#xff1a; (2)信号v(t)的功率谱&#xff1a; 随机序列S(t)的功率谱&#xff1a; 二进制纯随机序列基带信号的功率谱&#xff1a; 基带信号的功率谱分析&#…

软件需求说明书确保正确性的6大关键点

软件需求说明书对软件开发项目非常关键&#xff0c;如何确保其正确性&#xff0c;关键有6大要点&#xff01; 1、需求与其他需求是否相互冲突或重复 一般需求规格说明书长达几百页&#xff0c;并不是一蹴而就的&#xff0c;因此可能出现前后观点的重叠或差异&#xff0c;或同一…

[HDCTF2019]Maze 题解

少欲则心静&#xff0c;心静则事简。 ——人民日报 1.查壳 是一个加了upx壳的32位EXE文件 2.使用Kali Linux脱壳 maze题目脱壳3.去除脏字节 没有找到主函数&#xff0c;发现这段汇编代码标红了&#xff0c;IDA分析崩溃&#xff0c;这是掺杂了花指令 这里jnz&#xff0c;不论判…

中国电子学会2022年03月份青少年软件编程Scratch图形化等级考试试卷三级真题(含答案)

青少年软件编程&#xff08;图形化&#xff09;等级考试试卷&#xff08;三级&#xff09; 分数&#xff1a;100 题数&#xff1a;38 一、单选题(共25题&#xff0c;共50分) 1. 以下四个选项中&#xff0c;运行哪个积木块&#xff0c;可能得到523这个数值&#xff1f;&…

25-35分布式事务seata

分布式事务Seata使用及其原理剖析 Seata的三大角色 TC (Transaction Coordinator) - 事务协调者 维护全局和分支事务的状态&#xff0c;驱动全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器 定义全局事务的范围&#xff1a;开始全局事务、提交或回滚全局事务。 RM…

devicetree和启动参数解析流程

devicetree和启动参数解析流程 文章目录devicetree和启动参数解析流程一、设备树解析概述二、early device tree 解析流程三、device node节点创建流程四、bootargs参数解析&#xff14;.1 bootargs参数配置&#xff14;.&#xff12; early param参数解析&#xff14;.&…

Docker - 2. Docker 工作原理

目录 1. Docker入门图解 2. Docker 整体架构和底层通讯原理 1. Docker入门图解 (1) Docker是一个Client-Server结构的系统&#xff0c;Docker守护进程(图中Docjer daemon)运行在主机上&#xff0c;然后通过Socket链接客户端往返&#xff0c;守护进程从客户端接收命令并管理在…

PySpark 之 SparkSQL 编程

1. DataFrame 的创建 1.1 RDD 和 DataFrame 的区别 RDD 是一种弹性分布式数据集&#xff0c;Spark中的基本抽象。表示一种不可变的、分区储存的集合&#xff0c;可以进行并行操作DataFrame是一种以列对数据进行分组表达的分布式集合&#xff0c; DataFrame等同于Spark SQL中的…

jvm宏观上类的加载机制整体和微观上通过类加载器进行加载的过程

说到一个词“类的加载”其实含有歧义&#xff0c;因为在jvm中可以说有一个宏观的&#xff0c;即整体上的类的加载&#xff0c;还有一个微观上的加载&#xff0c;也就是狭隘的通过类加载器的加载class文件的过程&#xff0c;这里介绍这两种“类的加载”。 类的整体加载过程(类加…

Windows C盘清理的正确方式,从此你告别红色烦恼

前言 伴随着电脑工作的时间越久&#xff0c;C盘常常会提示显示其内存已不足。 C盘容量不足将会极大影响系统的运行速度&#xff0c;电脑会变卡、死机。 今天&#xff0c;就给大家分享一个C盘空间清理终极解决方案&#xff1a; 1、利用Windows自己附带的磁盘清理工具 1&…

[oeasy]python0068_ 字体样式_正常_加亮_变暗_控制序列

字体样式 回忆上次内容 上次了解了一个新的转义模式 \33 逃逸控制字符 esc esc 让输出 退出标准输出流 进行控制信息的设置 可以清屏也可以设置光标输出的位置 还能做什么呢&#xff1f; 可以设置字符的颜色吗&#xff1f;&#xff1f;&#xff1f;&#x1f914; 查看细节…

BIC-2022-BDT:区块链和基于数字双胞胎的智能制造高效数据处理安全框架

摘要工业物联网具有智能连接、数据实时处理、协同监测、信息自动处理等特点&#xff0c;是物联网时代的重要组成部分之一。异构工业物联网设备对高数据速率、高可靠性、高覆盖、低延迟的要求&#xff0c;已成为信息安全领域的一大挑战。工业物联网中的智能制造产业需要多方协同…