STM32单片机简介

1.基本情况

STM32单片机正如其名是32位微控制器,相较于51单片机的8位微控制器,性能会更好,但学习难度也会提高。

在stm32单片机中内核时核心部分,是ARM公司设计的,其在stm32单片机中占据极为重要的地位。(程序指令的执行,如+-*/运算都是在内核中完成的)相当于整个芯片的CUP。就像我们现在的电脑厂商一样,可以拿着intel或AMD的CPU,自己完善外围电路,这样就可以退出自己品牌的电脑。STM32单片机也是类似,以ARM为内核,自己完善外围电路做出的芯片都叫做基于ARM内核的芯片。

STM32单片机的常用领域:

智能车:STM32单片机做寻迹小车,读取光电传感器或者摄像头的数据,然后驱动电机前进和转弯。

无人机:STM32单片机读取陀螺仪加速计的姿态数据,然后根据控制算法去控制电机的速度,从而保证飞机稳定飞行。

机器人:STM32单片机驱动舵机,去控制机器人的关节,然后让机器人运动。

无线通信:STM32单片机连接上一连2.4G无线模块或蓝牙、WIFI模块,这样STM32的单片机就具备无线通信的能力。物联网也可以借助这些无线模块来通信(蓝牙、WIFI、ZigBee等)。再通过STM32单片机驱动继电器来控制220V电路的通断。

工业控制:PLC。

娱乐电子产品:爱心流水灯等。

家族序列图

STM32单片机分为四个系列:高性能系列、主流系列、超低功耗系列、无线系列。

下图中有相关介绍:

目前最强的STM32单片机是STM32N6系列,STM32N6 基于运行频率达 800MHz 的 Arm Cortex-M55 处理器,是单核架构。

目前博主只学习了主流系列,跟大家分享的也只跟主流系列有关。如果你学习了主流系列后,觉得性能不够,可以继续学习高性能系列;如果你对功耗特别敏感,推荐专攻超低功耗系列;如果想做无线通信电子产品,可以了解无线系列。因为它们都是一个家族的,所以换一个系列再学习的话也会比换别的新派你轻松很多。

2、ARM

ARM既指ARM公司,也指ARM处理器的内核。

ARM 公司本身不直接从事芯片生产,而是通过授权其设计的芯片架构给全球各地的半导体公司,由这些公司根据各自的应用领域进行开发和生产,ARM 则收取前期许可费和根据硅片生产量支付的版税。这个也叫做知识产权提供商,简单解释就是负责设计提供但不生产实物。

下面展示一幅图,其中由介绍ARM内核的相关信息:

右侧蓝色所表示的是经典的ARM处理器。

由图可知,内核有三个系列:A、R、M,正如ARM公司的组成字母。

R、M系列用于嵌入式领域,A系列适用于高端应用型领域如手机领域(苹果、高通、联发科)。

R系列实时性(硬盘处理器),M系列(单片机STM32领域),A系列(性能最高、发展最快的系列)。

ARM公司的内核非常多,远不止图上所示。想要更多了解可以另查资料,这里我就不多讲了。

下面展示一款主流系列的芯片:

RAM:运行内存,实际的存储介质是SRAM。

ROM:程序存储器,实际的存储介质是Flash闪存。

如图供电电压为2.0~3.3V,因此,如果供电电压为5V时,需要加一个稳压芯片,把电压讲到3.3V,再给STM32单片机供电。51单片机的供电电压是5V。可不要弄混了。

封装如图,有48个引脚。

这款芯片的片上资源下图展示:

片商资源又叫外设(Peripheral)。

主要学习内容。通过程序配置外设,来实现我们想要的功能。

表中,前两个深颜色的,是位于Cortes-M3内核里面的外设,剩下的都是内核外的外设。

下面介绍这些外设相关的作用:

NVIC:内核里面用于管理中断的设备,如配置中断优先级这些东西。

SysTick:内核里的一个定时器,用来给实际操作系统提供定时服务的。

STM32单片机可以加入操作系统:FreeRTOS,UCOS等。

如果用这些操作系统,就需要SysTick提供定时器来进行任务切换的功能。

