STM32学习笔记三——深度讲解GPIO及其应用

目录

STM32GPIO端口位基本结构图:

结构图I/O引脚:

GPIO输入输出总结

1.GPIO引脚的四种输入方式及其特点:

1)上拉输入(GPIO_Mode_IPU)   

2)下拉输入(GPIO_Mode_IPD)    

3)模拟输入(GPIO_Mode_AIN)

4)浮空输入(GPIO_Mode_IN_FLOATING)

2.GPIO引脚的四种输出方式及其特点:

1)推挽输出:

2)开漏输出:

3)复用开漏输出、复用推挽输出:

STM32的GPIO设置举例

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

端口配置高寄存器(GPIOx_CRH) (x=A..E)

端口输入数据寄存器(GPIOx_IDR) (x=A..E)

端口输出数据寄存器(GPIOx_ODR)(x=A....E)

端口位设置/清除寄存器(GPIOx_BSRR)(x=A.....E)

端口位清除寄存器(GPIOx_BRR) (x=A..E)

配置GPIO令LED灯闪烁代码+注解 


STM32GPIO端口位基本结构图:

图片描绘了STM32GPIO口内部的基本结构:左边寄存器  中间驱动器  右边I/O口引脚

结构图I/O引脚:

由于STM32芯片内部电路所能承受的电压有限,因此I/O引脚向里是两个保护二极管,他们的作用是:当有静电等瞬间电压波动进入I/O引脚时,若此波动电压大于3.3V(VDD),则上方的保护二极管导通,将电压引入电源,让电源网络吸收;若此波动电压小于0V(VSS),则下方的保护二极管导通。

GPIO输入输出总结


STMO2的GPIO的输入输出方式有以下8种:
(1) GPIO_Mode_AIN  模拟输入:
(2) GPIO_Mode_IN_FLOATING浮空输入:
(3) GPIO_Mode_IPD 下拉输入:
(4) GPIO_Mode_IPU  上拉输入:

(5) GPIO_Mode_Out_OD开漏输出:
(6) GPIO_Mode_Out_PP推挽输出:
(7) GPIO_Mode_AF_OD复用开漏输出:
(8) GPIO_Mode_AF_PP复用推挽输出。

1.GPIO引脚的四种输入方式及其特点:

1)上拉输入(GPIO_Mode_IPU)   

        上拉输入,就是信号进入芯片后被内部的一个上拉电阻上拉,再经过施密特触发器转换成0、1信号,因此,复位后该引脚电平为高电平。

2)下拉输入(GPIO_Mode_IPD)    

        下拉输入,就是信号进入芯片后被内部的一个下拉电阻下拉,再经过施密特触发器转换成0、1信号,因此,复位后该引脚电平为低电平。

3)模拟输入(GPIO_Mode_AIN)

        信号进入芯片后不经过上拉电阻或者下拉电阻,也不经过施密特触发器,经由另一线路把电压信号传送到片上相应的外设模块。    例如,通常是ADC模块,然后由ADC采集电压信号。因此,可以将这种方式理解为模拟输入的信号是未经处理的信号。

4)浮空输入(GPIO_Mode_IN_FLOATING)

        信号进入芯片内部后,既没有经过上拉电阻也没有经过下拉电阻,只经由施密特触发器输入。如果被配置成这个模式,用电压表测量其引脚电压为1伏左右,是个不确定值。

        由于其输入阻抗比较大,所以一般把这种模式用于标准的通信协议,如IIC、USART等。

2.GPIO引脚的四种输出方式及其特点:

1)推挽输出:

        可以输出高、低电平,连接数字器件。推挽结构一般是指P-MOS和N-MOS两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止,各负责正、负半周的波形放大任务。电路工作时,两个对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流(拉电流)。推挽输出既提高了电路负载能力,又提高了开关速度。推挽输出有一定的电压与电流驱动能力,可以直接驱动一些合适的原件工作。

        一般情况下:当我们控制I/O口输出高电平时,P-MOS激活,N-MOS关闭,VDD连接到I/O口引脚;当我们控制I/O口输出低电平时,N-MOS激活,P-MOS关闭,VSS连接到I/O口引脚

