ARM体系结构和接口技术(五)封装RCC和GPIO库

文章目录

  • 一、RCC
    • (一)思路
      • 1. 找到时钟基地址
      • 2. 找到总线的地址偏移
        • (1)AHB4总线
        • (2)定义不同GPIO组的使能宏函数
        • (3)APB1总线
        • (4)定义使能宏函数
  • 二、GPIO
    • (一)定义gpio_t类型结构体
      • 1. GPIOx_MODER寄存器
      • 2. GPIOx_OTYPER寄存器
      • 3. GPIOx_OSPEEDR寄存器
      • 4. GPIOx_PUPDR寄存器
      • 5. GPIOx_IDR寄存器
      • 6. GPIOx_ODR寄存器
      • 7. GPIOx_BSRR寄存器
    • (二)找到 GPIOx 的特殊功能控制寄存器的基地址
    • (三)定义引脚

一、RCC

(一)思路

1. 找到时钟基地址

在这里插入图片描述
找到RCC基地址
GPIOA~K均属于AHB4总线,
UART7~8,UART4~5,属于APB1总线
在这里插入图片描述

2. 找到总线的地址偏移

(1)AHB4总线

偏移地址为0xA28,因此AHB4设置寄存器地址为0x50000A28
在这里插入图片描述

#define RCC_MAP_AHB4ENSETR (*((volatile unsigned int *)0x50000A28));
(2)定义不同GPIO组的使能宏函数

在这里插入图片描述
写0没影响,写1使能时钟

#define __HAL_RCC_GPIOA_CLOCK_ENABLE() RCC_MAP_AHB4ENSETR=0x1<<0;
(3)APB1总线

偏移地址为0xA00,因此APB1总线设置时钟使能寄存器地址为0x50000A00
在这里插入图片描述

(4)定义使能宏函数

在这里插入图片描述

#define __HAL_RCC_UART4_CLOCK_ENABLE() RCC_MAP_APB1ENSETR=0x1<<16;

二、GPIO

(一)定义gpio_t类型结构体

用于设置GPIOx口的特殊功能寄存器的偏移地址是一块连续的空间,且各个寄存器大小均为四个字节,因此可以将其定义为一个结构体。

1. GPIOx_MODER寄存器

在这里插入图片描述

2. GPIOx_OTYPER寄存器

在这里插入图片描述

3. GPIOx_OSPEEDR寄存器

在这里插入图片描述

4. GPIOx_PUPDR寄存器

在这里插入图片描述

5. GPIOx_IDR寄存器

在这里插入图片描述

6. GPIOx_ODR寄存器

在这里插入图片描述

7. GPIOx_BSRR寄存器

在这里插入图片描述

//注意,顺序不能颠倒
typedef struct
{unsigned int moder;unsigned int typer;unsigned int speedr;unsigned int pupdr;unsigned int idr;unsigned int odr;unsigned int bsrr;
}gpio_t;
  • 注:结构体尽量传地址,因为指针只占4个字节,但是结构体很大的话,传结构体需要占用较大空间

(二)找到 GPIOx 的特殊功能控制寄存器的基地址

在这里插入图片描述

//其他GPIO组的定义类似
#define GPIOA ((gpio_t *)0x50002000)

(三)定义引脚

使用一个16bit的数据,每一位代表一个引脚

//GPIO引脚的定义
#define PIN_0 0x0001
#define PIN_1 0x0002
#define PIN_2 0x0004
#define PIN_3 0x0008
#define PIN_4 0x0010
#define PIN_5 0x0020
#define PIN_6 0x0040
#define PIN_7 0x0080
#define PIN_8 0x0100
#define PIN_9 0x0200
#define PIN_10 0x0400
#define PIN_11 0x0800
#define PIN_12 0x1000
#define PIN_13 0x2000
#define PIN_14 0x4000
#define PIN_15 0x8000

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

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

相关文章

基于Java的汽车租赁管理系统设计(含文档、源码)

