day2 开发环境平台搭建

news2024/12/24 8:58:56

Corter - M0存储器映射

 SOC中CPU访问各个外部部件是通过每个部件的编号(地址)访问的;

CPU给各个部件分配地址的过程称之为映射;

Corter - M0 为32位,所以其给部件分配的地址范围为0 - 4Gb(2^32);

4GB的空间会有相应分段,相应部件在对应分段内

 

STM32存储器映射

如何访问寄存器

以GPIOA寄存器组为例,如何读取ODR寄存器?

已知GPIOA的起始地址为0x48000000,个寄存器的偏移地址为:

寄存器                    地址偏移量

MODER;             /*Address offset: 0x00 */

OTYPER;           /*Address offset: 0x04 */

OSPEEDR;        /*Address offset: 0x08 */

PUPDR;            /*Address offset: 0x0C */

IDR;                  /*Address offset: 0x10 */

ODR;               /*Address offset: 0x14 */

BSRR;              /*Address offset: 0x18 */

LCKR;             /*Address offset: 0x1C *

寄存器访问方式1:

对地址进行宏定义;

#define GPIOA_BASE ((unsigned int) 0x48000000)
#define GPIOA_ODR (GPIOA_BASE + 0x14

//读操作
val = *(unsigend int*)GPIOA_ODR;

//写操作
*(unsigend int*)GPIOA_ODR = val;

/*改进**/
#define GPIOA_ODR (*(unsigned int *)(GPIOA_BASE + 0x14))

val = GPIOA_ODR;
GPIOS_ODR = VAL;

 访问寄存器方式2

用结构体封装寄存器;

typedef struct {
uint32_t		MODER;      /*Address offset: 0x00 */
uint32_t		OTYPER; 	/*Address offset: 0x04 */
uint32_t		OSPEEDR; 	/*Address offset: 0x08 */
uint32_t		PUPDR;	 	/*Address offset: 0x0C */
uint32_t		IDR; 		/*Address offset: 0x10 */
uint32_t		ODR; 		/*Address offset: 0x14 */
uint32_t		BSRR; 		/*Address offset: 0x18 */
uint32_t		LCKR; 		/*Address offset: 0x1C */
} GPIO_TypeDef;

#define GPIOA_BASE ( (unsigned int ) 0x48000000 )
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)

注:我们访问GPIOA的控制寄存器组时、直接使用宏定义好 GPIO_TypeDef 类型的指针,而且指针指向 GPIOA端口的首地址,这样我们直接用宏GPIOA访问改外设的任意一个寄存器

GPIOA->MODER     =  0x20 ; 

GPIOA->OSPEEDR  =  0x16 ;

STM32启动文件分析

 注:Cortex-M0 的程序映像通常是从地址 0x00000000 开始的、系统复位后,处理器首先读取向量表中的前两个字(8 个字节),第一个字存入 MSP,第二个字为复位向量,它表示程序执行的起始地址(复位处理)

 STM32F0启动模式

启动模式选择
BOOT1BOOT0启动模式说明
x0主闪存存储器主闪存存储器选为启动区域
11系统存储器

系统存储器选为启动区域

01内置SRAM内置SRAM选为启动区域

根据启动模式的不同,用户闪存、系统闪存和SRAM都可以映射到0x0的低端地址;
 

 

 

 

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

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

相关文章

TZOJ 3100: 女生寝室的围墙 凸包

凸包模板题: 在平面上能包含所有给定点的最小凸多边形叫做凸包。 实际上可以理解为用一个橡皮筋包含住所有给定点的形态。 凸包用最小的周长围住了给定的所有点。如果一个凹多边形围住了所有的点,它的周长一定不是最小,如下图。根据三角不…

设备健康度评价实践--煤磨机

煤磨健康度评价说明 煤磨健康度评价模型 在以可靠性为中心的维护理论中,一般用健康度量化描述设备的健康状态,它是指在规定的时间和条件下,设备持续完成预定功能的能力大小,是表达设备或零件状态好坏的定量指标。 煤磨的健康状态评价原则是要求能够真实地反映磨机的健康状态…

lancet: 【推荐】--源码学习

一个全面、高效、可复用的go语言工具函数库; 可以学习源码的好的地方,这个是个工具库,建议最好的办法是 在项目中导入后,然后查看他的各个源代码进行学习使用 golangd中,查看导入包以及他的源代码; 中文…

农历日程提醒软件哪个好?安卓苹果通用的日程提醒软件

在日常生活中,有很多重要的日期都是按照农历(阴历)计算的,例如春节、七夕、中秋节等重要的传统节日、一些亲朋好友的生日、农村乡镇农历逢一、逢七赶集等。为了防止自己忘记这些重要的节日,提前做好准备,很…

【深度学习笔记】TensorFlow 常用函数

TensorFlow 提供了一些机器学习中常用的数学函数,并封装在 Module 中,例如 tf.nn Module 提供了神经网络常用的基本运算,tf.math Module 则提供了机器学习中常用的数学函数。本文主要介绍 TensorFlow 深度学习中几个常用函数的定义与用法&…

Flask 框架集成Bootstrap

