《嵌入式系统》知识总结8:寄存器编程方式操纵GPIO

news2024/12/23 10:35:14

方式1:

查手册找到相关寄存器的地址,自行编写代码,定义指针指向该地址,并根据需要进行寄存器读写。

举例:

//方式1举例:自定义GPIOB_ODR寄存器
#define GPIOB_ODR (*(volatile unsigned int *)0x40010C0C)//定义寄存器GPIOB_ODR,

 GPIOB_ODR &= ~(1uL<<5);//PB5输出低电平,
 GPIOB_ODR |= (1uL<<5);//PB5输出高电平。

方式2:

利用厂商写好的宏定义,根据手册中寄存器的命名读写相关寄存器。

具体说明:

由 K e i l M D K 自 动 产 生 的s t m 3 2 f 1 0 x . h 文 件 中 以 宏 定 义 方 式 定 义 了STM32F103ZET6微控制器的各种片内外设的寄存器结构体指针,可以直接使用。

stm32f10x.h定义的GPIO基地址

#define PERIPH_BASE ((uint32_t)0x40000000)
...
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
...
#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)

定义基地址后,每组端口被定义为指向这个基地址的结构类型指针

#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)

 stm32f10x_gpio.h定义的GPIO结构类型

每组端口具有7个寄存器
依次作为结构成员
定义结构体变量(指针)
通过结构成员访问寄存器

#define __IO volatile

/* 定义 */
typedef struct
{ __IO uint32_t CRL;
__IO uint32_t CRH;
__IO uint32_t IDR;
__IO uint32_t ODR;
__IO uint32_t BSRR;
__IO uint32_t BRR;
__IO uint32_t LCKR;
} GPIO_TypeDef;

/* 使用 */
GPIO_TypeDef GPIOx;
GPIOx.CRL = 0;
GPIO_TypeDef * GPIOx;
GPIOx->CRL = 0;

直接对配置寄存器编程

GPIO初始化(GPIO_Init函数的功能)
就是写入配置寄存器CRL(CRH)
GPIOB->CRL = 0x44444443;
PB0引脚50MHz通用推挽输出模式,对应4位为0011(0x3)
其他引脚保持默认的浮空输入模式,对应4位为0100(0x4)

PB0引脚为低、复位、逻辑0:

GPIOB->ODR &= ~(0x1);
PB0引脚为高、置位、逻辑1:
GPIOB->ODR |= (0x1);

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

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

相关文章

Vivado时序约束基础

今天这篇博客&#xff0c;笔者向大家简单介绍Xilinx FPGA中的Vivado时序约束基础知识&#xff0c;也为后续的学习打好铺垫。 Xilinx Design Constraints (XDC) 概述 • XDC 在本质上就是Tcl 语言&#xff0c;但其仅支持基本的Tcl 语法&#xff0c;如变量、列表和运算符等等&a…

Go 语言基础

文章目录 Go 语言基础1. 程序基础2. 数据类型3. 字符串与复合数据类型4. 函数、方法、接口和反射5. 并发编程&#xff08;核心重点&#xff09;6. 包和代码测试7. 综合实战案例框架部分探索深度 Go 语言基础 1. 程序基础 了解常量和遍历【const var 关键词】 : 初始化以及赋值…

微服务如何治理

微服务远程调用可能有如下问题&#xff1a; 注册中心宕机&#xff1b; 服务提供者B有节点宕机&#xff1b; 服务消费者A和注册中心之间的网络不通&#xff1b; 服务提供者B和注册中心之间的网络不通&#xff1b; 服务消费者A和服务提供者B之间的网络不通&#xff1b; 服务提供者…

Redux And Redux Toolkit

笔记介绍了react_redux和redux_toolkit react_redux只介绍了原理图&#xff0c;为理解redux_toolkit做铺垫。 本笔记是对一下课程做的输出&#xff0c;若大家有不理解的地方&#xff0c;可看完课程后&#xff0c;再借助课程理解笔记内容&#xff0c;同时也鼓励大家对自己的听…

【环境搭建】40系一些奇奇怪怪的环境问题

【设备信息】我的设备是4070ti&#xff0c;支持cuda12.0,但是目前用的还是11.7 1&#xff09;fatal error: cusparse.h: No such file or directory 因为cuda版本和改名的原因&#xff0c;这个在cuda版本中比较有效的解决办法是&#xff1a; sudo apt search libcusparse得到…

matplotlib实操

matplotlib实操 问题1.分析离网用户的基本特征:包括但不限于地市、年龄、网龄、融合类型、套餐分布、用户价值等&#xff0c;年龄、网龄、用户价值(ARPU)、MOU、DOU;数据预处理处理异常值地市分布县级分布年龄分布网龄分布性别与年龄分布融合类型套餐分布用户价值(ARPU)MOU(每用…

vulnhub靶场之hackme2-DCHP

