[STM32] 简单介绍 (一)

news2025/2/22 6:09:24

文章目录

      • 1.STM32简介
      • 2.ARM
      • 3.STM32F103ZET6/STM32F103C8T6
      • 4.STM32命名规则
      • 5.STM32最小系统板
      • 6.STM32开发方式
      • 7.STM32系统架构
      • 8.STM32时钟系统
      • 9.STM32中断系统
      • 10.STM32定时器

1.STM32简介

STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器;
STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通讯、物联网、工业控制、娱乐电子产品等;
STM32F1系列是主流系列,有177的内核跑分和72Mhz的Cortex-M3内核;

2.ARM

既指ARM公司,也指ARM处理器内核。
ARM公司是全球领先的半导体知识产权(IP)提供商,全世界超过95%的智能手机和平板都采用ARM架构;
ARM公司设计ARM内核,半导体厂商完善内核周边电路并生产芯片;
最成功的产品为32 位嵌入式 CPU 核–ARM 系列,最常用的是ARM7 和 ARM9

STM32 基于 ARM Cortex 内核的 32 位 MCU 和 MPU 产品系列图:

在这里插入图片描述

A系列:应用(application),主要用于手机,苹果手机、高通手机芯片、联发科手机芯片;
R系列:RealTime,主要面向实时性很高的场景,硬盘控制器
M系列:Microcontroller,主要应用在单片机领域;

3.STM32F103ZET6/STM32F103C8T6

系列:主流系列STM32F1
内核:ARM Cortex-M3
主频:72MHz
RAM:20K (SRAM)
ROM:64K (Flash)
供电:2.0~3.6V (标准3.3V)
封装:LQFP48
在这里插入图片描述

在这里插入图片描述

  • NVIC和SysTick是内核内的外设,其余是内核外的外设
    NVIC: 内核内用于管理中断的设备,比如配置中断优先级这些东西
    SysTick: 内核里面的一个定时器,主要用来给操作系统提供定时服务

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

  • GPIO:用GPIO来点灯,读取按键

  • AFIO:完成复用端口的重定义,还有中断端口的配置

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

  • TIM:分为高级定时器、通用定时器、基本定时器;通用定时器:不仅完成定时中断任务,还可以完成测频率、生成PWM波形、配置成专用的编码器接口等功能。

  • ADC:该STM32内置了12位的AD转换器,可以直接读取IO口的模拟电压值,无需外部连接AD芯片。

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

  • USART:即支持异步串口,也支持同步串口,ESP8266WIFI模块、GSM模块、蓝牙模块、GPS模块、指纹识别模块、IOT模块、串口屏等

  • I2C和SPI:STM32也内置了它们的控制器,可以用硬件来输出时序波形

  • IIC:EEPROM、MPU6050陀螺仪、0.96寸OLED屏、电容屏等

  • SPI:串行FLASH、以太网W5500、VS1003/1053音频模块、SPI接口的OLED屏、电阻屏等

  • AD/DA:光敏传感器模块、烟雾传感器模块、可燃气体传感器模块、简易示波器等

  • CAN和USB:CAN和USB通信

  • SDIO:可以用来读取SD卡;

  • FSMC:可变静态存储控制器,可以用于扩展内存,或者配置成其他总线协议,用于某些硬件的操作;

  • RTC:在STM32内部完成年月日、时分秒的计时功能;可以接外部备用电池,即使掉电也能正常运行;

  • CRC:是一种数据的校验方式,用于判断数据的正确性。

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

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

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

  • DAC:可以在IO口直接输出模拟电压;

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

  1. Syste Core: DMA, IWDG, WWDG, GPIO, NVIC, SYS, RCC
  2. Analog: ADC, DAC
  3. TIMES: RTS, Tim
  4. Connectivity: CAN, FSMC, USB, SDIO, IIC, SPI, I2C, USART
  5. MultiMedia: I2S2, I2S3
  6. Computing: CRC

4.STM32命名规则

在这里插入图片描述

5.STM32最小系统板

在这里插入图片描述

  1. 滤波电容: 在3.3V和GND之间接一个滤波电容,来保证供电电压的稳定
  2. 晶振电路:接了一个8MHz的主时钟晶振,STM32的主晶振一般都是8MHz。
  3. 启动配置:H1相当于开关,拨动开关,就可以让BOOT引脚选择接3.3V还是GND了。
  4. 下载端口:如果用STLINK下载程序的话,需要把SWDIO和SWCLK这两个引脚引出来方便接线。另外再把3.3V和GND引出来,这个GND是必须引出来的,3.3V如果板子自己有供电的话,可以不引

