STM32-02-STM32基础知识

文章目录

  • STM32基础知识
    • 1. STM32F103系统架构
    • 2. STM32寻址范围
    • 3. 存储器映射
    • 4. 寄存器映射

STM32基础知识

1. STM32F103系统架构

  • STM32F103

    STM32F103是ST公司基于ARM授权Cortex M3内核而设计的一款芯片,而Cortex M内核使用的是ARM v7-M架构,是为了替代老旧的单片机而量身定做的一个内核,具有低成本、低功耗、实时性好、中断响应快、处理效率高等特点。

    • 架构内核芯片 的关系:
      架构(ARMv7-M) Cortex-M3内核采用了ARMv7-M架构,这是ARM体系结构中专门用于嵌入式微控制器的一个子集。
      内核(Cortex-M3) 属于ARM Cortex-M系列,这个系列是ARM架构的一部分,专门设计用于嵌入式系统。
      芯片:内含集成电路的硅片。

    • 举例:
      架构:ARMv7-M
      内核:Cortex-M3
      芯片:STM32F103ZET6

    • ARMv7-M是ARM体系结构中用于嵌入式微控制器的一个子集。以下是ARMv7-M架构的一些特点:

      1. 32位架构: ARMv7-M是一种32位体系结构,意味着它的寄存器和数据通路都是32位宽度。这提供了更大的寻址空间和更高的数据处理能力,相对于一些早期的8位或16位处理器而言更适合处理复杂的任务。

      2. Thumb-2指令集: ARMv7-M体系结构采用了Thumb-2指令集,它是ARM指令集的一个升级版本。Thumb-2指令集提供了更好的代码密度,同时保持了与传统ARM指令集相比较的性能优势。这对于嵌入式系统中有限的存储资源非常有利。

      3. 低功耗设计: ARMv7-M体系结构专门针对低功耗和嵌入式应用进行了优化。这使得基于ARMv7-M的微控制器能够在电池供电或功耗敏感的应用中发挥优势。

      4. 嵌入式特性: ARMv7-M体系结构是为嵌入式系统设计的,因此它考虑了嵌入式应用的一些特殊要求,例如实时性、可靠性和实时中断处理。

      总体而言,ARMv7-M是ARM在嵌入式领域的一种高度优化的体系结构,为微控制器提供了高性能、低功耗和紧凑的代码执行能力。Cortex-M系列处理器,如Cortex-M3、Cortex-M4等,都采用了ARMv7-M体系结构。

    • Cortex-M3指的是ARM Cortex-M系列中的一种处理器内核。以下是对Cortex-M3的详细介绍:

      1. 架构和特性:

        • ARM Cortex-M系列: Cortex-M系列是ARM针对嵌入式系统设计的32位RISC处理器系列。它专注于低功耗、高性能、实时性和成本效益。
        • Cortex-M3特性: Cortex-M3是Cortex-M系列中的一员,具有单一、高效的3级流水线架构。它支持Thumb-2指令集,提供了更好的代码密度和性能。
      2. 性能:

        • 时钟频率: Cortex-M3可以运行在不同的时钟频率,具体取决于实际芯片的设计。典型的时钟频率范围在几十MHz到几百MHz之间。
        • 处理能力: 它具有较高的性能,适用于许多嵌入式应用,包括工业控制、汽车电子、消费电子等。
      3. 指令集和代码密度:

        • Thumb-2指令集: Cortex-M3采用Thumb-2指令集,它是ARM指令集的一种变体,结合了16位Thumb指令和32位ARM指令。这提供了更好的代码密度和性能。
      4. 低功耗设计:

        • 低功耗模式: Cortex-M3支持多种低功耗模式,使其适用于电池供电的移动设备和其他对功耗敏感的应用。
      5. 嵌入式特性:

        • 实时性: Cortex-M3专为实时操作系统和实时嵌入式应用设计,具有快速中断响应和低延迟的特性。
        • 可靠性: 高可靠性是嵌入式系统的一个重要特征,Cortex-M3的设计考虑了这一点。
      6. 适用领域:

        • Cortex-M3广泛应用于各种嵌入式系统,包括传感器控制、工业自动化、医疗设备、汽车电子和消费电子等领域。
  • Cortex M3内核和芯片之间的关系?
    在这里插入图片描述

    由图可以看出,ARM公司提供Cortex-M3内核和调试系统,其它的东西(外设、存储器等)由芯片制造商设计开发,STM32F103芯片就是由ST公司设计的。

  • STM32F103ZET6系统架构
    在这里插入图片描述

    STM32F103的系统主要由:四个主动单元(可以主动发起通信,图中①区域)和四个被动单元(只能被驱动工作,图中②区域)组成:

    主动单元被动单元
    Cortex M3内核 DCode总线(D-Bus)内部 FLASH (硬盘)
    Cortex M3内核 System总线(S-Bus)内部 SRAM (内存)
    通用DMA总线,连接到DMA1FSMC
    通用DMA总线,连接到DMA2AHBAPB的桥,它连接的所有APB外设
    • I Code 总线I - Bus

      这是Cortex M3内核的指令总线,连接闪存指令接口(如:FLASH),用于获取指令。由于该总线功能单一,并没有直接连接到总线矩阵,因此被排除在主动单元之外。

    • D Code 总线D - Bus

      这是Cortex M3内核的数据总线,连接闪存存储器数据接口(如:SRAM、FLASH等),用于各种数据访问,如常量、变量等。

    • System 总线S - Bus

      这是Cortex M3内核的系统总线,连接所有外设(如:GPIO、SPI、IIC、TIM等),用于控制各种外设工作,如配置各种外设相关寄存器等。

    • DMA 总线

      DMA是直接存储访问控制器,可以实现数据的自动搬运,整个过程不需要CPU处理。STM32F103ZET6有两个DMA控制器,可以实现内存到外设、外设到内存,内存到内存的数据传输。

    • 内部 FLASH

      内部FLASH即单片机的硬盘,用于代码/数据存储,CPU通过I Code总线经FLASH接口访问内部FLASH,FLASH最高访问速度是24Mhz,因此以72M速度访问时,需要插入2个时钟周期延迟。

    • 内部 SRAM

      内部SRAM即单片机的内存,用于数据存储,直接挂载在总线矩阵上面,CPU通过D Code总线实现0等待延时访问SRAM,最快总线频率可达72Mhz,从而保证高效高速的访问内存。

    • FSMC

      FSMC即灵活的静态存储控制器,实际上就是一个外部总线接口,可以用来访问外部SRAM、NAND/NOR FLASH、LCD等。它也是直接挂在总线矩阵上面的,以方便CPU快速访问外挂器件。

    • AHB/APB

    AHB总线连接总线矩阵,同时通过2个APB桥连接APB1和APB2,AHB总线速度最大为 72Mhz,APB2总线速度最大也是72Mhz,但是APB1总线速度最大只能是36Mhz。这三个总线上面挂载了STM32内部绝大部分外设。

    • 总线矩阵

      总线矩阵协调内核系统总线和DMA主控总线之间的访问仲裁,仲裁利用轮换算法,保证各个总线之间的有序访问,从而确保工作正常。

