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://www.mzph.cn/bicheng/47701.shtml

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

相关文章

捷配笔记-混合信号PCB布局设计的基本准则是什么?

混合信号PCB设计需要对模拟和数字电路有基本的了解&#xff0c;以最大限度地减少&#xff08;如果不能防止的话&#xff09;信号干扰。现代系统由数字域和模拟域均可操作的组件组成&#xff0c;这些组件必须经过精心设计&#xff0c;以确保整个系统的信号完整性。 在混合信号系…

MySQL学习记录 —— 이십이 MySQL服务器文件系统(2)

文章目录 1、日志文件的整体简介2、一般、慢查询日志1、一般查询日志2、慢查询日志FILE格式TABLE格式 3、错误日志4、二进制日志5、日志维护 1、日志文件的整体简介 中继服务器的数据来源于集群中的主服务。每次做一些操作时&#xff0c;把操作保存到重做日志&#xff0c;这样崩…

vscode+wsl2+anaconda环境的配置与使用

目录 下载anaconda Anaconda使用参考 vscodeubuntuanaconda 先用vscode连接本地ubuntu。 如果没有安装wsl2与ubuntu&#xff0c;可点击下面的链接。 问题&#xff1a;wsl install 无法解析服务器 成功记录&#xff1a; 在vscode终端用ubuntu安装anaconda。 创建pytho…

Spring如何管理Mapper

目录 一、背景二、猜测三、源码查看步骤1、创建MapperScannerConfigurer.java2、MapperScan注解3、MapperScannerRegistrar执行registerBeanDefinitions方法4、MapperScannerConfigurer执行postProcessBeanDefinitionRegistry方法5、执行doscan6、设置beanClass7、使用jdk生成代…

万界星空科技电线电缆MES系统实现线缆全流程追溯

MES系统通过高度集成的数据平台&#xff0c;对电线电缆的生产全过程进行实时监控与记录&#xff0c;从原材料入库开始&#xff0c;到生产过程中的各个关键控制点&#xff0c;再到成品出库&#xff0c;每一步操作都被详细记录并可追溯。这种全流程追溯能力主要体现在以下几个方面…

在组件中显示tuku的照片

一、问题 &#xff08;1&#xff09;错误&#xff1a;域名前面一定要加http://要不然会报错 &#xff08;2&#xff09;在使用 defineModel传值时一定要动态绑定&#xff0c;要不然图片不显示 &#xff08;3&#xff09;改完后在商品列表中显示图片信息必须 在显示的图片中取…

【Qt】QWidget在隐藏时,发送信号

1. 介绍 Qt中&#xff0c;QWidget隐藏时&#xff0c;默认不发送信号。需要重写hideEvent()函数实现。 2. 代码 #include <QWidget> class MyWidget : public QWidget {Q_OBJECT signals:void hiddenStateChanged(bool isHidden);protected:void hideEvent(QHideEvent*…

【代码随想录】【算法训练营】【第69天】总结篇

前言 day 69&#xff0c;训练营的最后一个周一~ 总结 收获 历时近70天的训练营&#xff0c;打卡上百道题目&#xff0c;对于数组、链表、指针等的使用更加熟练了&#xff0c;也对dfs、bfs、动态规划有所熟悉&#xff08;当然前提是我得发现题目是该解法&#xff09;……代码…

js | this 指向问题

https://juejin.cn/post/6844904083707396109 任何函数运行的时候&#xff0c;都会创建一个context对象&#xff0c;context对象有一个this对象&#xff0c;在运行的时候决定。任何函数都对应一个reference类结构体&#xff08;具体叫啥有点忘了&#xff09;&#xff0c;简单就…

Linux入门笔记(指令)

操作系统是什么&#xff1f; 操作系统是一款做软硬件管理的软件。计算机系统自下而上可以大致分为4部分&#xff1a;硬件、操作系统、应用程序和用户。操作系统管理各种计算机硬件&#xff0c;为应用程序提供基础&#xff0c;并且充当计算机硬件与用户之间的中介。重点&#x…