6.STM32开发方式

STM32的开发有基于寄存器、基于标准库也就是库函数的方式和基于HAL库的方式。

基于寄存器:是用程序直接配置寄存器,来达到我们想要的功能。
基于库函数:是使用ST官方提供的封装好的函数。通过调用这些函数来间接地配置寄存器。
基于HAL库:可以用图形化界面快速配置STM32,可以快速上手STM32,但隐藏了底层逻辑。

基于寄存器:

// 配置寄存器,点灯
// 1. RCC寄存器,来使能GPIOC的时钟,GPIO都是APB2的外设,
// 因此APB2外设时钟使能寄存器RCC_APB2ENR里面配置
// IOPCEN是使能GPIOC的时钟
// 2. 配置PC13口的模式
// 配置高寄存器GPIOx_CRH,x对应A~E中任意一个字母,
// CNF13和MODE13用来配置13号口
// CNF13配置为00和MODE13配置为11
// 3. 端口输出数据寄存器GPIOx_ODR,低电平亮,高电平灭。
RCC->APB2ENR = 0x00000010;
GPIOC->CRH = 0x00300000;
GPIOC->ODR = 0x00002000;

基于库函数:

// 使用库函数来点灯
// 1. 使能时钟,第一个参数选择外设,第二个选择新的状态
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
// 2. 配置端口模式,GPIO_Init
// 第一个参数是选择哪个GPIO,第二个是参数的结构体
// 是PC13口的LED,所以第一个参数写GPIOC
// 先定义一个结构体GPIO_InitStructure,有三个参数,
// 分别是GPIO模式、GPIO端口、GPIO速度
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOC,&GPIO_InitStructure);
// 点灯,GPIO_SetBits将端口设置为高电平
GPIO_SetBits(GPIOC,GPIO_Pin_13);
// 点灯,GPIO_ResetBits将端口设置为低电平
// GPIO_ResetBits(GPIOC,GPIO_Pin_13);

7.STM32系统架构

STM32F103芯片的系统架构

在这里插入图片描述

  • FLASH
  • SRAM
  • BUS
  • Cortex-M3内核
  • 外设,通信协议

在这里插入图片描述

3个被动单元:

  1. SRAM
  2. FLASH
  3. AHB -> APB

4个驱动主动单元:

  1. Cortex-M3内核DCode总线DBuse
  2. 内核系统总线
  3. DMA1
  4. DMA2

其他单元;

  1. 内核ICode总线
  2. FSMC

8.STM32时钟系统

在这里插入图片描述

设计了一个时钟树:

  1. HSI振荡器时钟(High Speed Internal oscillator,高速内部时钟)

  2. HSE振荡器时钟(High Speed External(Oscillator / Clock),高速外部时钟)

  3. PLL时钟(Phase Locked Loop 锁相环/倍频器)

  4. LSI时钟(Low Speed Internal,低速内部时钟)

  5. LSE时钟(Low Speed External oscillator,低速外部时钟)。

9.STM32中断系统

Cortex-M3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。
STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。
STM32F103系列70个中断(咱们目前使用的芯片)有10个内核中断和60个可编程的外部中断。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.STM32定时器

  1. 系统定时器(SysTick系统)是属于CM3内核,内嵌在NVIC中。
  2. 系统定时器是一个24bit的向下递减的计数器,计数器每计数一次的时间为1 / SYSCLK,一般我们设置系统时钟SYSCLK(与AHB相同)等于72M。当重装载数值寄存器的值递减到0的时候,系统定时器就产生一次中断,以此循环往复。
  3. SysTick定时器能产生中断,CM3为它专门开出一个异常类型,并且在向量表中有它的一席之地。它使操作系统和其它系统软件在CM3器件间的移植变得简单多了,因为在所有CM3产品间SysTick的处理方式都是相同的。
  4. 系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。SysTick定时器除了能服务于操作系统之外,还能用于其它目的:如作为一个闹铃,用于测量时间等。

有4个寄存器与SysTick有关。在core_cm3.h中可以看到有个类型定义的就是SysTick。