RCC:可对系统的时钟进行配置,还有就是使能各模块的时钟。在STM32单片机中,其他的这些外设在上电的情况下默认是没有时钟的。不给时钟的情况下,操作外设是无效的,外设也不会工作,这样的目的是降低功耗。所以操作外设之前,必须要先使能它的时钟,这就需要我们用RCC来完成时钟的使能。

GPIO:通用的IO口,我们可以用GPIO来点灯,读取按键等。这也是一个单片机最基本的功能。

AFIO:复用IO口,可以完成服用功能端口的重要定义,还有中断端口的配置。

EXIT:外部中断,配置好外部中断后,当引脚有电平变化时,就可以触发中断,让CPU来处理任务。

TIM:整个STM32单片机最常用,功能最多的外设,分为高级、通用、基本定时器三种模型。

其中高级定时器最复杂,通用定时器最常用。

它不仅可以完成定时中断的任务,还可以完成测频率,生成PWM波形。配置成专用的编码器接口等功能。PWM波形就是我们电机驱动、舵机驱动最基本的要求了。

ADC:这个STM32单片机内置了12位的AD转换器,可以直接读取IO口的模拟电压值,无需外部连接AD芯片,使用非常方便。

DMA:这个可以帮助CPU完成搬运大量数据这样繁杂的任务。

USART:我们平常用的UART是异步串口的意思,这里的USART两个都支持。分为异步、同步,实际用异步多。

I2C、SPI:非常常用的两种通信协议。STM32单片机也内置了它们的控制器,可以用硬件来输出时序波形,使用起来更高效,当然用通用IO口来模拟时序波形也是没有问题的。

CAN、USB:也是通信协议,CAN运用于汽车领域,利用这个STM32USB的外设,可以做一个模拟鼠标,模拟U盘等设备。

RTC:在STM32单片机内部完成年月日,时分秒的计时功能。而且可以接外部备用电池,基石掉电也能正常运行。

CRC:一种数据的校验方式,用于判断数据的正确性。有这个外设的支持,进行CRC校验就会更加方便一些。

PWR:可以让芯片进入睡眠模式等状态,来达到省电的目的。

BKP:这是一段存储器,当系统掉电时,仍可由备用电池保持数据,这个根据需要,可以完成一些特殊功能。

IWDG、WWDG:是独立看门狗和窗口看门狗。当单片机因为电磁干扰死机或者程序设计不合理出现死循环时,看门狗可及时复位芯片,保证系统的稳定。

DAC:它可以在IO口直接输出模拟电压,是ADC模数转换的逆过程。

SDIO:可以用来读取SD卡。

FSMC:可以用于扩展内存,或者配置成其他总线协议,用于某些硬件的操作。

USB OTG:用OTG功能,可以让STM32单片机作为USB主机读取其他USB设备。

那以上就是STM32F1系列所有外设的大致介绍了。

这是STM32F1系列的所有外设,并不是所有型号都拥有全部外设,比如我们这款C8T6芯片就没有后面四个外设。

那具体有哪些外设?每个外设设有几个呢?

我们还要看一下对应的数据手册。

下面我放一张英文版的C8T6芯片的数据手册,看一下它的外设资源表:

看到这幅图的STM32F103Cx这一列,可以看到这个C8T6是64K闪存的,20K的SRAM,有3个通用定时器,1个高级定时器,没有基本定时器。2个SPI,2个I^2C,3个USART,1个USB,1个CAN总线,37个IO口,2个10通道的12位ADC。在这个表里没有出现的外设,你就要确认一下它是不是存在,要是操作了不存在的外设,那它是不会工作的。

3、芯片命名规则

看一下这个型号的每一位字母和数字代表的意义。

一般来说,引脚越多,外设越多。

4、系统结构

分为四部分,大致分布如图:

加载数据(常量、调试数据等)。

ICode指令总线,Dcode数据总线,System系统总线。前两个用来加载程序指令的主要用来连接Flash闪存。Flash闪存存储的就是我们编写的程序。

SRAM:用于存储程序运行的变量数据。

AHB、SPIO:用于挂载主要的外设,挂载的一般是最基本或性能比较高的外设(复位、时钟控制这些最基本的电路)。

5、引脚定义(重点)