Mybatis——生命周期和作用域

理解不同作用域和生命周期类别是至关重要的&#xff0c;因为错误的使用会导致非常严重的并发问题。 SqlSessionFactoryBuilder&#xff1a; 一旦创建了 SqlSessionFactory&#xff0c;就不再需要它了。 局部方法变量 SqlSessionFactory&#xff1a; 可以想象为&…

WebGIS面试题(第八期)

WebGIS面试题&#xff08;第八期&#xff09; 因为这些题目都是之前面试通过记忆面试结束后记录、部分通过录音。目前我还在整理&#xff0c;当然有一部分也是我在做项目中出现的问题&#xff0c;今天就先整理一点&#xff08;偷懒&#xff09;&#xff0c;因为有些答案还需要…

力扣145题:二叉树的后序遍历

给你一棵二叉树的根节点 root &#xff0c;返回其节点值的 后序遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[3,2,1]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root [1] 输出…

C++复习的长文指南

C复习的长文指南 一、入门语法知识1.预备1.1 main函数1.2 注释1.3 变量1.3 常量1.4 关键字1.5 标识符明明规则 2. 数据类型2.1 整型2.1.1 sizeof关键字 2.2 实型&#xff08;浮点型&#xff09;2.3 字符型2.4 转义字符2.5 字符串型2.6 布尔类型bool2.7 数据的输入 3. 运算符3.1…

C语言 default 踩坑

void fun(char c) {switch(c){case b :cout << "ttt" << endl;break;defualt:cout << "test" <<endl;} }这段代码中&#xff0c;理论上来说&#xff0c;当cb’时应该打印 “ttt”&#xff0c;否则&#xff0c;应该打印 “test”。…

WHAT - 介绍一个不太一样的 UI 组件库 shadcn/ui

目录 一、介绍主要特点核心组件示例代码社区和支持总结 二、copy/paste1. 高度可定制性2. 避免依赖锁定3. 学习和理解4. 简化调试5. 项目需求变化 官方文档&#xff1a;https://ui.shadcn.com/docs 一、介绍 ShadCN (ShadCN/UI) 是一个现代的 React 组件库&#xff0c;旨在提…

SwiftUI 6.0(Xcode 16)新 PreviewModifier 协议让预览调试如虎添翼

概览 用 SwiftUI 框架开发过应用的小伙伴们都知道&#xff0c;SwiftUI 中的视图由各种属性和绑定“扑朔迷离”的缠绕在一起&#xff0c;自成体系。 想要在 Xcode 预览中泰然处之的调试 SwiftUI 视图有时并不是件容易的事。其中&#xff0c;最让人秃头码农们头疼的恐怕就要数如…

对redis进行深入学习

目录 1. 什么是redis&#xff1f;1.1 为什么使用redis作为缓存&#xff1f;1.1.0 数据库&#xff08;MySQL&#xff09;与 redis1. 存储介质不同&#xff08;408选手应该都懂hh&#xff09;2. 数据结构优化3. I/O模型差异4. CPU缓存友好性5. 单线程与多线程差异6. 持久化与缓存…

Postcat使用全解析

文章目录 引言官网链接Postcat原理概述基础使用安装与启动创建与发送请求环境变量 高级使用集合与预请求脚本代码生成器 优缺点分析优点缺点 结论 引言 Postcat&#xff0c;作为一款功能丰富的API开发与测试工具&#xff0c;受到了广大开发者的喜爱。它提供了直观的用户界面和…

C语言 二叉树,一个猜动物的小游戏

1. 此项目用到的知识点: 二叉树&#xff0c; struct&#xff0c; 文件读写。 2. 其中最复杂的地方是&#xff1a;复制一个指针的内容&#xff0c;参考&#xff1a;https://stackoverflow.com/questions/39938648/copy-one-pointer-content-to-another 1. 头文件 "node_ut…