[STM32] 简单介绍 (一)

文章目录

      • 1.STM32简介
      • 2.ARM
      • 3.STM32F103ZET6/STM32F103C8T6
      • 4.STM32命名规则
      • 5.STM32最小系统板
      • 6.STM32开发方式
      • 7.STM32系统架构
      • 8.STM32时钟系统
      • 9.STM32中断系统
        • 9.1 NVIC嵌套向量中断控制器
        • 9.2 EXIT外部中断控制器
      • 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个可编程的外部中断。
内部中断被称为异常, 外部中断被称为中断。优先级越小越优先。

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

9.1 NVIC嵌套向量中断控制器
  1. NVIC(Nested vectored interrupt controller嵌套向量中断控制器)和处理器核的接口紧密相连,可以实现低延迟的中断处理和高效地处理中断。嵌套向量中断控制器管理着包括内核异常,外部中断等所有中断。由NVIC决定哪个中断的处理程序交给CPU来执行。

  2. 每一个外部中断都可以被使能或者禁止,并且可以被设置为挂起状态或者清除状态。处理器的中断可以是电平形式的,也可以是脉冲形式的,这样中断控制器就可以处理任何中断源。

  3. 16个IO的中断与PVD(电源电压检测),RTC(实时时钟),USB,以太网检测这20个外部中断会通过EXTI来控制,然后交给NVIC。其他中断都是直接交给NVIC来处理。

  4. NVIC为了方便管理中断,可以通过软件给每个中断设置优先级。NVIC用4个位来控制优先级,值小的优先级高。把优先级分为两种:抢占优先级和响应优先级。

    • 优先级值越小,优先级越高。
    • 如果不设置优先级,则默认优先级为0。
    • 先比较抢占优先级。抢占优先级高的可以打断抢占优先级低的。
    • 若抢占优先级一样,再比较响应优先级。但是响应优先级不会导致中断嵌套。
    • 若抢占优先级一样的同时挂起,则优先处理响应抢占优先级高的。
    • 若挂起的优先级(抢占和响应)都一样,则查找中断向量表,值小的先响应。
9.2 EXIT外部中断控制器

在这里插入图片描述

  1. 下降沿触发选择寄存器
  2. 上升沿选择触发寄存器
  3. 软件中断事件寄存器
  4. 请求挂起寄存器
  5. 中断屏蔽寄存器
  6. 事件屏蔽寄存器

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.rhkb.cn/news/452893.html

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

相关文章

水题四道。

我的 水题四道--题目目录 问题 A: 依次输出第k小整数 代码1 问题 B: 第k小整数(knumber) 代码2 树的统计 代码3 枪声问题 代码4 问题 A: 依次输出第k小整数 现有n个正整数&#xff0c;n≤10000&#xff0c;要求出这n个正整数中的第1小的整数&#xff0c;第2小的整数&#xf…

基于Multisim温控电风扇控制电路(含仿真和报告)

【全套资料.zip】温控电风扇控制电路设计Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 2.1 设计内容 设计制作一个温控风扇自动控制系统电路。 2.2 设计要求 设计一温控风扇控制系统&am…

汽车管理系统——主界面制作

目录 主界面需要有什么&#xff1f;然后要做什么&#xff1f;添加两个主菜单&#xff08;声明&#xff09;下一步应该干什么&#xff1f;能够跳转到文件有哪几个动作&#xff1f;动作如何声明&#xff1f;为什么用选择声明指针&#xff0c;不选择直接声明这个对象&#xff1f; …

IO进程_day1

目录 概要 标准IO 1.概念&#xff1a; 2.特点&#xff1a; 3.缓存区 3.1行缓存&#xff1a;和终端操作相关 3.2全缓存&#xff1a;和文件操作相关 ​​​​​​​3.3不缓存&#xff1a;标准错误 stderr 4.函数 ​​​​​​​4.1打开文件 ​​​​​​​4.2关闭文件…

Java项目-基于springboot框架的体育馆运营系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

【STM32学习】PWM学习(四),散热风扇的控制,PWM调速调制,

目录 1、基础概念 2、PWM调速风扇功能介绍 2.1风扇功率 2.2、PWM输出流程图 2.3、PWM占空比计算 2.4参数计算 3、配置实现 3.1、添加TIM1功能 3.2、生成代码 3.3、修改代码 1、基础概念 参考&#xff1a;【STM32学习】PWM脉冲宽度调制学习笔记&#xff0c;&#xff…

量化交易:最大回撤(Drawdown)算法

量化交易:最大回撤(Drawdown)算法 写在前面: 本文为本人学习用于回测报告中的最大回撤算法指标时整理的学习笔记,欢迎沟通交流~ 一、基本概念 1.1 最大回撤(Max Drawdown) 回撤:对于任意日期区间,回撤 = 钱包的亏损比例 =(现值 - 原值)/ 原值 = 现值 / 原值 - 1 =…