2. STM32寻址范围

  • STM32是一个32位单片机,可以访问4GB以内的存储空间(2^32=4GB),数据字节以小端模式存放在存储器中,数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。

3. 存储器映射

  • 存储器本身是没有地址信息的,我们对存储器分配地址的过程就叫存储器映射。
    在这里插入图片描述

ST把4GB空间分成8个块,每个块512MB,我们在学习的过程中,主要学习前面三个块,即 Block 0, Block 1, Block2.

存储块功能地址范围
Block 0Code(FLASH)0x0000 0000 ~ 0x1FFF FFFF(512MB)
Block 1SRAM0x2000 0000 ~ 0x3FFF FFFF(512MB)
Block 2片上外设0x4000 0000 ~ 0x5FFF FFFF(512MB)
Block 3FSMC Bank1&20x6000 0000 ~ 0x7FFF FFFF(512MB)
Block 4FSMC Bank3&40x8000 0000 ~ 0x9FFF FFFF(512MB)
Block 5FSMC寄存器0xA000 0000 ~ 0xBFFF FFFF(512MB)
Block 6保留0xC000 0000 ~ 0xDFFF FFFF(512MB)
Block 7Cortex M3内部外设0xE000 0000 ~ 0xFFFF FFFF(512MB)

Block 0 功能划分

