STM32的位操作(相当于51单片机的sbit)

news2024/11/24 3:00:23

经过一段时间的学习,今天发现STM32的单个端口都有一个32位的地址,这样就可以把这个地址给找出来,进行单个位的操作了,这也没有什么好说的,直接复制粘贴就好了,用到的时候过来复制直接使用就行了。虽然看着挺多的起始最后就是得到一个地址而已:

#define GPIOA_ODR_Addr       (GPIOA_BASE + 0x0C)    //想用哪个GPIO就改成ABCDEF,可以是ODR也可以是IDR
#define PAout(n)              *(unsigned int*)((GPIOA_ODR_Addr & 0xf0000000) + 0x02000000 + ((GPIOA_ODR_Addr & 0x00ffffff) << 5) + (n << 2))
// PAout(n)  这个n就代表这个位

上面这个代码是写到头文件里面的,使用的时候就是直接使用PAout(n)就好了,n写几就是第几个端口这个单独的位,0x0c是ODR寄存器的偏移地址。我还总结了一个图:

为此我特意封装了一个函数:

这上面是输出寄存器的写法,输入寄存器也是一样的写法:

#ifndef __KEY_H
#define __KEY_H


#define GPIOA_IDR_Addr       (GPIOA_BASE + 0x08)    //想用哪个GPIO就改成ABCDEF,可以是ODR也可以是IDR
#define PAin(n)              *(unsigned int*)((GPIOA_IDR_Addr & 0xf0000000) + 0x02000000 + ((GPIOA_IDR_Addr & 0x00ffffff) << 5) + (n << 2))
// PAout(n)  这个n就代表这个位

void Key_Init(void);

uint8_t Key(void);


#endif

直接判断这个PAin(n)的值就好了,1就证明这个端口是高电平,0这个端口就是低电平。

最后完成了一个按键控制一个LED灯的亮灭的工程:

我今天主要是为了记录这种方法,指不定以后什么时候就用到这种方法呢?暂时我是用不到这个方法的,也不是什么特别重要的方法,用别的方法也能达到同样的效果,不过感觉没有这样直接啊!所以还是记录下吧!

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

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

相关文章

书生·浦语大模型实战营之XTuner 微调个人小助手认知

书生浦语大模型实战营之XTuner 微调个人小助手认知 在本节课中讲一步步带领大家体验如何利用 XTuner 完成个人小助手的微调&#xff01; 为了能够让大家更加快速的上手并看到微调前后对比的效果&#xff0c; 用 QLoRA 的方式来微调一个自己的小助手&#xff01; 可以通过下面两…

react项目规范新手教程

简介 React是一种流行的JavaScript库&#xff0c;用于构建用户界面。搭建一个React项目并不难&#xff0c;但确保项目的结构和配置正确可以帮助你更有效地开发和维护应用程序。以下是搭建React项目的一些步骤&#xff1a; 项目规范&#xff1a;项目中有一些开发规范和代码风格…

mybatis05:复杂查询:(多对一,一对多)

mybatis05&#xff1a;复杂查询&#xff1a;&#xff08;多对一&#xff0c;一对多&#xff09; 文章目录 mybatis05&#xff1a;复杂查询&#xff1a;&#xff08;多对一&#xff0c;一对多&#xff09;前言&#xff1a;多对一 &#xff1a; 关联 &#xff1a; 使用associatio…

三子棋+迷宫

又水了一篇&#xff0c;嘿嘿不废话了&#xff0c;正文开始 文章目录 1.三子棋&#xff08;Tic-Tac-Toe&#xff09;游戏流程解析游戏设计游戏代码实现1. 包含头文件和定义全局变量2. 初始化游戏板3. 打印游戏板4. 玩家行动5. 检查胜利条件6. 主函数下面是完整的C语言代码 2.控…

机器学习——概述总结

总图&#xff1a; 分部1&#xff1a; 分部2&#xff1a; 分部3&#xff1a;

计算机基础知识-第7章-程序的本质(2)——算法与数据结构概论

一、算法数据结构程序 提出这一公式并以此作为其一本专著的书名的瑞士计算机科学家尼克劳斯沃思&#xff08;Niklaus Wirth&#xff09;由于发明了多种影响深远的程序设计语言&#xff0c;并提出结构化程序设计这一革命性概念而获得了1984年的图灵奖。他是至今惟一获此殊荣的瑞…

k8s的ca以及相关证书签发流程

k8s的ca以及相关证书签发流程 1. kube-apiserver相关证书说明2. 生成CA凭证1.1. 生成CA私钥1.2. 生成CA证书 2. 生成kube-apiserver凭证2.1. 生成kube-apiserver私钥2.2. 生成kube-apiserver证书请求2.3. 生成kube-apiserver证书 3. 疑问和思考4. 参考文档 对于网站类的应用&am…

C++高级特性:柯里化过程与std::bind(六)