前面学习了 Flask 框架的基本用法,以及模板引擎 Jinja2,按理说可以开始自己的 Web 之旅了,不过在启程之前,还有个重要的武器需要了解一下,就是著名的 Bootstrap 框架和 Flask 的结合,这将大大提高开发 Web …

【ROS】Ubuntu18.04安装Ros

Ubuntu18.04安装Ros 引言1 ROS安装(一键式)2 正常安装2.1 添加ROS软件源2.2 添加公钥2.3 更新2.4 安装ros2.5 初始化 rosdep2.6 设置环境2.7 安装rosinstall,便利的工具2.8 检验 3 rviz将bag数据可视化为点云3.1 打开ROS和rviz软件3.2 配置rviz软件可视化…

gpu-manager安装及测试

提示:GPU-manager安装为主部分内容做了升级开箱即用,有用请点收藏❤抱拳 文章目录 前言一、约束条件二、使用步骤1.下载镜像1.1 查看当前虚拟机的驱动类型: 2.部署gpu-manager3.部署gpu-admission4.修改kube-scheduler.yaml![在这里插入图片描…

Web Server市场占有率调查

目录 一、理论 1.Web Server市场占有率调查 一、理论 1.Web Server市场占有率调查 (1)netcraft ①查询 每月netcraft公司都会出一次调查报告 netcraft官方:Netcraft | Leader in Phishing Detection, Cybercrime Disruption and Websi…

Samba(二)

问题 Rocky Linux使用smbclient访问win11的共享文件时提示 Error NT_STATUS_IO_TIMEOUT 分析 通过测试,发现关闭windows公用网络防火墙时,可正常显示服务器端所分享出来的所有资源;进一步发现单独放行防火墙进站规则中的文件和打印机共享&a…

B树的插入与删除过程

B树的插入 原树: 插入key后,若导致原节点关键字数超过上限,则从中间位置( ⌈ m 2 ⌉ \lceil\frac{m}{2}\rceil ⌈2m​⌉)将关键字分成两部分,左部分包含的关键字放在原节点中,右部分包含的关键…

面试题:说说vue2的生命周期函数?说说vue3的生命周期函数?说说vue2和vue3的生命周期函数对比?

说说vue2的生命周期函数?说说vue3的生命周期函数?说说vue2和vue3的生命周期函数对比? 一、说说vue2的生命周期函数1.1 vue生命周期分为四个阶段、8个钩子1.1.1 beforeCreate 和 created 初始化阶段1.1.2 beforeMount 和 mounted 挂载阶段1.1.…

利用XLL文件投递Qbot银行木马的钓鱼活动分析

1概述 近期,安天CERT发现了一起利用恶意Microsoft Excel加载项(XLL)文件投递Qbot银行木马的恶意活动。攻击者通过发送垃圾邮件来诱导用户打开附件中的XLL文件,一旦用户安装并激活Microsoft Excel加载项,恶意代码将被执…

合并区间——力扣56

文章目录 题目描述解法一 排序题目描述 解法一 排序 vector<vector<int>> merge(vector<vector<int>>& intervals

SpringCloud实用篇5——elasticsearch基础

目录 1.初识elasticsearch1.1 了解ES1.1.1 elasticsearch的作用1.1.2 ELK技术栈1.1.3 elasticsearch和lucene1.1.4 总结 1.2.倒排索引1.2.1.正向索引1.2.2.倒排索引1.2.3.正向和倒排 1.3 es的一些概念1.3.1 文档和字段1.3.2 索引和映射1.3.3 mysql与elasticsearch 1.4 部署单点…

Linux MQTT智能家居项目(智能家居界面布局)

文章目录 前言一、创建工程项目二、界面布局准备工作三、正式界面布局总结 前言 一、创建工程项目 1.选择工程名称和项目保存路径 2.选择QWidget 3.添加保存图片的资源文件&#xff1a; 在工程目录下添加Icon文件夹保存图片&#xff1a; 将文件放入目录中&#xff1a; …

https的原理和方案

文章目录 https原理为什么要加密常见的加密方式对称加密非对称加密数据摘要&&数据指纹数据签名 https的几种工作方案方案一&#xff1a;只使用对称加密方案二&#xff1a;只使用非对称加密方案三&#xff1a;两端都使用非对称加密方案四&#xff1a;非对称加密 对称加…

2023年十款开源测试开发工具推荐

1、AutoMeter-API 自动化测试平台 AutoMeter 是一款针对分布式服务&#xff0c;微服务 API 做功能和性能一体化的自动化测试平台&#xff0c;一站式提供发布单元&#xff0c;API&#xff0c;环境&#xff0c;用例&#xff0c;前置条件&#xff0c;场景&#xff0c;计划&#x…

计算机工作原理:进程调度

在计算机中&#xff0c;什么是进程&#xff1f;一个跑起来的程序就是一个进程&#xff0c;没跑起来就只能算一个程序。 在windows的任务管理器中&#xff0c;可以很清楚的看到有哪一些进程。 进程&#xff08;progress&#xff09;也叫任务&#xff08;task&#xff09;。 每…

C语言进阶第二课-----------指针的进阶----------升级版

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…