Burp联动xray 1.信息收集 探测存活主机&#xff0c;输入&#xff1a;netdiscover -r 192.168.239.0/24 &#xff0c;发现192.168.239.179存活。 对目标主机192.168.239.179进行端口扫描&#xff0c;发现存活22、80端口。 在浏览器上输入&#xff1a;http://192.168.239.179&a…

axios解决跨域问题

Vue3中使用axios访问聚合的天气API&#xff0c;出现跨域问题&#xff0c;需要在前端进行一些配置&#xff1a; 首先是修改vue.config.js&#xff1a; const { defineConfig } require(vue/cli-service) module.exports defineConfig({transpileDependencies: true,devServe…

vue2.0基础

文章目录 VUEVue2.0vue特点事件处理键盘事件计算属性监听watch深度监视绑定class样式条件渲染列表渲染列表过滤列表排序Vue.set()的使用Vue检测数组的原理Vue监测原理总结指令生命周期Vue componentVue配置文件vue.config.JS其他&#xff1a;组件自定义事件组件自定义事件解绑全…

【Mysql数据库从0到1】-入门基础篇--用户与权限管理

【Mysql数据库从0到1】-入门基础篇--用户与权限管理 &#x1f53b;一、Mysql 用户管理1.1 &#x1f343; Mysql服务器登录1.2 &#x1f343; 用户创建1.3 &#x1f343; 用户修改1.4 &#x1f343; 用户删除1.5 &#x1f343; 用户密码修改1.6 &#x1f343; 用户密码管理 &…

深入浅出C语言—【函数】上

目录 1.函数的概念 2.C语言函数的分类 2.1 库函数 2.1.1 strcpy库函数举例学习方式 2.1.2 库函数扩展知识 2.2 自定义函数 2.2.1求两个整数中的较大值 3. 函数的参数 3.1 实际参数&#xff08;实参&#xff09; 3.2 形式参数&#xff08;形参&#xff09; 4. 函数的…

Linux安全之账户安全

账户安全 Linux用户账户概述&#xff1a; 用户账号 超级用户root系统用户普通用户组账号 基本组&#xff08;私有组----每一个私有组里面只有一个用户&#xff09;附加组&#xff08;公共组----每一个用户都可以加入到这个组里面&#xff09; UID和GID&#xff1a; UID&…

【minio】Ubuntu安装MinIO文件服务器并通过C++上传下载

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍MinIO的使用。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习知识&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&…

pandas速学-DataFrame

一、理解DataFrame 他是一个表格结构&#xff1a;DataFrame 是一个表格型的数据结构 他是有序的&#xff0c;不同值类型&#xff1a;它含有一组有序的列&#xff0c;每列可以是不同的值类型&#xff08;数值、字符串、布尔型值&#xff09;。 他可以被看做一个由series组成的…

chatgpt赋能python:PythonIP匹配

Python IP匹配 随着互联网的不断发展&#xff0c;IP地址已成为人们最常使用的一种网络标识。在网络分析和开发中&#xff0c;经常会用到IP地址的相关操作&#xff0c;如IP地址的匹配。Python作为一种性能比较好的语言&#xff0c;也可以很好地完成IP地址的匹配工作。本文将介绍…

【学习日记2023.6.4】之 Linux入门

1. Linux简介 1.1 主流操作系统 不同领域的主流操作系统&#xff0c;主要分为以下这么几类&#xff1a; 桌面操作系统、服务器操作系统、移动设备操作系统、嵌入式操作系统。接下来&#xff0c;这几个领域中&#xff0c;代表性的操作系统是那些? 1). 桌面操作系统 操作系统特…

数据链路层:虚拟局域网(VLAN)

数据链路层&#xff1a;虚拟局域网&#xff08;VLAN&#xff09; 笔记来源&#xff1a; 湖科大教书匠&#xff1a;虚拟局域网&#xff08;VLAN&#xff09;概述 湖科大教书匠&#xff1a;虚拟局域网&#xff08;VLAN&#xff09;实现机制 声明&#xff1a;该学习笔记来自湖科大…

mybatis源码学习之mybatis执行流程分析

Mybatis执行流程分析 mybatis全局配置文件 mybatis全局配置文件中涉及的标签如下图所示 配置文件解析 public static void main(String[] args) throws IOException {// 读取配置文件InputStream is Resources.getResourceAsStream("org/apache/ibatis/builder/Mappe…

K8S部署Hadoop集群(七)

Hadoop是Apache软件基金会下一个开源分布式计算平台&#xff0c;以HDFS&#xff08;Hadoop Distributed File System&#xff09;、MapReduce&#xff08;Hadoop2.0加入了YARN&#xff0c;Yarn是资源调度框架&#xff0c;能够细粒度的管理和调度任务&#xff0c;还能够支持其他…

UnityVR--EventManager--事件中心3

前期准备 接上一篇&#xff0c;来实现事件中心的管理&#xff1a;使用定义好的事件中心管理器EventManager&#xff0c;实现鼠标拖拽、角色移动、发射子弹等几个功能。 1. InputSystem的准备&#xff1a;需要设置输入设备并关联事件&#xff0c;比如监听键盘输入"WASD&quo…