STM32------分析GPIO寄存器

 一、初始LED原理图

共阴极led

LED发光二极管,需要有电流通过才能点亮,当有电压差就会产生电流

二极管两端的电压差超过2.7v就会有电流通过

电阻的作用

由于公式I=V/R

不加电阻容易造成瞬间电流无穷大

发光二极管工作电流为10-20MA

3.3v / 1kΩ  = 3.3mA

电阻作用限流电阻。

二、分析GPIO寄存器

2.1 前言

编程的目的是为了操作硬件,硬件分布在地址上,所以转变为编程操作地址,因为地址是唯一的。

编程的目的就操作地址间接操作硬件

地址分布比较广,硬件都会把地址用寄存器的方式来分布

某个地址到某个地址属于某个寄存器

这样的话我们操作硬件实际上就是在操作地址,操作地址实际上就是转化为操作寄存器。

2.2 本节目标

 

操控PA1-PA4输出高电平

        经过前言分析可知,这几个问题编程找到一个或者某几个寄存器,这几个寄存器可以让我们的PA1-PA4进行高电平的输出。

         另一个要注意的我们的gpio口,当前pa1-pa4要输出高低电平,那么当前这个pa1-pa4他所对应的功能是通用的输入输出。 这时候pa1-pa4是输出功能,还有其他功能,当前处理器有48个管脚,每一个管脚有多个功能,某一时刻只用一个功能,这就是管脚的复用。找寄存器,那几个可以管理我们的pa1-pa4,让这个四个管脚可以当做输入输出功能中的输出功能来用。 

为了更好的实现分析,这时候需要去看stm32的中文参考手册

其中第八节是对gpio的描述

GPIO描述:每个gpio端口有两个32位配置寄存器,两个数据寄存器,一个32位置位/复位寄存器,一个16位复位寄存器,一个32位锁定寄存器,总共有七个寄存器,我们就是通过操作这些寄存器来控制我们的GPIO的。

注:1字节=8位(bit)

其中GPIO每个端口又可以配置成如下八种模式:

对于具体gpio配置成什么模式,8.1.11节外设的GPIO配置有详细解释

2.3 寄存器描述

 首先看8.2.1端口配置低寄存器(GPIOx_CRL)x=A..E

4位一组 

 分别配置输入输出模式和速度。

从表中可以看到低寄存器对应的是GPIO0-7

正好对应32的八组。

端口配置高寄存器是8-15

 因为我们要配置的是PA1-4,所以我们只关系低寄存器的1-4也就是4-19位

对于输出模式,大多数gpio采用推挽输出模式即可 

 2.4 寄存器地址确定

当我们确定好要操作的寄存器后,下一步就需要找到寄存器对应的地址,然后在相应的位写入数据即可

寄存器地址由基地址+偏移地址组成

gpio的基地址在

的寄存器映像中可以找到

整个地址被分为0x0000 0000  到 0Xffff  FFFF,

当前stm32是32位的处理器。就是2的32次方。

最多能管理从0开始一直到2的32次方减1.

由寄存器映像可知,gpioA的基地址是0x4001 0800

所以我们要操作的低寄存器地址就是基地址+偏移地址=0x4001 0800 + 0x00

一会就要向这个地址里面的4到19位写0011 0011 0011 0011 

根据寄存器配置说明可知00是通用推挽输出,11是最大速度50MHz,这样gpioA1-4就都配置成了最大速度50Mhz ,推挽输出模式

2.5 输出寄存器配置

当知道gpio1-4的地址并配置好输出模式后,我们应该考虑输出数据了,应该会有一个寄存器会完成这部分操作。 

找到了端口输出数据寄存器

首先确定其地址,地址=基地址+偏移地址=0x4001 0800 + 0xCH = 0x4001 08CH

这16位就占了我们寄存器中的低16位。

端口输出寄存器干什么用的呢,你往哪一个端口写1,哪一个就输出高电平 ,哪一个端口写0就输出低电平。

gpio我们只用到了pa1-pa4,所以这个寄存器我们只需要关心

三、寄存器配置代码

控制低寄存器地址 

 

我们现在是要往地址里面去写 值,那么我们现在要修改的不是地址指向的位置而是要修改我们地址里面的值,地址里面的内容,也就是说我们要取出这地址里面的内容把里面的内容做一个修改,要如何修改如何取出地址里面的值,我们就需要再加一个强制类型转换。 

