STM32芯片的内部架构介绍
STM32芯片由内核和片上外设两部分组成。STM32F103采用Cortex-M3内核,该内核由ARM公司设计。芯片生产厂商ST则负责在内核之外设计部件并生产整个芯片。这些内核之外的部件被称为核外外设或片上外设,如GPIO、USART(串口)、I2C、SPI等。
芯片内核与外设之间通过各种总线连接,其中驱动单元有四个,被动单元也有四个。可以将驱动单元理解成内核部分,被动单元理解成外设。
ICode总线
ICode总线是专门用于取指令的总线,其中的“I”代表“Instruction”(指令)。在编写程序后,经过编译,程序将转化为一条条指令并存储在FLASH中。内核通过ICode总线读取这些指令,进而执行程序。
DCode总线
DCode总线用于取数,其中的“D”代表“Data”(数据)。在编写程序时,数据分为常量和变量两种。常量是不变的,使用C语言中的const关键字进行修饰,并存储在内部FLASH中。变量是可变的,无论是全局变量还是局部变量,都存储在内部的SRAM中。
System总线
我们通常所说的寄存器编程,即读写寄存器的操作,都是通过System总线来完成的。System总线主要用于访问外设的寄存器。
DMA总线
DMA总线也主要用于传输数据,这些数据可以来自某个外设的数据寄存器,也可以来自SRAM或内部FLASH。
由于数据既可以被DCode总线访问,也可以被DMA总线访问,因此为了避免访问冲突,取数时需要经过一个总线矩阵进行仲裁,以决定由哪个总线进行取数。
内部的闪存存储器Flash
内部的闪存存储器即为FLASH,它用于存储编写好的程序。内核通过ICode总线来获取存储器中的指令。
内部的SRAM
内部的SRAM,也被称为内存,是程序中变量、堆栈等开销的存储基础。内核通过DCode总线来访问SRAM。
FSMC
FSMC的英文全称是Flexible static memory controller(灵活的静态的存储器控制器)。通过FSMC,可以扩展内部存储器,如外部的SRAM、NAND-FLASH和NORFLASH。但是,FSMC只能扩展静态的内存,而不能扩展动态的内存,因此不能用于扩展SDRAM。
AHB
从AHB总线延伸出的两条APB2和APB1总线是常见的总线,它们连接了GPIO、串口、I2C、SPI等外设。学习STM32的重点在于学会对这些外设进行编程,以便驱动外部的各种设备。
相关文章:

STM32芯片的内部架构介绍
STM32芯片由内核和片上外设两部分组成。STM32F103采用Cortex-M3内核,该内核由ARM公司设计。芯片生产厂商ST则负责在内核之外设计部件并生产整个芯片。这些内核之外的部件被称为核外外设或片上外设,如GPIO、USART(串口)、I2C、SPI等…...
Angular FormControl value属性的一些事
背景:一个输入校验,允许输入多行,每一行是ip或网段。写了个校验,将其按行拆分后单独校验。 1. FormControl无法深复制 使用JSON.parse(JSON.stringify(control))进行简单深复制报错,因为不是json类型;使用d…...
Nim游戏:取石头
(一)一堆取石头 背景: 在博弈论中,有一种称为Nim游戏的经典问题,它涉及到取石子的问题,其中有许多变种。Nim游戏是一种零和博弈,即两名玩家交替行动,每次只能从一堆物品中取走一定数…...

springboot国际化
springboot国际化 不需要引入额外的jar包 参考:https://zhuanlan.zhihu.com/p/551605839 1.rources要创建Resource Bundle 2.yml配置中引入Resource Bundle 引入Resource Bundle spring:messages:encoding: UTF-8basename: i18n/messages_common3.创建国际化工具…...
12种不宜使用的Javascript语法
1. Javascript有两组相等运算符,一组是和!,另一组是和!。前者只比较值的相等,后者除了值以外,还比较类型是否相同。 请尽量不要使用前一组,永远只使用和!。因为默认会进行类型转换,规则十分难记。如果你…...

vue3+element-plus点击列表中的图片预览时,图片被表格覆盖
文章目录 问题解决 问题 视觉 点击图片进行预览,但还能继续选中其他的图片进行预览,鼠标放在表格上,那一行表格也会选中,如图所示第一行的效果。 代码 <el-table-column prop"id" label"ID" width"…...