typedef struct
{
  __IO uint32_t CTRL;                         /*!< Offset: 0x00  SysTick Control and Status Register */
  __IO uint32_t LOAD;                         /*!< Offset: 0x04  SysTick Reload Value Register       */
  __IO uint32_t VAL;                          /*!< Offset: 0x08  SysTick Current Value Register      */
  __I  uint32_t CALIB;                        /*!< Offset: 0x0C  SysTick Calibration Register        */
} SysTick_Type;

CTRL: SysTick控制和状态寄存器。

  • 在这里插入图片描述

LOAD: SysTick重装载寄存器。

  • 在这里插入图片描述

VAL: SysTick当前数值寄存器。

  • 在这里插入图片描述

CALIB: SysTick 校准数值寄存器。很少用到。

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

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

相关文章

【最新华为OD机试E卷-支持在线评测】高矮个子排队(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

基于rk356x u-boot版本功能分析及编译相关(一)

🎏技术驱动源于热爱,祝各位学有所成。 文章目录 uboot的分支是next-dev历史版本v2017-09uboot支持DM框架uboot前级pre-loader支持及引导下级uboot分区支持uboot支持固件格式secure bootuboot编译脚本位置build.shuboot/make.shrkbin仓库uboot的分支是next-dev历史版本v2017-…

Xilinx远程固件升级(一)——QuickBoot方案

Xilinx 7系FPGA远程更新方案——QuickBoot方式远程更新bit 一、远程更新背景和架构 对于非ZYNQ系列的常规FPGA来说&#xff0c;对于bit的更新一般使用JTAG进行烧录。而作为商用产品&#xff0c;想要进行OTA升级时&#xff0c;使用JTAG的升级方式显然不适合&#xff0c;因此&a…

数据结构与算法:数组与链表的扩展与应用

数据结构与算法&#xff1a;数组与链表的扩展与应用 数组和链表是数据结构中的基础内容&#xff0c;但它们的变体和扩展在实际应用中同样至关重要。通过深入理解数组和链表的内存布局、动态管理以及高级操作&#xff0c;我们可以更有效地选择和设计适合特定应用场景的数据结构…

分布式事务管理-Seata从入门到精通

一、基本概念 什么是数据库事务&#xff1f; 1、一个操作数据库数据的执行单元 2、到围从开始到结束的多个操作组成 3、事务内的多个操作要么都成功,要么都失败 什么是分布式事务&#xff1f; 1.分布式场景下&#xff0c;完成某一个业务功能可能需要横跨多个服务&#xff0…

NFT Insider #151:The Sandbox 推出 Alpha 第4季;腾讯或将收购育碧

市场数据 加密艺术及收藏品新闻 Beeple 将于 11 月在南京德基美术馆举办个人首展 著名数字艺术家 Beeple 近日在X平台发布视频&#xff0c;宣布将于 2024 年 11 月 14 日在南京德基美术馆举办个人首次展览&#xff0c;名为《Beeple&#xff1a;来自合成未来的故事》。该展览将…

JavaScript进阶--深入面向对象

深入面向对象 编程思想 面向过程&#xff1a;多个步骤> 解决问题 性能较高&#xff0c;适合跟硬件联系很紧密的东西&#xff0c;如单片机 但代码维护成本高&#xff0c;扩展性差 面向对象&#xff1a;问题所需功能分解为一个一个的对象&#xff08;分工合作&#xff09;>…

科研杂谈:24年诺奖颁布,AI竟是最终赢家?!

前言 2024年诺贝尔奖的公布引发了全球科学界的广泛关注&#xff0c;尤其是在人工智能&#xff08;AI&#xff09;领域的突破性获奖。诺贝尔物理学奖和化学奖相继颁给了在机器学习和蛋白质结构预测上取得重大进展的科学家们&#xff0c;让人们惊讶地看到AI正在迅速改变传统科研…

[Hbase]一 HBase基础

1. HBase简介 1.1 HBase定义 HBase数据模型的关键在于 稀疏、分布式、多维、排序 的映射。其中映射 map指代非关系型数据库的 key-Value结构。 1.2 HBase数据模型 1)Name Space 命名空间,类似于关系型数据库的database 概念,每个命名空间下有多个表。HBase 两个自…

【AI】AIGC浅析