这个代表了地址了: 

 取出地址里面的内容:

用到了两个*,第一个*是强制类型转换,将我们的0x40010800转成了一个用来表示地址的指针,如何取出地址里面的值呢,取值操作符。

取出地址里面的值了下一步要干什么,我是不是要修改这个地址里面的值。

如何修改呢,我们要修改的是这个地址里面的4-19位就可以了。

如何修改4-19位最好的 做法是先给他清零,然后再写入我们的新值,

 这一部分属于C语言的内容

分别用到了

&按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
I按位或两个相应的二进制位中只要有一个为1,该位的结果值为1
^按位异或若参加运算的两个二进制位值相同则为0,否则为1
~取反~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
<<左移用来将一个数的各二进制位全部左移N位,右补0
>>右移将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0

1.与运算(&)
参加运算的两个数据,按二进制位进行“与”运算。

运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;

即:两位同时为“1”,结果才为“1”,否则为0

例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3&5的值得1。

两个数与的结果一定是比任意两个数都小,换句话说,越与数越小

2.或运算(|)
参加运算的两个对象,按二进制位进行“或”运算。

运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;

即 :参加运算的两个对象只要有一个为1,其值为1。

例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111 因此,3|5的值得7。

两个数或的结果一定是大于其中的任意一个数,换句话说,越或数越大

3.异或运算(^)
参加运算的两个数据,按二进制位进行“异或”运算。

运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;

即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。

例如:9^5可写成算式如下: 00001001^00000101=00001100 可见9^5=12

4.取反运算(~)
参加运算的数据,按二进制位进行“取反”运算。

运算规则:~0=1; ~1=0;

即:参与运算的数据,对应的二进制取反后 0 变成 1 ,1 变成 0 。

例如: 3 :00000011 ; ~3 :11111100 = 252

5.左移运算(<<)
参与运算的数据,二进制全部向左移动 n 位,左边舍去,右边补 0

运算规则:00000101 << 1 = 00001010

即:参与运算的数据,对应的二进制位向左移动 n 位,左边舍去,右边补 0 。

例如:2 << 1 = 4 ; 00000010 << 1 = 00000100

左移一位相当于乘以 2

6.右移运算(>>)
参与运算的数据,二进制全部向右移动 n 位,右边舍去,左边补 0

运算规则:00000101 >> 1 = 00000010

即:参与运算的数据,对应的二进制位向右移动 n 位,右边舍去,左边补 0 。

例如 :2 >> 1 = 1 ; 00000010 >> 1 = 00000001

右移一位相当于除以 2
上述位预算符---------原文链接:https://blog.csdn.net/qq_52354698/article/details/119301131

 与操作会清零,如何修改4-19位,4-19位清零,其他位不变,

0xff0000f = 111111111111000000000000000011111111

当进行位与操作时,因为4-19位都是0,按照其运算规则,得到值始终是0

清楚之后,这时候需要去修改我们的4-19位分别写成0011 0011 0011 0011,

这时候可以采用或操作。

0011等于十六进制的3

或操作置位, =0x00033330;

四、通过寄存器地址进行点灯操作 

注: 

清零是与操作

置1是或操作

管脚高电平点亮

低电平熄灭

 点亮led灯和我们的端口输出数据寄存器有关:

寄存器地址等于基地址+偏移地址

现在我们要让他输出一个高电平

就要往这个寄存器里面的1-4位写高电平

要让灯熄灭的话对应写0就可以了

在进入循环语句之前应该让我们的led灯都熄灭,在循环中点亮熄灭

 DOR寄存器地址:

 =0x4001080c

首先对寄存器清零,清零就是与操作

1<<1 = 10

1<<2 = 100

1<<3 = 1000

1<<4 = 10000

|或完是11110

取反后是00001

通过循环做一个延时

 

五、GPIO库函数 

 

在stm32固件库函数手册的第10节对GPIO的库函数进行了描述

GPIO寄存器结构,GPIO_TypeDef和AFIO_TypeDef在文件stm32f10x_map.h中

其中AFIO有两个功能:

1、引脚复用重映射

2、中断引脚选择

GPIO函数库

其中标黄的是常用的几个库函数

函数GPIO_DeInit和函数GPIO_DeInit

配置GPIO端口为默认值。