flutter:二维码生成与读取
前言 这csdn真的是服了,图片里有个二维码就直接变成违规图片了。至于效果的话,自己运行一下看看吧。 生成 flutter中生成二维码可以使用 qr_flutter。 官方文档 https://pub-web.flutter-io.cn/packages/qr_flutter 安装 flutter pub add qr_flutt…...
Camunda 7.x 系列【14】核心概念
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 流程定义1.1 Key1.2 版本1.3 挂起2. 流程实例3. 执行4. 活动实例5. 作业和作业定义本篇文…...

matplotlib 笔记:hist2d 2D直方图
创建二维直方图,用于显示数据分布的图表将数据划分成不同的区间(bin),并统计每个区间内数据点的数量 1 基本画法 默认bin的数量是10*10 N 1000 x np.random.randn(N) y np.random.randn(N) plt.hist2d(x, y) 2 修改bin的…...

数据库优化脚本执行报错
目录 一、执行数据库优化脚本 报错... 3 解决方法:... 4 1、直接注释掉RECYCLE_POOLS 赋值sql语句块... 4 2、手动修改脚本... 5 附录... 6 一、执行数据库优化脚本 报错 AutoParaAdj3.5_dm8.sql 1)manager中报错 -20001: 执行失败, -7065 数据未…...
TopN漏洞--sql注入
sql注入 SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查…...

【论文阅读】UNICORN:基于运行时来源的高级持续威胁检测器(NDSS-2020)
UNICORN: Runtime Provenance-Based Detector for Advanced Persistent Threats NDSS-2020 哈佛大学 Han X, Pasquier T, Bates A, et al. Unicorn: Runtime provenance-based detector for advanced persistent threats[J]. arXiv preprint arXiv:2001.01525, 2020. 源码&…...
Linux的基本介绍和常用命令
Linux和Windows的主要区别 Linux和Windows是两种具有不同特性的操作系统,它们具有各自的优点和适用场景。选择哪一个操作系统主要取决于用户的需求、技术背景及使用场景等。 Linux和Windows的主要区别如下: 开源VS闭源:Linux是开源的系统&…...
Flutter 中
在Get状态管理库中,GetxController是一个用于管理状态和逻辑的基类。它具有一系列的生命周期方法,用于在不同的阶段执行相关的操作。下面是GetxController的生命周期方法及其执行顺序: onInit(): 这个方法在GetxController创建并加入到管理器…...

可视化高级绘图技巧100篇-总论
前言 优秀的数据可视化作品可以用三个关键词概括:准确、清晰、优雅。 准确:精准地反馈数据的特征信息(既不遗漏也不冗余,不造成读者疏漏&误读细节) 清晰:获取图表特征信息的时间越短越好 优雅&…...

Android AOSP源码编译——AOSP下载(一)
一、电脑配置 Ubuntu16.04 16G,硬盘的大小最好大于300G (我这边是找了个win电脑装了双系统 没有使用虚拟机的方式) 二、基础环境配置 1、安装git sudo apt install git配置git email和name git config --global user.email "youexample.com" git conf…...

Qt 文件对话框使用 Deepin风格
当你在Deepin或UOS 上开发 Qt 程序时,如果涉及到文件对话框功能,那么就会遇到调用原生窗口的问题。 如果你使用的是官方的Qt版本,那么在Deepin或者UOS系统上,弹出的文件对话框会是如下这样: 而Deepin或UOS系统提供的默…...
.net core 配置swagger
要在 ASP.NET Core 中配置 Swagger,您需要遵循以下步骤: 添加 Swagger NuGet 包:将 Swashbuckle.AspNetCore NuGet 包添加到项目中。 在 Startup.cs 文件中进行配置: using Microsoft.OpenApi.Models;public class Startup {// 省…...
leetcode707. 设计链表(单链表+虚拟头指针+双指针遍历)
题目:leetcode707. 设计链表 描述: 你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。 如果是双向链…...

电脑麦克风没声音?
这3招就可以解决! 在我们使用电脑录制视频时,有时会遇到一个令人头疼的问题:麦克风没有声音。那么,为什么会出现这种情况呢?更重要的是,我们应该如何解决这个问题呢?本文将介绍3种方法…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...

【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...

Python环境安装与虚拟环境配置详解
本文档旨在为Python开发者提供一站式的环境安装与虚拟环境配置指南,适用于Windows、macOS和Linux系统。无论你是初学者还是有经验的开发者,都能在此找到适合自己的环境搭建方法和常见问题的解决方案。 快速开始 一分钟快速安装与虚拟环境配置 # macOS/…...