1、柯里化过程 1.1、operator()的引入 现在需要完成这样一个需求&#xff1a;有一个函数每次调用返回的结果不一样。例如&#xff1a;两次调用的返回值都不一样那么就可以达到这种目的 1.1.1、简单点的写法 可以给一个全局的变量&#xff08;静态变量&#xff09;&#xff…

交换机与路由器缓冲区:寻找完美大小

*本文系SDNLAB编译自瞻博网络技术专家兼高级工程总监Sharada Yeluri领英 在路由器和交换机中&#xff0c;缓冲区至关重要&#xff0c;可以防止网络拥塞期间的数据丢失。缓冲区到底要多大&#xff1f;这个问题在学术界和工业界一直备受争议。本文探讨了高端路由器中数据包缓冲的…

书生·浦语大模型全链路开源体系-第3课

书生浦语大模型全链路开源体系-第3课 书生浦语大模型全链路开源体系-第3课相关资源RAG 概述在 InternLM Studio 上部署茴香豆技术助手环境配置配置基础环境下载基础文件下载安装茴香豆 使用茴香豆搭建 RAG 助手修改配置文件 创建知识库运行茴香豆知识助手 在茴香豆 Web 版中创建…

荒野奔驰,在泥泞中体验惊心动魄的冒险

从亚利桑那州的金色沙漠到喀尔巴阡山脉的崇山峻岭&#xff0c;在这片无垠的开放世界中&#xff0c;蕴藏着无尽的宝藏与古老的废墟&#xff0c;等待着勇敢者的发现。《远征&#xff1a;泥泞奔驰游戏》作为Saber Interactive打造的又一越野模拟力作&#xff0c;继《雪地奔驰》之后…

记录一次Ubuntu 22.04桌面版安装向日葵的过程

大概花了近一天的时间安装了WIN11和Ubuntu 22.04双系统&#xff0c;中间Ubuntu安装时出现了好几次失败&#xff0c;后来检查可能是下载的iso文件有问题&#xff0c;重新下载一次&#xff0c;刻录到U盘。安装才算成功。 最后的Ubuntu系统信息如下 接着安装向日葵的时候出错了&a…

模组硬件通用|ESD静电释放注意事项

当我们在进行接插件操作或者电路板调试时&#xff0c;有时会出现接口损坏或者电路板上的某个IC芯片失效的情况&#xff0c;原因可能仅仅是手触摸到了IC芯片&#xff0c;ESD(Electro-Static discharge 静电释放)导致了损坏。模组作为一个集成电路板&#xff0c;内部含有不同型号…

003Node.js创建第一个web服务

如果用PHP来编写后端代码&#xff0c;需要用Apache或者Nginx的服务器,来处理客户的请求响应。对于Node.js时&#xff0c;不仅实现了应用&#xff0c;同时还实现了整个HTTP服务器. 安装 Node Snippets插件&#xff08;编程自带提示&#xff09; console.log(你好nodejs); //表…

Golang 并发安全Map容器实践

Golang原生Map容器并非支持并发安全&#xff0c;在实际使用的时候很容易导致条件竞争并造成未知问题&#xff0c;本文介绍了在Golang中如何安全的并发访问Map容器。原文: Concurrent-Safe Map Container in Go Georg Bommeli Unsplash 当多个程序同时尝试写入同一个map时&#…

【MATLAB源码-第186期】matlab基于MLE算法的8天线阵列DOA估计仿真,对比粗估计、精确估计输出RMSE对比图。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 第一部分&#xff1a;基本概念与系统设置 方向到达估计&#xff08;Direction of Arrival, DOA&#xff09;是信号处理中一项重要的技术&#xff0c;主要用于确定信号的到达方向。这种技术在雷达、无线通信和声纳等领域中有…

PandasAI的应用与实战解析(一):环境安装、运行demo

文章目录 1.源码包下载、明确依赖版本2.安装python依赖3.运行demo 本博客源码仓库地址&#xff1a;gitlab&#xff0c;本篇博客对应01分支python版本为3.10.x 什么是PandasAI&#xff1f;一句话总结的话&#xff0c;PandasAI就是一个结合了Pandas和AI的开源工具&#xff0c;更…

代码随想录阅读笔记-回溯【组合总和II】

题目 给定一个数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次。 说明&#xff1a; 所有数字&#xff08;包括目标数&#xff09;都是正整数。解集不能包含重复的组…

Pytest精通指南(06)Fixture scope作用域详解

文章目录 前言Scope 作用域写在测试用例函数文件写在conftest.py文件作用域总结验证默认作用域验证执行顺序遵循验证类中的fixture作用域验证重名fixture作用域 前言 从前文中&#xff0c;我们已经知道固件&#xff08;fixture&#xff09;的概念、原理、作用域&#xff0c;并且…

TMS320F280049 EPWM模块--PC子模块(5)

下图是PC子模块和其他子模块的联系图。可以看出&#xff0c;PC接收DB的输出&#xff0c;然后处理后给到TZ。 下图是PC子模块的内部框图。可以看到&#xff1a; 1&#xff09;PC子模块功能可以被bypass&#xff1b; 2&#xff09;one shot和divider的时钟是epwm时钟的8分频&am…