STM32学习笔记(四) —— 位段别名区的使用

STM32F103RCT6有两个位段区 (SRAM 最低1M空间和片内外设存储区最低1M空间), 这两个区域都有各自的别名区,在别名区中每个字会映射到位段区的一个位,所以在别名区修改一个字相当于修改位段区中对应的一个位

SSS3.001

映射公式( 别名区中的字与位段区中的位对应关系 ):

位段区某个位在别名区的地址 = 别名区起始地址 + (目标位所在的字节,在位段中的序号 x 32)+(目标位的位置 x 4)

别名区起始地址:

SRAM:0x22000000
Peripheral:0x42000000
目标位所在的字节,在位段中的序号:位段中的某个位,所在的那个字节,在位段中的序号
目标位的位置:位段中的某个位,在所在的那个字节中的位置 (0 - 31)

比较绕,看个例子就行了,

对于SRAM别名区地址,比如要计算,位段区地址为0x20004F01处,的字节中的第2位,对应的别名区的地址,

addr_sram = 0x22000000 + (0x4F01 x 32) + (2 x 4)

对 addr_sram 地址的读写操作就是相当于对 SRAM 中地址 0x20004F01 字节的第2位进行读写

对于外设别名区地址,比如要计算,位段区地址为 0x4001080C处,的字节中的第1位,对应的别名区地址,

addr_peripheral = 0x42000000 + (0x1080C x 32) + (1 x 4)

对 addr_peripheral 地址的读写操作就是相当于对 Peripheral 中地址 0x4001080C 字节的第1位进行读写

下面通过软件编程来进行验证:

1° 在 SRAM 位段区定义一个全局变量test_value,在他的别名区为此变量赋值为0x04(将此别名区地址值设置为0x01, 相当于将地址 0x20004F01 所在字节第2位置1, 即 test_value 值设置为0x04);
2° 读取 test_value 值,如果test_value值为0x04,点亮LED灯,否则熄灭LED灯。

4.代码编写

/* 将全局变量 test_value 定义到 0x20004F01地址上 */
__IO uint8_t test_value __attribute__ ((at(0x20004F01)));

  /* 在while循环之前添加以下初始化代码 */
  /* 初始化test_value值为0 */
  test_value = 0x00;

  printf("before, test_value = 0x%x\r\n", test_value);

  /*
  * SRAM 基址 0x20000000; SRAM 别名区基址 0x22000000
  * 别名区地址=别名区起始地址+(目标位所在字节在位段中的序号x32)+(目标位的位置x4)
  * 将此别名区地址值设置为0x01, 相当于将地址 0x20004F01 所在字节第2位置1, 即 test_value 值设置为0x04
  */
  *((__IO uint32_t *)((uint32_t)0x22000000 + ((uint32_t)0x4F01 << 5) + ((uint32_t)2 << 2))) = 0x01;

  printf("after, test_value = 0x%x\r\n", test_value);

  RCC->APB2ENR |=  ((uint16_t)0x01 << 3 ); //开启GPIOB时钟
  /* 配置PB1为通用推挽输出模式,输出速率最大2MHz */
  GPIOB->CRL &= ~((uint32_t)0x03 << 4); //将 MODE1[1:0] 清0
  GPIOB->CRL |=  ((uint32_t)0x02 << 4); //将 MODE1[1:0] 配置为10 输出模式,最大速率2MHz
  GPIOB->CRL &= ~((uint32_t)0x03 << 6); //将 CNF1[1:0] 清0
  GPIOB->CRL |=  ((uint32_t)0x00 << 6); //将 CNF1[1:0] 配置为00 通用推挽输出模式

  /* PB1引脚输出1(高电平),默认熄灭LED */
  GPIOB->BSRR = ((uint32_t)0x01 << 1); //这里也可以使用ODR寄存器

  if(0x04 == test_value) { //内存中的值为设置的值0x04
	/*
	* 外设基址 0x40000000; 外设别名区基址 0x42000000
	* 别名区地址=别名区起始地址+(目标位所在字节在位段中的序号x32)+(目标位的位置x4)
	* GPIOB的基地址是0x4001 0C00,ODR寄存器的偏移地址是0x0C,GPIOB_ODR地址就是0x4001 0C0C
	* 那【目标位所在字节在位段中的序号】就是0x10C0C
	* PB1是是由ODR寄存器第1位,所以目【标位的位置】就是1
	* 将此别名区地址值设置为0, 相当于将 GPIOB->ODR 寄存器第1位清0, 即PB1输出低电平
	*/
	*((__IO uint32_t *)((uint32_t)0x42000000 + ((uint32_t)0x10C0C << 5) + ((uint32_t)1 << 2))) = 0;
  }
  else if(0x00 == test_value) {
    /* PB1输出高电平 */
	*((__IO uint32_t *)((uint32_t)0x42000000 + ((uint32_t)0x10C0C << 5) + ((uint32_t)1 << 2))) = 1;
  }
  else {
  }

  while(1);