这部分内容学习大概知道这个芯片是怎么使用的。

C8T6这个芯片的引脚序号和引脚名称的示意图:

左上角小黑点,代表它左边的引脚是1号引脚。逆时针依次排列,知道48号引脚。

下面给大家展示这款芯片相关的引脚有哪些:

红色代表电源相关,蓝色代表最小系统相关,绿色代表IO口功能口。

类型:

S:电源;I:输入;O:输出;IO:输入输出。

IO口电平代表IO口所能容忍的电压。有FT的,代表它能容忍5V的电压。没有FT的,容忍3.3V电压。

如果没有FT的需要接5V的电平,就需要加装电平转换电路了。

主功能就是上电后默认的功能,一般和引脚名称相同。如果不同的话,引脚的实际功能是主功能而不是引脚名称的功能。

默认复用功能就是IO口同时连接的外设功能引脚。这个配置IO口的时候可以选择是通用IO口还是复用功能。

重定义功能:这个的作用是,如果有两个功能同时复用在了一个IO口上,而你却是需要用到这两个功能,那你可以把其中一个复用功能重映射到其他端口上。当然前提是,这个重定义功能的表里有对应的端口。

VBAT:备用电池供电的引脚。可接3V电池。当系统电源断电时,备用电池可以给内部的RTC时钟和备份寄存器提供电源。

2号引脚是IO口或者侵入检者或者RTC。

IO口可以根据程序输出或读取高低电平是最基本也是最常用的功能了。