本篇文章论述的是基于Java的汽车租赁管理系统设计的详情介绍&#xff0c;如果对您有帮助的话&#xff0c;还请关注一下哦&#xff0c;如果有资源方面的需要可以联系我。 目录 摘 要 系统运行截图 系统总体设计 系统论文 资源下载 摘 要 近年来&#xff0c;随着改革开放…

React遍历tree结构,获取所有的id,切换自动展开对应层级

我们在做一个效果的时候&#xff0c;经常可能要设置默认展开多少的数据 1、页面效果&#xff0c;切换右侧可以下拉可切换展开的数据层级&#xff0c;仅展开两级等 2、树形的数据

C语言中常见库函数(1)——字符函数和字符串函数

文章目录 前言1.字符分类函数2.字符转换函数3.strlen的使用和模拟实现4.strcpy的使用和模拟实现5.strcat的使用和模拟实现6.strncmp的使用和模拟实现7.strncpy函数的使用8.strncat函数的使用9.strncmp函数的使用10.strstr的使用和模拟实现11.strtok函数的使用12.strerror函数的…

【文献阅读】Social Bot Detection Based on Window Strategy

Abstract 机器人发帖的目的是在不同时期宣传不同的内容&#xff0c;其发帖经常会出现异常的兴趣变化、而人类发帖的目的是表达兴趣爱好和日常生活&#xff0c;其兴趣变化相对稳定。提出了一种基于窗口策略&#xff08;BotWindow Strategy&#xff09;的社交机器人检测模型基于…

深入了解MySQL文件排序