函数GPIO_Init对GPIO进行初始化,主要包括配置GPIOx的那个引脚,配置成什么模式,速度是多少,这些都是通过一个结构体进行配置的。

GPIO_ReadInputDataBit:读取PA15的输入值(GPIOA_PIN_15)

函数GPIO_ReadInputData:读取GPIOA的输入值,多位

函数GPIO_ReadOutputDataBit:读取PA15的输出值

函数GPIO_ReadOutputData:读取GPIOA的输出值,多位

 一个字节=8位(bit)所以末尾bit就是读一位的值

函数 GPIO_SetBits:设置PA15的值,就是置1

函数 GPIO_ResetBits:清除PA15的输入值,就是置0

函数 GPIO_WriteBit:设置PA15的值,可以是0也可以是1

函数GPIO_Write:设置PA的值,可以是一个十六进制的值,一下设置多位

函数GPIO_EXTILineConfig:中断时使用,选择一个GPIO引脚作为中断线路。

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

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

相关文章

如何在群晖Docker运行本地聊天机器人并结合内网穿透发布到公网访问

文章目录 1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 随着ChatGPT 和open Sora 的热度剧增,大语言模型时代,开启了AI新篇章,大语言模型的应用非常广泛&#xff0c;包括聊天机…

获取linuxIP、内存、cpu、磁盘IO等信息的Shell脚本及其讲解

shell基础知识 1.grep grep是一个在Unix和Unix-like系统上使用的命令行工具&#xff0c;用于在文本文件中搜索匹配指定模式的行。它的名字来自于"global regular expression print"&#xff08;全局正则表达式打印&#xff09;的缩写。grep的基本用法是通过指定一个…

Redis之十:Spring Data Redis --- CrudRepository方式

SpringData Redis CrudRepository方式 Spring Data Redis 的 CrudRepository 是 Spring Data 框架中用于提供基础 CRUD&#xff08;创建、读取、更新和删除&#xff09;操作的一个接口。在与 Redis 集成时&#xff0c;尽管 Redis 是一个键值存储系统&#xff0c;并没有像关系型…

iOS卡顿原因与优化

iOS卡顿原因与优化 1. 卡顿简介 卡顿&#xff1a; 指用户在使用过程中出现了一段时间的阻塞&#xff0c;使得用户在这一段时间内无法进行操作&#xff0c;屏幕上的内容也没有任何的变化。 卡顿作为App的重要性能指标&#xff0c;不仅影响着用户体验&#xff0c;更关系到用户留…

零拷贝技术深入分析

一、零拷贝 在前面的文章“深浅拷贝、COW及零拷贝”中对零拷贝进行过分析&#xff0c;但没有举例子&#xff0c;也没有深入进行展开分析。本文将结合实际的例程对零拷贝进行更深入的分析和说明。 在传统的IO操作中&#xff0c;以文件通过网络传输为例 &#xff0c;一般会经历以…

深度学习 精选笔记(4)线性神经网络-交叉熵回归与Softmax 回归

学习参考&#xff1a; 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增)&#xff0c;以达到集多方教程的精华于一文的目的。 ③非常推荐上面&#xff08;学习参考&#x…

并查集(Disjoint Set)

目录 1.定义 2.初始化 3.查找 4.合并 4.1.按秩合并&#xff08;启发式合并&#xff09; 5.例题 题目描述 输入格式 输出格式 输入输出样例 说明/提示 1.定义 并查集&#xff0c;也称为不相交集合数据结构&#xff0c;是一种用于管理元素分组以及查找元素所属组的数…

MWC 2024丨世界移动通信大会圆满结束,美格智能5G-A、端侧AI解决方案掀热潮

2月26日—29日&#xff0c;全球瞩目的2024世界移动通信大会&#xff08;MWC&#xff09;在西班牙巴塞罗那隆重举办。本届MWC以“未来先行”为主题&#xff0c;围绕“超越5G”、“智联万物”、“AI人性化”等话题展开&#xff0c;吸引了全球2400多家电信运营商、通信设备和终端制…

亿道信息新品EM-T195轻薄型工业平板,隆重登场!

EM-T195是一款轻巧但坚固的平板电脑&#xff0c;仅 650克重、10.5mm毫米厚&#xff0c;即使没有额外的便携配件进行辅助&#xff0c;您也可以轻松将其长时间随身携带。耐用性外壳完全密封&#xff0c;防尘防潮&#xff1b;出色的坚固性和可靠性&#xff0c;使T195天生适合在苛刻…

