【STM32-MX_GPIO_Init分析】

MX_GPIO_Init分析源码如下:
在这里插入图片描述

__HAL_RCC_GPIOE_CLK_ENABLE源码如下:
在这里插入图片描述

#define RCC                 ((RCC_TypeDef *) RCC_BASE)
#define RCC_BASE              (AHB1PERIPH_BASE + 0x3800UL)
#define AHB1PERIPH_BASE       (PERIPH_BASE + 0x00020000UL)
#define PERIPH_BASE           0x40000000UL
// 可以看到最后RCC地址为	0x40000000UL + 0x00020000UL + 0x3800UL,即0x40023800

我们从数据手册的寄存器地址映射也可以看到RCC地址确实是0x40023800
在这里插入图片描述

RCC_TypeDef结构体描述如下:
在这里插入图片描述
我们查看参考文档
在这里插入图片描述
可以发现这里的寄存器是跟参考文档一样按照顺序排列,每个寄存器32位4字节。

在这里插入图片描述

其中RCC->AHB1ENR地址应该为0x40023800+0x30,而RCC_AHB1ENR_GPIOEEN0x1UL<<4U,即0x1<<4,在位4,通过查文档,可以看到GPIOEEN确实在位4。
在这里插入图片描述
这里SET_BIT为REG |= BIT,即*(0x40023800+0x30) |= (0x1<<4);,可以看到通过或运算将RCC->AHB1ENR寄存器的RCC_AHB1ENR_GPIOEEN位设置为1,而不影响其他位,即开启了对应寄存器的时钟功能;
这里READ_BIT为REG & BIT,即(0x40023800+0x30) & (0x1<<4);,可以看到通过与运算将RCC->AHB1ENR寄存器的RCC_AHB1ENR_GPIOEEN位读取出来,而不读取其他位,即读取对应寄存器的时钟开启状态功能;
在这里插入图片描述

UNUSED这里就做了强转,避免编译器提示变量未使用;
在这里插入图片描述

至此,MX_GPIO_Init函数分析完毕,即开启对应GPIO时钟,然后对GPIO做些初始化。最重要的在于通过或运算向寄存器指定位写入值,通过与运算读取寄存器指定位的值。

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

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

相关文章

Android Studio kotlin 转 Java

一. 随笔记录 java代码可以转化成kotlin代码&#xff0c;当然 Kotlin 反过来也可以转java 在Android Studio中 可以很方便的操作 AS 环境&#xff1a;Android Studio Iguana | 2023.2.1 二. 操作步骤 1.步骤 顶部Tools ----->Kotlin ------>Show Kotlin Bytecode 步…

springcloud+nocos从零开始

首先是去nacos官网下载最新的包&#xff1a;Nacos 快速开始 | Nacos win下启动命令&#xff1a;startup.cmd -m standalone 这样就可以访问你的nacos 了。 添加一个配置&#xff0c;记住你的 DataId,和Group名字。 创建一个pom项目&#xff0c;引入springCloud <?xml ve…

python中内存和磁盘交互样例

目录 一、内存交互 1.1 变量与数据结构 1.2 对象的创建和方法调用 1.3 操作内存中的数据 二、磁盘交互 2.1 文件读写 2.2 操作系统相关的文件操作 2.3 读写 JSON 文件 2.4 读写 CSV 文件 一、内存交互 内存交互&#xff1a;主要涉及变量、数据结构、对象的创建与操作…

05.13_111期_C++_红黑树

红黑树的性质 保证树中最长路径的长度不超过最短路径的长度的两倍 用什么方法保证上面这一点&#xff1f;将树中的结点视为是有颜色的 采用如下的规则&#xff1a; rule1: 树中的结点不是红色就是黑色 rule2: 树的根节点是黑色的 rule3: 如果一个结点是红色…

遇见问题-mysql8.0.28 this is incompatible with sql_mode=only_full_group_by

1.错误分析以及原因 1.1.sql_mode sql_mode 是数据库规范校验规则&#xff0c;比如这里的sql_modeonly_full_group_by 就是一个校验规则&#xff0c;会规定分组查询结果集不能有GROUP BY中没有出现的列。 1.2.问题原因 mysql 5.7.5 版本及以上版本会出现&#xff0c;mysql …

邦注科技 电解式超声波清洗机的原理介绍

电解式超声波去除模具表面油污锈迹的原理结合了电解和超声波技术的优势。 首先&#xff0c;电解作用是通过在特定的电解槽中&#xff0c;将模具作为阴极&#xff08;放入清洗框即可&#xff09;&#xff0c;并将有制式电极棒作为阳极。在电解过程中&#xff0c;电流如同魔法师…