功能地址范围
FLASH或系统存储器别名区0X0000 0000 ~ 0x0007 FFFF(512KB)
保留0X0008 0000 ~ 0x07FF FFFF
用户FLASH,用于存储用户代码0X0800 0000 ~ 0x0807 FFFF(512KB)
保留0X0808 0000 ~ 0x1FFF EFFF
系统存储器,存储出厂Bootloader0X1FFF F000 ~ 0X1FFF F7FF(2KB)
选项字节,配置读保护等0X1FFF F800 ~ 0X1FFF F80F(16B)
保留0X1FFF F810 ~ 0X1FFF FFFF

Block 1 功能划分

功能地址范围
SRAM0X2000 0000 ~ 0x2000 FFFF(64KB)
保留0X2001 0000 ~ 0x3FFF FFFF

Block 2 功能划分

功能地址范围
APB1总线外设0X4000 0000 ~ 0x4000 77FF
保留0X4000 7800 ~ 0x4000 FFFF
APB2总线外设0X4001 0000 ~ 0x4000 3FFF
保留0X4001 4000 ~ 0x4001 7FFF
AHB总线外设0X4001 8000 ~ 0x4002 33FF
保留0X4002 3400 ~ 0x5FFF FFFF

4. 寄存器映射

  • 给存储器分配地址的过程叫存储器映射,寄存器是一类特殊的存储器,它的每个位都有特定的功能,可以实现对外设/功能的控制,给寄存器的地址命名的过程就叫寄存器映射。
小类说明
内核存储器内核相关寄存器包含R0~R15、xPSR、特殊功能寄存器等
中断控制寄存器包含NVIC和SCB相关寄存器,NVIC有:ISER、ICER、ISPR、IP等;
SCB有:VTOR、AIRCR、SCR等
SysTick寄存器包含CTRL、LOAD、VAL和CALIB四个寄存器
内存保护寄存器可选功能,STM32F103没有
外设存储器调试系统寄存器ETM、ITM、DWT、IPIU等相关寄存器
包含GPIO、UART、IIC、SPI、TIM、DMA、ADC、DAC、RTC、I/WWDG、PWR、CAN、USB等各种外设寄存器