政府采购标书制作的要点解析

导语&#xff1a;政府采购是政府为满足公共利益&#xff0c;按照法定程序和标准&#xff0c;通过招标、竞争性谈判等方式&#xff0c;购买商品、工程和服务的行为。标书作为政府采购活动中的重要文件&#xff0c;其制作质量直接影响到项目的顺利进行。本文将围绕政府采购标书制…

导览系统厂家|景区电子导览|手绘地图|AR导览|语音导览系统

随着元宇宙、VR、AR等新技术的快速发展&#xff0c;旅游服务也更加多元化、智能化。景区导览系统作为旅游服务的重要组成部分&#xff0c;其形式更加多元化智能化。智能导览系统作为一种新的服务方式&#xff0c;能够为游客提供更加便捷的旅游服务和游览体验&#xff0c;也逐渐…

Android Gradle开发与应用 (四) : Gradle构建与生命周期

1. 前言 前几篇文章&#xff0c;我们对Gradle中的基本知识&#xff0c;包括Gradle项目结构、Gradle Wrapper、GradleUserHome、Groovy基础语法、Groovy语法概念、Groovy闭包等知识点&#xff0c;这篇文章我们接着来介绍Gradle构建过程中的知识点。 2. Project : Gradle中构建…

平台工程: 用Backstage构建开发者门户 - 1

本文介绍了如何使用开源Backstage构建自己的开发者门户&#xff0c;并基于此实践平台工程。本系列共两篇文章&#xff0c;这是第一篇。原文: Platform Engineering: Building Your Developer Portal with Backstage — Part 1 在上一篇文章(平台工程与安全)中&#xff0c;我们介…

Python实现PPT演示文稿中视频的添加、替换及提取

无论是在教室、会议室还是虚拟会议中&#xff0c;PowerPoint 演示文稿都已成为一种无处不在的工具&#xff0c;用于提供具有影响力的可视化内容。PowerPoint 提供了一系列增强演示的功能&#xff0c;在其中加入视频的功能可以大大提升整体体验。视频可以传达复杂的概念、演示产…

Linux - 基本开发工具

1、软件包管理器 yum 1.1、什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方…

泰迪智能科技企业数据挖掘平台使用场景

企业数据挖掘平台助力企业数据挖掘&#xff0c;数据挖掘平台也在多个领域发挥着重要的作用。 企业数据挖掘平台具有数据抓取、数据清洗、数据分析、机器学习等多项功能&#xff0c;广泛应用于企业的各个领域&#xff0c;包括&#xff1a;金融行业、医疗行业、交通领域、教育、制…

【SVN】使用TortoiseGit删除Git分支

使用TortoiseGit删除Git分支 前言 平时我在进行开发的时候&#xff0c;比如需要开发一个新功能&#xff0c;这里以蘑菇博客开发服务网关-gateway功能为例 一般我都会在原来master分支的基础上&#xff0c;然后拉取一个新的分支【gateway】&#xff0c;然后在 gateway分支上进…

SpringBoot:Invalid bound statement (not found)的原因和解决方案

&#x1f413; 报错信息&#xff1a; &#xff08;无效绑定声明&#xff09;找不到 解析&#xff1a; 你的mapper实例对象和对应的mapper.xml对象未找到 &#x1f413; 排查&#xff1a; 情况一&#xff1a; 1.排除相对应的mapper实例对象路径是否正确 查看相对应的mapper中…

无人机飞行控制系统技术,四旋翼无人机控制系统建模技术详解

物理建模是四旋翼无人机控制系统建模的基础&#xff0c;主要涉及到无人机的物理特性和运动学特性。物理建模的目的是将无人机的运动与输入信号&#xff08;如控制电压&#xff09;之间的关系进行数学描述。 四旋翼无人直升机是具有四个输入力和六个坐标输出的欠驱动动力学旋翼…

【前端素材】推荐优质后台管理系统网页Stisla平台模板(附源码)

一、需求分析 1、系统定义 后台管理系统是一种用于管理和控制网站、应用程序或系统的管理界面。它通常被设计用来让网站或应用程序的管理员或运营人员管理内容、用户、数据以及其他相关功能。后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;通常由管理员使…