侵入检测可以用来做安全保障的功能。(你的产品安全性比较高,可以在外壳加一些防拆的触点。然后接上电路到这个引脚上。若有强行拆开设备,那触点断开,这个引脚的电平变化就会触发STM32的侵入信号,然后就会清理数据来保证安全。

RTC的引脚可以用来输出RTC校准时钟,RTC闹钟脉冲或者秒脉冲。

3、4号引脚是IO口或者接32、786Hz的RTC晶振。

5、6号引脚接系统的主晶振,一般是8MHz。然后芯片内部有锁相环电路,可以对这个8MHz的频率进行信频。最终产生72MHz的频率。作为系统的主时钟,7号NRST是系统复位引脚,N代表它是低电平复位的。

8、9号引脚是内部模拟部分的电源,如ADC、RC振荡器等。VSS是负极,接GND、VDD是正极,接3.3V.

10~19号引脚都是IO口,其中PAO还兼具了WKUP的功能。这个可以用于唤醒处于待机模式的STM32。

20号引脚是IO口或者BOOT1引脚。BOOT引脚是用来配置启动模式的,另外这个IO口引脚名称没加粗。这是表示我推荐使用这些加粗的IO口,没有加粗的IO口,可能需要进行配置,或者兼备其他功能,使用时需要留意一下。

21、22号也都是IO口。

23、24号的VSS_1(正极)和VDD_1(负极)是系统的主电源口。

另外,下面还有VSS_2、VDD_2、VSS_3、VDD_3。都是系统的主电源口。

这里STM32内部采用了分区供电的方式。所以供电口会比较多。在使用时,把VSS都接GND、VDD都接3.3V即可。

25~33号都是IO口。

34、27~40号。这些事IO口或者调试端口。

上面默认的主功能是调试端口。调试端口就是用来调试程序和下载程序的。

这个STM32需要2根线,分别是SWDIO和SWCLK。JTAG需要5根,分别是JTMS、JTCK、JTDI、JTDO、NJTRST。

我上面所讲的都是使用STLINK来下载调试程序。STLINK用的是SWD的方式,所以只需要占用PAB和PA14这两个IO口,在使用SWD的调试方式时,剩下的PA15、PB3、PB4可以切换为普通的IO口来使用,但要在程序中进行配置,不配置的华默认是不会用做IO口的。

41~43、45~46都是IO口。

剩下的44号引脚跟刚才介绍的BOOT1一样,也是用来做启动配置的。

这个表在数据手册中也有,这些都是我在数据手册中提取出来的,在后面会给出地址,方便大家查看。STM32F103C8T6 数据表, PDF - 全部数据表https://www.alldatasheet.com/view.jsp?Searchword=STM32F103C8T6

6、启动配置

如图是我们刚才看到BOOT0和BOOT1两根引脚的功能。这个启动配置的作用就是指定程序开始运行的位置。一般情况下,程序都是在Flash程序存储器开始执行。但是在某些情况下,我们也可以让程序在别的地方开始执行。用以方式完成特殊的功能。

BOOT0 按0->接地                BOOT1 x 不论结什么,启动模式都是主闪存存储器的模式最常用

1 接1就是接到3.3V电源正的意思 0 

这个不是很好理解,其实这个模式就是用来做串口下载的。系统存储器村的就是STM32中的一段BOOtLoader程序。

作用是接受串口的数据,然后刷新到主闪存中,这样就可以使用串口下载程序了。

一般我们需要串口下载程序的时候会配置到这个模式上。

那我们什么时候需要用到串口下载呢?可以看回到引脚定义表:

这5个是调试窗口,它们既可以用来下载程序,也可以作为普通IO口使用。

如果我们在程序中把这5个端口全部配置成了IO口,那就完了。因为这个芯片没有调试端口,也就下载不了程序了,所以在你配置这几个端口的时候要小心点,不要把它们全部都变成普通IO口了。

那如果全部变成IO口了,下载不进去程序了,这就需要用到串口的方式下载程序了。

如果想使用串口下载,就需要配置T1为0,T0为1.没有STLINK、JLIK,可以用串口下载,多一种方式。

这个模式主要用来进行程序调试的,现阶段用的比较少。

另外解释一下上面那幅图的最后一句话:BOOT引脚的值是在上电复位后的一瞬间有效的,之后就随便了。

想让STM32正常工作,那么首先就需要把电源部分和最小系统部分的电源连接好,也就是引脚定义表中标红蓝色的部分。

7、最小系统电路

STM32 最小系统电路主要由电源电路、时钟源电路、BOOT 启动电路、调试接口电路和复位电路这五部分组成,以下是各部分的详细介绍:
电源电路
作用:为 STM32 芯片提供稳定的电源,确保芯片能够正常工作。STM32 芯片通常需要 3.3V 的电源电压,电源电路负责将外部输入的电源转换为芯片所需的稳定电压,并进行滤波等处理,以减少电源噪声对芯片的影响。
设计要点:通常采用线性稳压器或开关稳压器来实现电源转换。如使用 AMS1117-3.3V 等线性稳压芯片,将输入的 5V 或其他电压转换为 3.3V。同时,需要在电源输入端和芯片电源引脚处连接多个滤波电容,如 10uF 的钽电容和 100nF 的陶瓷电容,以滤除不同频率的噪声信号,靠近芯片引脚放置电容,以提高滤波效果。
时钟源电路
作用:为 STM32 芯片提供时钟信号,时钟信号是芯片内部各个部件同步工作的基准,决定了芯片的运行速度和时序节奏。
设计要点:可以选择内部时钟源或外部时钟源。内部时钟源一般是 RC 振荡器,精度较低但成本低、功耗小;外部时钟源通常采用石英晶振,精度高、稳定性好。如常用的 8MHz 外部晶振,为系统提供稳定的时钟基准。在使用外部晶振时,需要在晶振两端连接两个起振电容,电容值一般在 10pF-40pF 之间,还可在晶振输入输出引脚之间加一个 1M 的电阻,产生负反馈,保证放大器工作在高增益的线性区,同时起到限流作用。
BOOT 启动电路
作用:用于选择 STM32 芯片的启动模式,不同的启动模式决定了芯片从何处读取启动代码和数据。
设计要点:STM32 芯片有三种启动模式,由 BOOT0 和 BOOT1 引脚在复位时的状态决定。一般情况下,如果使用 JTAG 或 SWD 调试下载程序,会将程序下载到闪存里,可直接将 BOOT0 引脚通过一个 10K 电阻下拉接地,BOOT1 引脚置为低电平或悬空。
调试接口电路
作用:用于将计算机中的程序代码下载到 STM32 芯片中,并对芯片进行调试和仿真,方便开发人员对程序进行调试和优化。
设计要点:常用的调试下载方式有 JTAG 和 SWD 两种。现在一般采用 SWD 调试接口,只需要将 SWCLK(时钟信号)、SWDIO(数据输入输出信号)、GND(接地)、3.3V(电源)引脚引出即可与调试器连接。不需要添加外部上拉或下拉电阻,因为 STM32 内部已经集成了相应的电阻。
复位电路
作用:将 STM32 芯片的内部电路恢复到初始状态,确保芯片在启动或出现异常时能够正常初始化和运行。
设计要点:STM32 有三种复位方式,分别是系统复位、电源复位和后备域复位。常用的是电源复位方式,通过一个按键和一个电容组成的电路来实现。当按下按键时,将芯片的 RST 引脚拉低,产生外部复位信号,使芯片进入复位状态;当按键松开后,电容充电,RST 引脚电位逐渐升高,复位结束,芯片开始正常运行。一般选择 100nF 的电容,以保证 RST 引脚低电平持续的时间满足芯片复位的最小脉宽要求。

这就是STM32单片机的简单介绍,后续我也会继续分享有关STM32单片机的内容,希望大家多多支持。

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

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

相关文章

GESP】C++一级考试大纲知识点梳理(1)

计算机基础和操作系统 GESP C++一级官方考试大纲中,除可通过编码掌握的Dev C++开发工具的使用和C++编程基础语法知识外(考纲2-13),还涉及计算机基础知识的要求(考纲1): (1)了解计算机的基本构成(CPU,内存,I/O 设备等) ,了解 Windows、Linux等操作系统基本概念和常…

浅谈 JavaScript 性能优化

文章目录 概要一、代码执行优化1. 减少全局变量访问2. 避免不必要的计算3. 优化循环操作 二、内存管理优化1. 减少内存泄漏2. 对象池与内存复用 三、渲染性能优化1. 避免强制同步布局2. 减少 DOM 操作3. 优化动画与合成 四、网络加载优化1. 代码压缩与 Tree Shaking2. 按需加载…

mongodb nosql数据库笔记

MongoDB 简介 MongoDB 是一个开源的 NoSQL 数据库,采用文档存储模型(BSON 格式,类似 JSON),支持高灵活性、水平扩展和高性能的数据操作。与传统关系型数据库(如 MySQL)不同,MongoDB…

Flutter实现不规则瀑布流布局拖拽重排序

因为业务,所以需要用flutter去实现一种不规则图形的瀑布流,但是同时需要支持拖拽并重新排序。效果类似如下。 查询过现有的插件,要么是仅支持同样大小的组件进行排序,要么就是动画效果不是很满意,有点死板,…

微信小程序(uniapp)实现腾讯云 IM 消息撤回

uniapp 实现腾讯云 IM 消息撤回功能实战指南 一、功能实现原理 腾讯云 IM 的消息撤回功能通过 消息修订(Message Revision) 机制实现,核心流程如下: 发送方调用撤回 API 删除指定消息云端生成撤回通知消息(类型为 T…

AI入门示例

市面上有很多AI大模型,这里以 智谱的大模型 为示例 1.先要注册智谱AI开放平台 2.注册成功后,会赠送3个月的免费额度,如下 3.然后去控制台,创建一个API KEY 4.接着就可以开始写代码了 提前导入包: openai 示例1&…

【数据结构】单链表练习

1.链表的中间节点 https://leetcode.cn/problems/middle-of-the-linked-list/description/ 用快慢指针来解决 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* middleNode(struct ListNode* he…

尝鲜纯血鸿蒙,华为国际版本暂时不支持升级。如mateX6 国际版?为什么不支持?什么时候支持?

一:mateX6 国际版支持鸿蒙吗? 不支持 二:华为国际版支持鸿蒙吗? 不支持 三:华为国际版什么时候支持? 2025年预期可以支持。请耐心等待。 三:国际版为什么不支持? EMUI 采用AO…

Spring Boot的启动流程,以及各个扩展点的执行顺序

目录 1. 初始化阶段执行顺序 1.1 Bean的构造方法(构造函数) 1.2 PostConstruct 注解方法 1.3 InitializingBean 的 afterPropertiesSet() 1.4 Bean(initMethod "自定义方法") 2. 上下文就绪后的扩展点 2.1 ApplicationContext 事件监听…

刀具问题讨论

1 刀具的问题概述 问题描述 一道工序用自动化车床连续加工某种零件,由于刀具损坏等原因该工序会出现故障,其中刀具损坏故障占95%, 其它故障仅占 5%。工序出现故障是完全随机的, 假定在生产任一零件时出现故障的机会均相同。工作人员通过检查零件来确定…

vite配置一个css插件

vite.config.js的plugins执行函数 该例子只是替换一些css,具体内容不重要,主要看形参的运用 // vite-plugin-css.js export default function cssPlugin() {return {name: vite-plugin-css-post, // 插件的名字,Vite 插件必须有名字enforce: post, // 设定插件执…

✨1.1.1 按位与运算替代求余运算优化场景

在计算机编程中,使用按位与运算(&)替代求余运算(%)可以提高效率的特殊场景是:当除数是 2 的整数次幂(即 ( b 2^n ),其中 ( n ) 为自然数)时。例如,( b …

CentOS 7 环境中部署 LNMP(Linux + Nginx + MySQL 5.7 + PHP)

在 CentOS 7 环境中部署 LNMP(Linux Nginx MySQL 5.7 PHP) 环境的详细步骤如下。此方案确保各组件版本兼容,并提供完整的配置验证流程。 1. 更新系统 sudo yum update -y 2. 安装 MySQL 5.7 2.1 添加 MySQL 官方 YUM 仓库 由于MySQL并不…

UniApp微信小程序自定义导航栏实现

UniApp微信小程序自定义导航栏 在UniApp开发微信小程序时,页面左上角默认有一个返回按钮(在导航栏左侧),但有时我们需要自定义这个按钮的样式和功能,同时保持与导航栏中间的标题和右侧胶囊按钮(药丸屏&…

Java大师成长计划之第35天:未来展望与个人总结

引言 作为一门历史悠久的编程语言,Java自1995年问世以来,经历了多个版本的迭代与演进,依然在当今技术生态中占据着重要地位。从早期的Java SE、Java EE到后来的Java Spring框架,再到现代的微服务架构与云原生应用,Jav…

Ubuntu开机自动运行Docker容器中的Qt UI程序

Ubuntu开机自动运行Docker容器中的Qt UI程序 引言为什么需要这样配置?解决方案概览详细实现步骤1. 创建容器启动脚本2. 创建系统服务3. 配置自动登录和显示设置常见问题解决方案1. 程序无法显示(X11权限问题)2. 分辨率设置不生效3. 服务启动失败安全注意事项结语附录:完整文…

Scratch节日 | 龙舟比赛 | 端午节

端午节快乐! 这款专为孩子们打造的Scratch游戏——《龙舟比赛》,让你在掌控龙舟的竞速中,沉浸式体验中华传统节日的魅力! 🎮 游戏亮点 节日氛围浓厚:化身龙舟选手,在波涛汹涌的河流中展开刺激竞…

(五)MMA(OpenTelemetry/Rabbit MQ/ApiGateway/MongoDB)

文章目录 项目地址一、OpenTelemetry1.1 配置OpenTelemetry1. 服务添加2. 添加服务标识3. 添加请求的标识4. 添加中间价 二、Rabbit MQ2.1 配置Rabbit MQ1. docker-compose2. 添加Rabbit MQ的Connect String 2.2 替换成Rabbit MQ1. 安装所需要的包2. 使用 三、API Gateways3.1 …

格恩朗超声波水表 助力农业精准灌溉与振兴​

在农业现代化的征程中,水资源的精准利用至关重要,而这离不开高精度计量设备的支持。大连格恩朗品牌积极响应国家全面推进乡村振兴、加快农业农村现代化的号召,精心打造的超声波水表,凭借其超高精度,成为绿色灌溉领域的…

微信小程序页面嵌套web-view点击系统导航返回时进行弹窗处理

实现效果:微信小程序页面嵌套web-view点击系统导航返回时进行弹窗处理 首先在web-view里是不可实现的(据我了解下来) 参考小程序文档:page-container 大致逻辑: 1、page-container可实现页面离开前拦截 2、由于web-vie…