数据准备 CREATE TABLE user_info (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT ID,name varchar(20) NOT NULL COMMENT 用户名,age tinyint(4) NOT NULL DEFAULT 0 COMMENT 年龄,sex tinyint(2) NOT NULL DEFAULT 0 COMMENT 状态 0&#xff1a;男 1&#xff1a; 女,creat…

R语言实现对模型的参数优化与评价KS曲线、ROC曲线、深度学习模型训练、交叉验证、网格搜索

目录 一、模型性能评估 1、数据预测评估 2、概率预测评估 二、模型参数优化 1、训练集、验证集、测试集的引入 2、k折线交叉验证 2、网格搜索 一、模型性能评估 1、数据预测评估 ### 数据预测评估 #### 加载包&#xff0c;不存在就进行在线下载后加载if(!require(mlben…

NFS存储、API资源对象StorageClass、Ceph存储-搭建ceph集群和Ceph存储-在k8s里使用ceph(2024-07-16)

一、NFS存储 注意&#xff1a;在做本章节示例时&#xff0c;需要拿单独一台机器来部署NFS&#xff0c;具体步骤略。NFS作为常用的网络文件系统&#xff0c;在多机之间共享文件的场景下用途广泛&#xff0c;毕竟NFS配置方 便&#xff0c;而且稳定可靠。NFS同样也有一些缺点&…

《Towards Black-Box Membership Inference Attack for Diffusion Models》论文笔记

《Towards Black-Box Membership Inference Attack for Diffusion Models》 Abstract 识别艺术品是否用于训练扩散模型的挑战&#xff0c;重点是人工智能生成的艺术品中的成员推断攻击——copyright protection不需要访问内部模型组件的新型黑盒攻击方法展示了在评估 DALL-E …

昇思25天训练营Day18 - 基于MobileNetv2的垃圾分类

基于MobileNetv2的垃圾分类 本文档主要介绍垃圾分类代码开发的方法。通过读取本地图像数据作为输入&#xff0c;对图像中的垃圾物体进行检测&#xff0c;并且将检测结果图片保存到文件中。 1、实验目的 了解熟悉垃圾分类应用代码的编写&#xff08;Python语言&#xff09;&a…

[MySQL][复核查询][多表查询][自连接][自查询]详细讲解

目录 1.铺垫&基本查询回顾1.多表查询1.何为笛卡尔积&#xff1f;2.示例 2.自连接1.何为自连接&#xff1f;2.示例 3.子查询1.何为子查询&#xff1f;2.单行子查询3.多行子查询4.多列子查询5.在from子句中使用子查询6.合并查询 1.铺垫&基本查询回顾 前面讲解的MYSQL表的…

【深度学习入门篇 ⑨】循环神经网络实战

【&#x1f34a;易编橙&#xff1a;一个帮助编程小伙伴少走弯路的终身成长社群&#x1f34a;】 大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; ) &#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

运算符的使用

一、运算符介绍 运算符是一种特殊的符号&#xff0c;用以表示数据的运算、赋值和比较等 算术运算符赋值运算符比较运算符逻辑运算符位运算符 二、算术运算符 1、算术运算符是对数值类型的变量进行运算的&#xff0c;在程序中使用的非常多 2、算术运算符的使用 # 算术运算符…

Learning vtkjs之vtkSource

vtkSource的主要类型 Cone 锥体Circle 圆形Arrow 箭头ConcentricCylinder 同心圆Cube 方形Cursor3D 包围盒Cylinder 圆柱体Line 线Plane 平面Point 点Sphere 球不能调整center的source 目前整理的有下面几种source&#xff0c;对应有点类似threejs的mesh&#xff0c;通过一定的…

【.NET全栈】ASP.NET开发Web应用——站点导航技术

文章目录 前言一、站点地图1、定义站点地图文件2、使用SiteMapPath控件3、SiteMap类4、URL地址映射 二、TreeView控件1、使用TreeView控件2、以编程的方式添加节点3、使用TreeView控件导航4、绑定到XML文件5、按需加载节点6、带复选框的TreeView控件 三、Menu控件1、使用Menu控…

C语言指针超详解——进阶篇

C语言指针系列文章目录 入门篇 强化篇 进阶篇 文章目录 C语言指针系列文章目录1. 字符指针变量2. 数组指针变量2. 1 概念2. 2 数组指针变量的初始化 3. 二维数组传参的本质4. 函数指针变量4. 1 函数指针变量的创建4. 2 指针变量的使用4. 3 两个有趣的代码4. 3. 1 代码一4. 3. …

c++初阶知识——内存管理与c语言内存管理对比

目录 前言&#xff1a; 1.c&#xff0b;&#xff0b;内存管理方式 1.1 new和delete操作自定义类型 2.operator new与operator delete函数 2.1 operator new与operator delete函数 3.new和delete的实现原理 3.1 内置类型 3.2 自定义类型 new的原理 delete的原理 new…

完整教程 linux下安装百度网盘以及相关依赖库,安装完成之后启动没反应 或者 报错

完整教程 linux下安装百度网盘以及相关依赖库&#xff0c;安装完成之后启动没反应 或者 报错。 配置国内镜像源&#xff1a; yum -y install wget mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak wget -O /etc/yum.repos.d/CentOS-Base.repo ht…

数据库端口LookUp功能:从数据库中获取并添加数据到XML

本文将为大家介绍如何使用知行之桥EDI系统数据库端口的Lookup功能&#xff0c;从数据库中获取数据&#xff0c;并添加进输入的XML中。 使用场景&#xff1a;期待以输入xml中的值为判断条件从数据库中获取数据&#xff0c;并添加进输入xml中。 例如&#xff1a;接收到包含采购…

pyqt/pyside QTableWidget失去焦点后,选中的行仍高亮的显示

正常情况下pyqt/pyside的QTableWidget&#xff0c;点击input或者按钮失去焦点后 行的颜色消失了 如何在失去焦点时保持行的选中颜色&#xff0c;增加下面的代码&#xff1a; # 获取当前表格部件的调色板 p tableWidget.palette()# 获取活跃状态下的高亮颜色和高亮文本颜色&a…

AWS-S3实现Minio分片上传、断点续传、秒传、分片下载、暂停下载

文章目录 前言一、功能展示上传功能点下载功能点效果展示 二、思路流程上传流程下载流程 三、代码示例四、疑问 前言 Amazon Simple Storage Service&#xff08;S3&#xff09;&#xff0c;简单存储服务&#xff0c;是一个公开的云存储服务。Web应用程序开发人员可以使用它存…