将程序下载后可以打开串口调试助手查看赋值前后的test_value值,同时LED会点亮。

test_value

本例程代码可以在HAL库工程模板这一章节的最后,百度网盘链接分享处获取

以上是通过开发板进行实际验证的,下面使用软件仿真,

我们首先进入调试界面( 前面章节有提到,所以本篇以及后续章节都不再重复提及 ),
打开串口

在这里插入图片描述

运行程序,就可以在串口显示界面查看到输出的数据
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jenkins部署(docker)

docker部署&#xff0c;避免安装tomcat 1.拉镜像 docker pull jenkins/jenkins2.宿主机创建文件夹 mkdir -p /lzp/jenkins_home chmod 777 /lzp/jenkins_home/3.启动容器 docker run -d -p 49001:8080 -p 49000:50000 --privilegedtrue -v /lzp/jenkins_home:/var/jenkins_…

Excel得到JSON串

很多时候业务都需要做一种从Excel读取或者导入数据的功能&#xff0c;这在cs程序比较简单&#xff0c;在BS程序上如果封装不好的话那么写起来还是很费劲的&#xff0c;这次封装Excel读取操作。 先看使用 对&#xff0c;你没有看错&#xff0c;就是这么简单。 封装 基础设计…

2023年葡萄酒行业分析报告(电商数据查询):消费市场疲软,但国产品牌的替代效应逐步明显

近几年&#xff0c;受国内经济增速放缓的影响&#xff0c;现阶段国内葡萄酒的消费需求仍显不足。同时&#xff0c;当前国内酒类市场正处于存量竞争阶段&#xff0c;市场竞争十分激烈&#xff0c;其他酒类也在一定程度上挤占了葡萄酒的市场份额&#xff0c;这也导致国内葡萄酒消…

04:容器技术概述|镜像与容器|docker配置管理

容器技术概述&#xff5c;镜像与容器&#xff5c;docker配置管理 什么是容器优点缺点 docker与容器跳板机yum源添加docker软件在node节点验证软件包开启路由转发 镜像管理&容器管理如何获取镜像镜像备份与恢复运行容器查看镜像的启动信息镜像管理命令容器管理命令容器内部署…

十一、常用API——练习

常用API——练习 练习1 键盘录入&#xff1a;练习2 算法水题&#xff1a;练习3 算法水题&#xff1a;练习4 算法水题&#xff1a;练习5 算法水题&#xff1a; 练习1 键盘录入&#xff1a; 键盘录入一些1~100之间的整数&#xff0c;并添加到集合中。 直到集合中所有数据和超过2…

SolidWorks曲面功能介绍

在SolidWorks中提供了功能丰富的曲面功能&#xff0c;那为什么我们需要使用曲面功能&#xff1f;曲面功能一般是在处理一些复杂外形的时候来使用&#xff0c;这些形状需要通过曲线的变化来控制&#xff0c;从而得到满意的外形&#xff0c;一般来说这样的外形是很难通过实体建模…

集成学习之Boosting方法系列_XGboost

文章目录 【文章系列】【前言】【算法简介】【正文】&#xff08;一&#xff09;XGBoost前身&#xff1a;梯度提升树&#xff08;二&#xff09;XGBoost的特点&#xff08;三&#xff09;XGBoost实际操作1. 前期准备&#xff08;1&#xff09;数据格式&#xff08;2&#xff09…

(2)(2.10) LTM telemetry

文章目录 前言 1 协议概述 2 配置 3 带FPV视频发射器的使用示例 4 使用TCM3105的FSK调制解调器示例 前言 轻量级 TeleMetry 协议 (LTM) 是一种单向通信协议&#xff08;从飞行器下行的数据链路&#xff09;&#xff0c;可让你以低带宽/低波特率&#xff08;通常为 2400 波…