2)开漏输出:

        开漏模式下只有N-MOS工作  P-MOS一直处于断开状态

        输出端相当于三极管的集电极,因此要得到高电平状态需要外接上拉电阻才行。该方式适合于做电流型的驱动,其吸收电流的能力相对较强(可达到20mA)。开漏输出没有电流电压驱动能力,必须依靠外部的电压源来驱动,而且选用开漏输出必须选择能够5V容忍的I/O口

        例如,用该方式去驱动继电器。该方式的特点是:利用外部电路的驱动能力,减少IC内部的驱动,IC 内部仅需很小的栅极驱动电流:开漏可用来连接不同电平的器件,以实现电平匹配:提供灵活的输出方式,可以将多个开漏输出引脚并接到一条线上。通过一个上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系。这也IIC、SMBus 等总线判断总线占用状态的原理。

(如图所示:芯片定义图中有"FT"的都可以容忍5V电压)

3)复用开漏输出、复用推挽输出:

        可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用I/O口使用),STM32的很多引脚是多功能复用的,所以对此必须要重视:
(1)复用开漏输出:片内外设功能,如TX1、MOSI、MISO、SCK、SS等。

(2)复用推挽输出:片内外设功能,如IIC的SCL、SDA等。

STM32的GPIO设置举例

在每个GPIO模块内,主要包含了寄存器和驱动器

寄存器:可以理解为特殊的存储器,内核可以通过APB2总线对寄存器进行读写,由此完成输出电平和读取电平的功能,and与此同时,寄存器的每一位对应一个引脚,由于STM32是32位单片机,因此STM32内部的寄存器都是32位的,但由于端口只有16位,所以这个寄存器只有低16位所对应的有端口,高16位没有用到

驱动器:增加驱动能力

 库函数使用的是读写位设置和位清除寄存器的方法

GPIO配置寄存器,每个端口的模式由4位进行配置(16个端口就需要64位)

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

端口配置高寄存器(GPIOx_CRH) (x=A..E)

端口输入数据寄存器(GPIOx_IDR) (x=A..E)

低16位对应16个引脚,高16位没有用

端口输出数据寄存器(GPIOx_ODR)(x=A....E)

低16位对应16个引脚,高16位没有用

端口位设置/清除寄存器(GPIOx_BSRR)(x=A.....E)

BRy: 清除端口x的位y (y = 0…15) (Port x Reset bit y)
BSy: 设置端口x的位y (y = 0…15) (Port x Set bit y)

如果想要对多个端口同时进行位设置和位清除——使用端口位设置/清除寄存器,可保证位设置和位清除的同步性

端口位清除寄存器(GPIOx_BRR) (x=A..E)

配置GPIO令LED灯闪烁代码+注解 
#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//开启GPIOA的时钟//使用各个外设前必须开启时钟,否则对外设的操作无效/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;					//定义结构体变量GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,赋值为推挽输出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;				//GPIO引脚,赋值为第0号引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,赋值为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);					//将赋值后的构体变量传递给GPIO_Init函数//函数内部会自动根据结构体的参数配置相应寄存器//实现GPIOA的初始化/*主循环,循环体内的代码会一直循环执行*/while (1){/*设置PA0引脚的高低电平,实现LED闪烁,下面展示3种方法*//*方法1:GPIO_ResetBits——设置低电平,GPIO_SetBits——设置高电平*/GPIO_ResetBits(GPIOA, GPIO_Pin_0);					//将PA0引脚设置为低电平Delay_ms(500);										//延时500msGPIO_SetBits(GPIOA, GPIO_Pin_0);					//将PA0引脚设置为高电平Delay_ms(500);										//延时500ms//		/*方法2:GPIO_WriteBit设置低/高电平,由Bit_RESET/Bit_SET指定*/
//		GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);		//将PA0引脚设置为低电平
//		Delay_ms(500);										//延时500ms
//		GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);			//将PA0引脚设置为高电平
//		Delay_ms(500);										//延时500ms
//		
//		/*方法3:GPIO_WriteBit设置低/高电平,由数据0/1指定,数据需要强转为BitAction类型*/
//		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0);		//将PA0引脚设置为低电平
//		Delay_ms(500);										//延时500ms
//		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1);		//将PA0引脚设置为高电平
//		Delay_ms(500);										//延时500ms}
}