基于SpringBoot+Vue的厨艺交流系统的设计与实现(源码+定制开发)厨艺知识与美食交流系统开发、在线厨艺分享与交流平台开发、智能厨艺交流与分享系统开发

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

java -jar 命令自动重启 Java 项目

一、java -jar 方式运行项目 重启Java项目通常意味着你需要先停止当前运行的Java进程&#xff0c;然后再次启动它。下面是在CentOS上执行这些步骤的一种常见方法&#xff1a; 停止Java进程 找到Java进程的PID&#xff1a; 使用ps命令配合grep来查找运行中的Java进程的PID&#…

关于WPF项目降低.Net版本

本来有项目是.NET Framework 4.8的&#xff0c;为了兼容升级到.NET 8.0&#xff0c;后期又为了兼容放弃.NET 8.0&#xff0c;升级的步骤&#xff1a;利用vs2022 的 .NET Upgrade Assistant 扩展&#xff0c;磕磕绊绊也升级完成了&#xff1b; 扩展链接&#xff1a; Upgrading…

windows下安装VirtualBox7.1.4

记录详细的安装过程与遇到的问题&#xff1b; 下载地址 virtualbox官网 清华镜像源下载 下载完成后文件&#xff1a; 双击打开&#xff1b; 报错了 意思是需要pc上先安装Microsoft Visual C 2019 https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redi…

分布式数据库环境(HBase分布式数据库)的搭建与配置

分布式数据库环境&#xff08;HBase分布式数据库&#xff09;的搭建与配置 1. VMWare安装CentOS7.9.20091.1 下载 CentOS7.9.2009 映像文件1.2启动 VMware WorkstationPro&#xff0c;点击“创建新的虚拟机”1.3在新建虚拟机向导界面选择“典型&#xff08;推荐&#xff09;”1…

2024java高频面试之JVM

说说 JVM 内存区域 程序计数器 是「程序控制流的指示器&#xff0c;循环&#xff0c;跳转&#xff0c;异常处理&#xff0c;线程的恢复等工作都需要依赖程序计数器去完成」。程序计数器是「线程私有」的&#xff0c;它的「生命周期是和线程保持一致」的&#xff0c;我们知道&a…

【STM32开发笔记】移植AI框架TensorFlow【DSP指令加速篇】

【STM32开发笔记】移植AI框架TensorFlow【DSP指令加速篇】 一、前文回顾二、CMSIS-NN简介2.1 为什么介绍CMSIS-NN&#xff1f;2.2 CMSIS-NN是什么&#xff1f;2.3 CMSIS-NN核心特性2.4 CMSIS-NN算子支持 三、TFLMCMSIS-NN集成3.1 包含TFLM的STM32项目3.2 理解TFLM中CMSIS-NN相关…

【前端学习】HTML+CSS+JavaScript 入门教程

文章目录 前言1. HTML、CSS、JavaScript 的关系2. HTML2.1 什么是 HTML2.2 认识标签2.3 HTML 常见标签1&#xff09;标题标签&#xff1a;h1 - h62&#xff09;段落标签&#xff1a;p3&#xff09;换行标签&#xff1a;br4&#xff09;图片标签&#xff1a;img5&#xff09;超链…

Linux系统:(Linux系统概述与安装)

硬件计算机硬件是指计算机系统中所有物理部件的总称。包括计算机主机、显示器、键盘、鼠标、内存、硬盘、处理器、主板等等。这些硬件部件是计算机系统运行的基础 不管是电脑系统(个人电脑、服务器等)、还是移动端操作系统(手机、平板等)。它的功能就是做为用户和硬件之间的桥梁…

Java配置 Redis 连接互斥锁或队列预先加载缓存

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

2024年龙信

挂载VC的密码&#xff1a;MjAyNOmmeS/oeadrw 手机取证 1. Android 设备在通过 ADB 连接时&#xff0c;通常会要求用户授权连接&#xff0c;会要求用户确认设备授权&#xff0c;并将该设备的公钥保存在 adb_keys文件中 寻找到data/misc/adb/adb_keys下面有中有两个&#xff0c;…

动态规划:17.简单多状态 dp 问题_买卖股票的最佳时机III_C++

题目链接&#xff1a; 一、题目解析 题目&#xff1a;123. 买卖股票的最佳时机 III - 力扣&#xff08;LeetCode&#xff09; 解析&#xff1a; 拿示例1举例&#xff1a; 我们可以如图所示买入卖出股票&#xff0c;以求得最大利润&#xff0c;并且交易次数不超过2次 拿示…

webpack自定义插件 ChangeScriptSrcPlugin

插件文件 class ChangeScriptSrcPlugin {apply(compiler) {const pluginName "ChangeScriptSrcPlugin";compiler.hooks.compilation.tap(pluginName, (compilation, callback) > {compilation.hooks.htmlWebpackPluginAlterAssetTags.tapAsync(pluginName,(html…