引言 人工智能生成内容&#xff08;AIGC&#xff09;正迅速改变我们的生活、学习以及工作的方式。在计算机科学与技术领域、软件开发、大数据、智能网联汽车和车路云一体化行业&#xff0c;AIGC的应用已经成为行业发展的新动力。探讨AIGC对这些领域的影响、对职业技能需求的变化…

[Javase]封装、继承、多态与异常处理

文章目录 一、前言二、封装1、封装的思想2、封装代码层面的体现 三、继承1、继承的概念和好处2、继承代码层面的体现 四、多态1、多态的概念2、多态的好处和三要素2、多态代码层面的体现 五、异常处理1、try-catch-finally结构详解2、throw\throws 一、前言 本文章适合有一定面…

CMake 教程跟做与翻译 4

目录 添加一个option! 添加一个option! option&#xff0c;正如其意&#xff0c;就是选项的意思。我们这里需要演示一下option的做法。 option对于大型的工程必然是非常常见的&#xff1a;一些模块会被要求编译&#xff0c;另一些客户不准备需要这些模块。option就是将这种需…

【LLM KG】浅尝基于LLM的三阶段自动知识图谱构建方法

文章指出&#xff0c;在以前的方法中&#xff0c;使用LLM生成三元组时&#xff0c;必须预定义好schema&#xff0c;假如schema数量很多/复杂&#xff0c;很容易超过LLM的上下文窗口长度。并且&#xff0c;在某些情况下&#xff0c;没有可用的固定预定义schema。 方法 一、EDC…

计算机网络:数据链路层 —— 网络适配器与 MAC 地址

文章目录 网络适配器使用网络适配器网络适配器类型 MAC 地址MAC 地址格式MAC 地址类型MAC 地址发送顺序数据接收MAC 地址泄露问题 网络适配器 要将计算机连接到以太网&#xff0c;需要使用相应的网络适配器&#xff08;Adapter)&#xff0c;网络适配器一般简称为“网卡”。在计…

通信工程学习:什么是SRAM静态随机存取存储器

SRAM&#xff1a;静态随机存取存储器 SRAM&#xff0c;全称为Static Random-Access Memory&#xff0c;即静态随机存取存储器&#xff0c;是一种重要的随机存取存储器类型。以下是对SRAM的详细介绍&#xff1a; 一、定义与特点 定义&#xff1a; SRAM是一种只要保持通电&#…

CSS @规则(At-rules)系列详解___@import规则使用方法

CSS 规则(At-rules)系列详解 ___import规则使用方法 本文目录&#xff1a; 零、时光宝盒 一、import规则定义和用法 二、CSS import语法 2.1、语法格式 2.2、常见形式 2.3、语法说明 三、import使用方法例子 3.1、导入 CSS 规则 3.2、根据媒体查询条件导入 CSS 规则 …

结构体字节对齐的一些记录

‌结构体字节对齐的原因‌ 结构体字节对齐的主要原因是为了满足硬件平台的内存访问要求。某些硬件平台对特定类型的数据只能从特定的内存地址开始存取&#xff0c;如果数据没有进行对齐&#xff0c;可能会导致访问错误或效率低下。例如&#xff0c;某些架构的CPU在访问未对齐的…

原来CDC数据同步可以这么简单,零代码可视化一键数据同步

当前企业实时同步与分析场景中面临的挑战&#xff1a; 随着业务发展需要&#xff0c;实时分析成为企业目前的强需求&#xff0c;成为支撑企业业务发展的必须项。 一般来说&#xff0c;要满足数据实时分析的诉求&#xff0c;通常有两种方案&#xff1a; 第一种是直接使用源端…

多线程——解决线程安全问题

目录 前言 一、 synchronized 关键字 1. synchronized 的作用 1. synchronized 的特性 &#xff08;1&#xff09;互斥性 &#xff08;2&#xff09;可重入 2. synchronized 使用示例 &#xff08;1&#xff09;修饰代码块 &#xff08;2&#xff09;直接修饰普通方法…

Linux的GDB学习与入门

GDB GDB&#xff08;GNU Debugger&#xff09;是一个功能强大的调试工具&#xff0c;广泛用于调试 C、C 和其他编程语言编写的程序。它是 GNU 项目的一部分&#xff0c;专为帮助开发者在程序执行时检测和修复错误设计。GDB 能够控制程序的执行&#xff0c;查看程序内部的状态&…