Cache基本原理--以TC3xx为例(1)

目录 1.为什么要使用Cache 2.Memory与Cache如何映射 2.1 地址映射概设 3.小结 为什么要使用Cache&#xff1f;为什么在多核工程里要谨慎使用DCache&#xff1f;Cache里的数据、指令是如何与Memory映射&#xff1f; 灵魂三连后&#xff0c;软件工程师应该都会有模糊的回答&…

【虚拟仿真】Unity3D中实现对大疆无人机遥控器手柄按键响应

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群:398291828大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 最近项目中需要用到大疆无人机遥控器对程序中无人机进行控制,遥控器是下图这一款: 博主发…

微信小程序之九宫格抽奖

1.实现效果 2. 实现步骤 话不多说&#xff0c;直接上代码 /**index.wxml*/ <view class"table-list flex fcc fwrap"><block wx:for"{{tableList}}" wx:key"id"><view class"table-item btn fcc {{isTurnOver?:grayscale…

基于springboot+vue+Mysql的交流互动系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

java入门详细教程之集合的理解与应用

一、Collenction集合 数组和集合的区别 长度 数组的长度是不可变的,集合的长度是可变的 数据类型 数组可以存基本数据类型和引用数据类型 集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类 Collection 集合概述和使用 Collection集合概述​&#xff1a; 是单…

构建安全的GenAI/LLMs核心技术解密之大模型对抗攻击(二)

构建安全的GenAI/LLMs核心技术解密之大模型对抗攻击(二) LlaMA 3 系列博客 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (三) 基于 LlaMA …

Django接口卡死一直没有返回响应

当Django接口出现卡死且没有返回响应时&#xff0c;可能是由于多种原因导致的。以下是一些排查和解决问题的步骤&#xff1a; 查看日志&#xff1a; 首先检查Django的日志&#xff0c;看看是否有任何错误或异常被记录。这可以帮助你确定问题的根源。 检查数据库连接&#xff1…

【漏洞复现】泛微OA E-Cology GetLabelByModule SQL注入漏洞

漏洞描述&#xff1a; 泛微OA E-Cology是一款面向中大型组织的数字化办公产品&#xff0c;它基于全新的设计理念和管理思想&#xff0c;旨在为中大型组织创建一个全新的高效协同办公环境。泛微OA E-Cology getLabelByModule存在SQL注入漏洞&#xff0c;允许攻击者非法访问和操…

使用库进行Linux下串口收发通信(最简单没有之一)的记录

c-periphery 是一个小型 C 库,用于用户空间 Linux 中的 GPIO、LED、PWM、SPI、I2C、MMIO 和串行外设 I/O 接口访问。 c-periphery 简化并整合了原生 Linux API 到这些接口。 c-periphery 在嵌入式 Linux 环境(包括 Raspberry Pi、BeagleBone 等平台)中与外部外设连接非常有…

orangepi-5b 使用 rknn-toolkit2 实测

orangepi-5b 使用 rknn-toolkit2 实测 主机环境&#xff1a;ubuntu20.04 x86_64 开发板 orangepi-5b 4G ram 32G emmc 网站介绍 http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-5B.html 基于rk3588s 所以我们使用 rknn-toolkit2 st…

【SAP HANA 32】HANA中distinct和having去重比较

目录 1、DISTINCT 2、HAVING 3、性能对比 3.1、查询复杂度 3.2、查询优化 3.3、内存使用</

colab使用本地数据集微调llama3-8b模型

在Google的Colab上面采用unsloth,trl等库&#xff0c;训练数据集来自Google的云端硬盘&#xff0c;微调llama3-8b模型&#xff0c;进行推理验证模型的微调效果。 保存模型到Google的云端硬盘可以下载到本地供其它使用。 准备工作&#xff1a;将训练数据集上传到google的云端硬盘…

字典(dict)

1.概念 列表和元组的使用缺点&#xff1a;当存储的数据要动态添加、删除的时候&#xff0c;我们一般使用列表&#xff0c;但是列表有时会遇到一些麻烦 解决方案&#xff1a;既能存储多个数据&#xff0c;还能在访问元素的很方便的定位到需要的元素&#xff0c;采用字典 语法…

[数据集][目标检测]结直肠息肉内镜图像病变检测数据集13524张2类别

数据集共分为2个版本&#xff0c;即A版和B版&#xff0c;两个版本图片数一样&#xff0c;数据集图片不存在重叠文件名也不存在重复&#xff0c;可以合并训练&#xff0c;也可以单独训练。 下面是信息介绍&#xff1a; 结直肠息肉内镜图像病变检测数据集13524张2类别A版 数据…