(代码来自江科大STM32教学视频)

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

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

相关文章

基于FPGA的图像最近邻插值算法verilog实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 将FPGA数据导入matlab显示图片,效果如下: 2.算法运行软件版本 vivado2019.2,matlab2022a 3.部分核心程序 ti…

基于MIDI 与USB 接口,使用《完美钢琴》安卓版连接雅马哈P48B学习钢琴!

文章大纲 概念简介USB OTG or Host?MIDI 实现效果需要购买的硬件:USB to HOST 转MIDI 接口的钢琴内录线连接后 查看外设关闭 拔出屏幕显示Close Device 概念简介 USB OTG or Host? USB(Universal Serial Bus)是一种通用的串行总线标准&am…

微信小程序(三十四)搜索框-带历史记录

注释很详细&#xff0c;直接上代码 新增内容&#xff1a; 1.搜索框基本模板 2.历史记录基本模板 3.细节处理 源码&#xff1a; index.wxml <!-- 1.点击搜索按钮a.非空判断b.历史记录&#xff08;去重&#xff09;c.清空搜索框d.去除前后多余空格2.删除搜索 3.无搜索记录不…

【51单片机】开发板&开发软件(Keil5&STC-ISP)简介&下载安装破译传送门(1)

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

Chronos靶机渗透

Chronos靶机 一.信息收集1.靶机IP地址确认2.目录扫描3.常见漏洞扫描5.web网站探测1.网页2.源代码 二.网站渗透1.命令执行2.抓包---burp suite3.反弹shell 三.提权1.node.js原核污染第一个flag 2.sudo提权第二个flag 一.信息收集 1.靶机IP地址确认 ┌──(root㉿kali)-[/] └─…

什么是Vue样式穿透以及常用的实现方法

在Web前端开发中&#xff0c;样式穿透是一个重要的主题&#xff0c;它可以帮助我们更好地定制化组件样式&#xff0c;提升用户体验。本文将为您介绍Vue中样式穿透的概念&#xff0c;以及几种常用的实现方法&#xff0c;希望对您的前端开发工作有所帮助。 什么是样式穿透&#…

(5)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—12种聚类算法说明与归纳

目录 一、12种聚类(无监督学习)算法说明和区分比较 聚类算法的类型(一) ​编辑导入函数库 加载数据集 ​编辑 (1)K-Means --Centroid models (2)Mini-Batch K-Means -- Centroid models (3)AffinityPropagation (Hierarchical) -- Connectivity models (4)Mean Shift…

中科大计网学习记录笔记(四):Internet 和 ISP | 分组延时、丢失和吞吐量

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…

骑砍战团MOD开发(43)-顶点着色技术

一.顶点着色(vertex_color) 实际GPU渲染时有顶点着色和纹理着色两种方式,顶点着色消耗资源小,GPU将顶点颜色通过插值运算进行渲染.常用于同一物体的不同颜色渲染,如青苹果,红苹果,可以使用动态切换顶点颜色实现,而不通过设置纹理图片实现. Direct3D9中可声明灵活顶点格式 stru…

二叉树(2)——堆的实现

堆表面是数组&#xff0c;内核是完全二叉树/满二叉树 在插入删除的时候要注意操作过后堆是否还是一个堆&#xff0c;要进行交换等操作。&#xff08;向上调整&#xff09; 逻辑上控制二叉树&#xff0c;物理上控制数组&#xff01;&#xff01;&#xff01; 接下来我们用【小…

DockerUI如何部署结合内网穿透实现公网环境管理本地docker容器

文章目录 前言1. 安装部署DockerUI2. 安装cpolar内网穿透3. 配置DockerUI公网访问地址4. 公网远程访问DockerUI5. 固定DockerUI公网地址 前言 DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基…

vue基本语法总结大全

vue基本语法 文章目录 vue基本语法基本用法内容渲染指令属性绑定指令使用js表达式事件绑定指令条件渲染指令v-else和v-else-if指令列表渲染指令v-for中的key 组件化开发安装详细讲解 第三方组件1. 组件间的传值2. element-ui介绍3. 组件的使用4. 图标的使用 Axios网络请求1. Ax…