STM32学习和实践笔记(4): 分析和理解GPIO_InitTypeDef GPIO_InitStructure (b)
继续上篇博文:STM32学习和实践笔记(4): 分析和理解GPIO_InitTypeDef GPIO_InitStructure (a)-CSDN博客
往下写,
为什么:当GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0 ; 时,其实就是将对应的该引脚的寄存器地址给了GPIO_InitStructure.GPIO_Pin,这就表示,选中了GPIO_Pin_0来操作!
其实我还是没有真正搞清楚的。
根据:
#define GPIO_Pin_0 ((uint16_t)0x0001) /*!< Pin 0 selected */
那么该语句实际就是:GPIO_InitStructure.GPIO_Pin=((uint16_t)0x0001) ;
为什么把这个数给到这个结构体的成员就是选中了Pin0?
在库函数底层,应该还是封装了一些东西,我没有看到。
在前面不使用库函数而直接操作寄存器的方式,我是理解的。其过程如下:
首先,STM32的全部memory mapping如下图所示:


1个1024为1K,
1024*1024=1M
1024*1024*1024=1G
一共有2的32次方个地址。2的32次方=4,294,967,296,它连续除3次1024就正好=4,也就是有4GB的地址。4*1024=4096 M,把这4GB空间分成8块,也就是每块是512M。
这4GB地址,把所有的存储器和控制寄存器全部包括了进去。
所以,如果想操作某一个寄存器来控制某个引脚或者别的功能,先一步就是找到该寄存器的地址,然后就操作这个地址内的数据,这个地址内的数据变化了,相应的功能也就实现了。
比如,如果我需要选中GPIOC的第一个引脚并对其输入输出模式进行配置,那么,我需要做的就是找到控制GPIOC的第一个引脚寄存器的地址,然后对这个地址内的数值进行修改,也就达到了目的。
选中GPIO某个引脚并对其输入输出模式进行配置的寄存器是这两个:



这里的偏移地址,是指在选中相应的端口的基地址之后,再偏移多少,才能选中这个寄存器。
各端品的基地址可以从这里看到:

以操作GPIOC的引脚为例,地址偏移是这样设定的:


以上还是很容易理解。
相关文章:
STM32学习和实践笔记(4): 分析和理解GPIO_InitTypeDef GPIO_InitStructure (b)
继续上篇博文:STM32学习和实践笔记(4): 分析和理解GPIO_InitTypeDef GPIO_InitStructure (a)-CSDN博客 往下写, 为什么:当GPIO_InitStructure.GPIO_PinGPIO_Pin_0 ; 时,其实就是将对应的该引脚的寄存器地…...
数据仓库——事实表
数据仓库基础笔记思维导图已经整理完毕,完整连接为: 数据仓库基础知识笔记思维导图 事实表 事务事实表 事务事实表用于跟踪事件,通过存储事实和与之关联的维度细节,允许单独或聚集地研究行为。粒度稀疏性包含可加事实 无事实的…...
人工智能常用的编程语言有哪些?
人工智能常用的编程语言包括Python、Java、C、R、Lisp和Prolog等。具体选择取决于项目需求、技术背景和性能要求。 Python是AI领域的明星语言,由于其简洁易懂的语法、丰富的库支持以及庞大的社区资源,适用于机器学习、深度学习和自然语言处理等领域。 …...
【Leetcode每日一题】模拟 - 提莫攻击(难度⭐)(45)
1. 题目解析 题目链接:495. 提莫攻击 2.算法原理 一、分情况讨论 要计算中毒的总时长,我们需要考虑时间点之间的差值,并根据这些差值来确定中毒的实际持续时间。 情况一:差值大于等于中毒时间 假设你的角色在时间点A中毒&#…...
OPPO云VPC网络实践
1 OPPO 云网络现状 随着OPPO业务的快速发展,OPPO云规模增长迅速。大规模虚拟实例的弹性伸缩、低延时需求对网络提出了诸多挑战。原有基于VLAN搭建的私有网络无法解决这些问题,给网络运维和业务的快速上线带来了挑战。 梳理存在的主要问题如下…...
力扣(数组)找到所有数组中消失的数字
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。 示例 1: 输入:nums [4,3,2,7,8,2,3,1] 输出:[5,6]示例 2&am…...
每日面经分享(Spring Boot: part3 Service层)
SpringBoot Service层的作用 a. 封装业务逻辑:Service层负责封装应用程序的业务逻辑。Service层是控制器(Controller)和数据访问对象(DAO)之间的中间层,负责处理业务规则和业务流程。通过将业务逻辑封装在S…...
k8s的pod访问service的方式
背景 在k8s中容器访问某个service服务时有两种方式,一种是把每个要访问的service的ip注入到客户端pod的环境变量中,另一种是客户端pod先通过DNS服务器查找对应service的ip地址,然后在通过这个service ip地址访问对应的service服务 pod客户端…...
shell脚本发布docker-nginx vue2 项目示例
docker、git、node.js安装略过。 使git pull或者git push不需要输入密码操作方法 nginx安装在docker容器里面,参见:https://blog.csdn.net/HSJ0170/article/details/128631155 姊妹篇(宿主机nginx,非docker-nginx)&am…...
【THM】Nmap Basic Port Scans(基本端口扫描)-初级渗透测试
介绍 本房间是Nmap系列的第二个房间(网络安全简介模块的一部分)。 1.Nmap实时主机发现 2.Nmap基本端口扫描 3.Nmap高级端口扫描 4.Nmap后端口扫描 在之前的房间里,我们专注于发现在线系统。到目前为止,我们已经介绍了Nmap扫描的三个步骤: 枚举目标发现活动主机反向-…...
Groovy结合Java在生产中的落地实战
Groovy简介 Groovy是用于Java虚拟机的一种敏捷的动态语言,是一种成熟的面向对象编程语言,又是一种纯粹的脚本语言。Groovy运行在JVM环境上,在语法上兼具java 语言和脚本语言特点,大大简化了语法。同时又具有闭包和动态语言中的其…...
达梦数据库 创建外部表 [-7082]:外部表数据错误.
1:定义 外部表,是指不存在于数据库中的表。通过向达梦提供描述外部表的元数据,可以把一 个操作系统文件当成一个只读的数据库表,就像这些数据存储在一个普通数据库表中一样来 进行访问。 外部表的数据存储在操作系统中࿰…...
XUbuntu22.04之激活Linux最新Typora版本(二百二十五)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...
JavaScript简介
目录 概要: 说明: 学习JS的原因: JS可以干什么: 了解JavaScript: 前言: JavaScript的历史: JavaScript与ECMAScript: 如何运行JavaScript以及JavaScrip的特点: …...
使用PaddleX实现的智慧农业病虫检测项目
目录 1. 数据集解压 2.检查数据集的图片是否均可读取 3. 查看数据集的类别信息...
算法学习——LeetCode力扣图论篇1(797. 所有可能的路径、200. 岛屿数量、695. 岛屿的最大面积)
算法学习——LeetCode力扣图论篇1 797. 所有可能的路径 797. 所有可能的路径 - 力扣(LeetCode) 描述 给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特…...
【IP组播】PIM-SM的RP、RPF校验
目录 一:PIM-SM的RP 原理概述 实验目的 实验内容 实验拓扑 1.基本配置 2.配置IGP 3.配置PIM-SM和静态RP 4.配置动态RP 5.配置Anycast RP 二: RPF校验 原理概述 实验目的 实验内容 实验拓扑 1.基本配置 2.配置IGP 3.配置PIM-DM 4.RPF校…...
前端代码规范-命名规范
命名规则 camelCase(小驼峰式命名法 —— 首字母小写)PascalCase(大驼峰式命名法 —— 首字母大写)kebab-case(短横线连接式)Snake(下划线连接式) 项目名称 项目名 全部采用小写方…...
移动端APP测试常见面试题精析
现在面试测试职位,要求非常全面,那么APP测试一般需要哪些技术呢?下面总结了APP测试常见面试题: 1.Android四大组件? Activity:描述UI,并且处理用户与机器屏幕的交互。应用程序中,一个Activity就相当于手…...
报错[Vue warn]: $listeners is readonly. $attrs is readonly.怎么解决?
代码也没有逻辑错误,但是报错 [Vue warn]: $listeners is readonly. $attrs is readonly. 情况1:多处声明了new Vue,解决方案:删除一个,用全局变量引用同一个Vue 情况2:import Vue from Vue;第二个Vue首字…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...
五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...
Python爬虫实战:研究Restkit库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...