Mamba系列日积月累(一):状态空间模型SSM的离散化过程推导

文章目录 1. 背景基础知识1.1 什么是状态空间模型&#xff08;State Space Model&#xff0c;SSM&#xff09;&#xff1f;1.2 什么是离散化&#xff08;Discretization&#xff09;&#xff1f;1.3 为什么需要离散化&#xff1f; 2. SSM离散化过程推导2.1 为什么在离散化过程中…

Windows断开映射磁盘提示“此网络连接不存在”,并且该磁盘直在资源管理器中

1、打开注册表编辑器 快捷键winR 打开“运行”&#xff0c; 输入 regedit 2、 删除下列注册表中和无法移除的磁盘相关的选项 \HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\ 3、打开“任务管理器”&#xff0c;重新启动“Windows资源…

vue3源码(三)computed

1.功能 接受一个 getter 函数&#xff0c;并根据 getter 的返回值返回一个不可变的响应式 ref 对象。 默认不执行&#xff0c;在取值时执行&#xff0c;具有缓存功能&#xff0c;数据不变多次取值只触发一次取值计算。 import {reactive,effect,computed,} from "/node_…

蓝桥杯AT24C02问题记录

问题1&#xff1a;从这个图片上可以看出这两个在IIC的.c文件里延时时间不一样&#xff0c;第一张图使用了15个_nop_(); 12M晶振机器周期是 1/12M*121uS&#xff1b;nop()要延时1个指令周期。延时时间不对会对时序产生影响&#xff0c;时序不对&#xff0c;则AT24C02有没被使用…

大数据分析案例-基于随机森林算法构建电影票房预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

nginx 编译安装sticky时报错处理

一般企事业单位的内网按照部门划分网段&#xff0c;ip hash 的负载均衡策略容易导致负载失衡&#xff0c;比如某个网段地址多&#xff0c;一些网段地址少&#xff0c;IP hash是基于IPv4地址的前三段来区分的&#xff08;开发者可能觉得机器处理区分所有IP太累么&#xff1f;配置…

医院如何筛选安全合规的内外网文件交换系统?

医院内外网文件交换系统是专为医疗机构设计的&#xff0c;用于在内部网络&#xff08;内网&#xff09;和外部网络&#xff08;外网&#xff09;之间安全、高效地传输敏感医疗数据和文件的解决方案。这种系统对于保护患者隐私、遵守医疗数据保护法规以及确保医疗服务的连续性和…

牛客网-----------[NOIP2006]数列

题目描述 给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列&#xff0c;例如&#xff0c;当k3时&#xff0c;这个序列是&#xff1a; 1&#xff0c;3&#xff0c;4&#xff0c;9&#xff0c;10&#xff0c;12&#xff0c;13&…

LabVIEW机械臂轨迹跟踪控制

介绍了一个使用LabVIEW开发的机械臂轨迹跟踪控制系统。该系统的主要目标是实现对机械臂运动轨迹的精确控制&#xff0c;使其能够按照预定路径进行精确移动。此系统特别适用于需要高精度位置控制的场合&#xff0c;如自动化装配、精密操作等。 为了实现LabVIEW环境下的机械臂轨迹…

【大数据安全】大数据安全的挑战与对策基础设施安全

目录 一、大数据安全的挑战与对策 &#xff08;一&#xff09;数据加密技术 &#xff08;二&#xff09;大数据安全与隐私 &#xff08;三&#xff09;大数据安全保障体系 &#xff08;四&#xff09;华为大数据安全解决方案 二、基础设施安全 &#xff08;一&#xff0…

TCP/IP网络模型

大家好我是苏麟 , 今天聊聊TCP/IP四层网络模型 . 资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) 应用层 最上层的&#xff0c;也是我们能直接接触到的就是应用层&#xff08;Application Layer&#xff09;&#xff0c;我们电脑或手机使用的应用软件都…

Cloudera Manager 安装 Kafka 并简单使用

Kafka 简介 kafka 是一款分布式消息发布和订阅的系统&#xff0c;具有高性能和高吞吐率。 Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者规模的网站中的所有动作流数据。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理&#…