在这里插入图片描述

  • 相关说明

    • 寄存器名字

      每个寄存器都有一个对应的名字,以简单表达其作用,并方便记忆,这里GPIOx_ODR表示寄存器英文名,x可以从A~E,说明有5个这样的寄存器。

    • ② 寄存器偏移量及复位值

      地址偏移量表示相对该外设基地址的偏移。

    • ③ 寄存器位表

      描述寄存器每一个位的作用(共32bit),rw代表可读可写。

    • ④ 位功能描述

      描述寄存器每个位的功能。

  • 寄存器地址的计算

    为了方便编写代码及使用,我们将寄存器地址分为三个部分:

    1. 总线基地址(BUS_BASE_ADDR
    2. 外设基于总线基地址的偏移量(PERIPH_OFFSET
    3. 寄存器相对外设基地址的偏移量(REG_OFFSET

    寄存器地址 = BUS_BASE_ADDR+ PERIPH_OFFSET + REG_OFFSET

    • 总线基地址(PERIPH_OFFSET )
    总线基地址偏移量
    APB10X4000 00000
    APB20X4001 00000X1 0000
    AHB0X4001 80000X1 8000
    • GPIO外设基地址及偏移量(APB2PERIPH_BASE)
    所属总线外设基地址偏移量
    APB2 (0X4001 0000)GPIOA0X4001 08000X800
    GPIOB0X4001 0C000XC00
    GPIOC0X4001 10000X1000
    GPIOD0X4001 14000X1400
    GPIOE0X4001 18000X1800
    GPIOF0X4001 1C000X1C00
    GPIOG0X4001 20000X2000
    • GPIOA外设基地址及偏移量(GPIOA_BASE)
    所属总线所属外设寄存器地址偏移量
    APB2
    (0X4001 0000)
    GPIOA
    0X4001 0800
    GPIOA_CRL0X4001 08000X00
    GPIOA_CRH0X4001 08040X04
    GPIOA_IDR0X4001 08080X08
    GPIOA_ODR0X4001 080C0X0C
    GPIOA_BSRR0X4001 08100X10
    GPIOA_BRR0X4001 08140X14
    GPIOA_LCKR0X4001 08180X18
  • 寄存器映射的三个步骤

    1. 外设寄存器结构体类型定义

      typedef struct
      {__IO uint32_t CRL;  /* GPIO_CRL 寄存器,相对外设基地址偏移量:0X00 */__IO uint32_t CRH;  /* GPIO_CRH 寄存器,相对外设基地址偏移量:0X04 */__IO uint32_t IDR;  /* GPIO_IDR 寄存器,相对外设基地址偏移量:0X08 */__IO uint32_t ODR;  /* GPIO_ODR 寄存器,相对外设基地址偏移量:0X0C */__IO uint32_t BSRR; /* GPIO_BSRR 寄存器,相对外设基地址偏移量:0X10 */__IO uint32_t BRR;  /* GPIO_BRR 寄存器,相对外设基地址偏移量:0X14 */__IO uint32_t LCKR; /* GPIO_LCKR 寄存器,相对外设基地址偏移量:0X18 */
      } GPIO_TypeDef;
      
    2. 外设基地址定义

      #define PERIPH_BASE 0x40000000UL /* 外设基地址 */
      #define APB1PERIPH_BASE PERIPH_BASE /* APB1 总线基地址 */
      #define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000UL) /* APB2 总线基地址 */
      #define AHBPERIPH_BASE (PERIPH_BASE + 0x00020000UL)  /* AHB 总线基地址 */
      #define GPIOA_BASE (APB2PERIPH_BASE + 0x00000800UL)  /* GPIOA 基地址 */
      #define GPIOB_BASE (APB2PERIPH_BASE + 0x00000C00UL)  /* GPIOB 基地址 */
      #define GPIOC_BASE (APB2PERIPH_BASE + 0x00001000UL)  /* GPIOC 基地址 */
      #define GPIOD_BASE (APB2PERIPH_BASE + 0x00001400UL)  /* GPIOD 基地址 */
      #define GPIOE_BASE (APB2PERIPH_BASE + 0x00001800UL)  /* GPIOE 基地址 */
      #define GPIOF_BASE (APB2PERIPH_BASE + 0x00001C00UL)  /* GPIOF 基地址 */
      #define GPIOG_BASE (APB2PERIPH_BASE + 0x00002000UL)  /* GPIOG 基地址 */
      
    3. GPIO外设寄存器映射定义

      #define GPIOA ((GPIO_TypeDef *)GPIOA_BASE) /* GPIOA 寄存器地址映射 */
      #define GPIOB ((GPIO_TypeDef *)GPIOB_BASE) /* GPIOB 寄存器地址映射 */
      #define GPIOC ((GPIO_TypeDef *)GPIOC_BASE) /* GPIOC 寄存器地址映射 */
      #define GPIOD ((GPIO_TypeDef *)GPIOD_BASE) /* GPIOD 寄存器地址映射 */
      #define GPIOE ((GPIO_TypeDef *)GPIOE_BASE) /* GPIOE 寄存器地址映射 */
      #define GPIOF ((GPIO_TypeDef *)GPIOF_BASE) /* GPIOF 寄存器地址映射 */
      #define GPIOG ((GPIO_TypeDef *)GPIOG_BASE) /* GPIOG 寄存器地址映射 */
      

声明:参考文献来源: 战舰STM32F103ZET6开发板资源包

  1. Cortex-M3权威指南(中文).pdf
  2. STM32F10xxx参考手册_V10(中文版).pdf
  3. STM32F103 战舰开发指南V1.3.pdf
  4. STM32F103ZET6(中文版).pdf
  5. 战舰V4 硬件参考手册_V1.0.pdf

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

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

相关文章

根据星历文件实现卫星的动态运行模拟matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 .................................................................................... % …

测试用例的修改更新

测试用例的修改更新是指测试过程中由于用户需求的改变,或者测试过程中发现有新的需求产生,使得测试用例需要进行修改。修改更新测试用例不仅是一种测试技术,更是一种质量保证的方法。但修改和更新测试用例的技术要点在于: 1、执行…

Note3---初阶二叉树~~

目录​​​​​​​ 前言🍄 1.树概念及结构☎️ 1.1 树的概念🎄 1.2 树的相关概念🦜 1.2.1 部分概念的加深理解🐾 1.2.2 树与非树🪴 1.3 树的表示🎋 1.4 树在实际中的运用(表示文件系统…

RT-Smart elf 动态加载技术 : 开启 ldso 动态加载

前言 RT-Smart,类似于Linux,可以动态的加载运行 应用程序 elf 文件 应用程序 elf 文件,有的是静态链接编译的,有的是动态链接编译的,动态链接编译的,还需要加载 动态共享库 (.so) 本篇讲解一下 RT-Smart 上 elf 动态加载功能的实现,顺便讲一下动态加载的原理 环境搭建 R…

RTrPPG

研究背景 心率 (HR) 和脉搏率变异性 (PRV) 是允许分析心脏行为的两个生理参数。心率监测可以通过接触式和非接触式的两种方法进行。通常用于测量 HR 和 PRV 的两种接触式技术是心电图 (ECG) 和光电容积脉搏波 (PPG)。 ECG 测量由心脏活动引起的电场。另一方面,PPG …

02什么是CPU上下文切换

上⼀节, 讲了要怎么理解平均负载( Load Average) , 并⽤三个案例展示了不同场景下平均负载升⾼的分析⽅法。 这其中, 多个进程竞争 CPU 就是⼀个经常被我们忽视的问题。 1、CPU上下文切换的概念 我想你⼀定很好奇&am…

2023/12/18 work

1. 机械臂 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <myhead.h>#define CLI_PORT 6667 //本机的端口号 #define CLI_IP "192.168.125.79" //本机的IP#define SER_PORT 8888 //服务器的端口号 #define…

智能家居和智能家居控制设备有什么区别?

智能家居和智能家居控制设备在功能和用途伤的区别&#xff1a; 智能家居是一种整体的概念&#xff0c;它涵盖了整个家庭环境的智能化&#xff0c;包括智能家电、智能照明、智能安防等设备的互联互通和协同工作。智能家居的目标是通过中央控制器或智能音箱等设备&#xff0c;实现…

瑞安籍侨领池万进荣任意大利瑞安同乡总会第五届会长

浙江温州瑞安是全国重点侨乡&#xff0c;拥有海外侨胞16万人、侨领2100多名、归侨侨眷近12万人&#xff0c;在世界100多个国家和地区建有70多个侨团组织。 意大利瑞安同乡总会第五届理事会会长团全体成员 青年部全体成员 各兄弟会长及代表 12月10日&#xff0c;意大利瑞安同乡…

LabVIEW在燃气轮机发电机组励磁控制系统测试中的应用

LabVIEW在燃气轮机发电机组励磁控制系统测试中的应用 燃气轮机发电机组作为一种高效可靠的常备应急电源&#xff0c;在保障发电品质稳定性和可靠性方面发挥着关键作用。其中&#xff0c;励磁控制系统是保证供电质量的重要环节&#xff0c;对发电机组的稳定运行至关重要。为了有…

档案数字化管理可以提供什么服务?

档案数字化管理提供了便捷、高效和安全的档案管理服务&#xff0c;帮助组织更好地管理和利用自己的档案资源。 具体来说&#xff0c;专久智能档案数字化管理可以提供以下服务&#xff1a; 1. 档案扫描和数字化&#xff1a;将纸质档案通过扫描仪转换为数字格式&#xff0c;包括文…

Peter算法小课堂—简单建模(4)

太戈编程1655题 一条直线上&#xff0c;你安排了n个哨兵站岗放哨&#xff0c;编号从1到n。其中i号哨兵的坐标位置是x[i]。不会有哨兵站在相同的位置。作为指挥官&#xff0c;你需要知道3个信息&#xff1a; 1.从左到右&#xff0c;每个哨兵的坐标依次是几? 2.从左到右&…

当抖店有订单支付或确认时,无需人工操作,通过自动化流程实现自动解密电话号码并发送引流短信,高效转化私域用户

1 场景描述 为了提高用户体验&#xff0c;越来越多的企业正转向使用抖音小店来销售产品或扩大其粉丝群。在线教育行业尤其倾向于以抖店为其主要销售平台。这些公司通常会在抖店上销售试听课程&#xff0c;并通过抖店获取的用户手机号码发送短信&#xff0c;进而将潜在客户引导到…

开发企业展示小程序的关键步骤和技巧

随着移动互联网的快速发展&#xff0c;小程序已经成为企业展示形象、推广产品和服务的重要工具。拥有一个优秀的小程序可以帮助企业提高品牌知名度&#xff0c;吸引更多潜在客户&#xff0c;提升用户体验。以下是拥有一个展示小程序的步骤&#xff1a; 确定需求和目标 首先&am…

【深度学习】序列生成模型(二):束搜索

文章目录 序列生成束搜索理论基础算法步骤python实现 序列生成 在进行最大似然估计训练后的模型 p θ ( x ∣ x 1 : ( t − 1 ) ) p_\theta(x | \mathbf{x}_{1:(t-1)}) pθ​(x∣x1:(t−1)​)&#xff0c;我们可以使用该模型进行序列生成。生成的过程是按照时间顺序逐步生成序…

实现el-table操作列点击弹出echarts

代码&#xff1a; <el-table-column :width"90"><template #default"scope"><el-popover placement"left-end" width"550" trigger"click"><div><div style"font-size: 18px; margin-left…

IDEA报错处理

问题1 IDEA 新建 Maven 项目没有文件结构 pom 文件为空 将JDK换成1.8后解决。 网络说法&#xff1a;别用 java18&#xff0c;换成 java17 或者 java1.8 都可以&#xff0c;因为 java18 不是 LTS 版本&#xff0c;有着各种各样的问题。。

Hadoop和Spark的区别

Hadoop 表达能力有限。磁盘IO开销大&#xff0c;延迟度高。任务和任务之间的衔接涉及IO开销。前一个任务完成之前其他任务无法完成&#xff0c;难以胜任复杂、多阶段的计算任务。 Spark Spark模型是对Mapreduce模型的改进&#xff0c;可以说没有HDFS、Mapreduce就没有Spark。…

2023年全球运维大会(GOPS深圳站)-核心PPT资料下载

一、峰会简介 1、大会背景与概述 全球运维大会&#xff08;GOPS&#xff09;是运维领域最具影响力的国际盛会&#xff0c;每年都会汇聚世界各地的运维专家、企业领袖、技术爱好者&#xff0c;共同探讨运维技术的最新发展、最佳实践以及面临的挑战。2023年GOPS深圳站作为该系列…

2023建筑行业薪资趋势?如何提高建筑设计效率呢?

12月6日&#xff0c;国外著名建筑可视化网站CGarchitect公布了其2023年建筑可视化薪资调查结果&#xff0c;详细描述了行业内的薪资趋势。 调查表明&#xff0c;占比较高的是有16.04%的年收入低于10000美元&#xff08;约71000人民币&#xff09;&#xff0c;其次是11.75%的受…