STM32_3(GPIO)

GPIO简介

  • GPIO(General Purpose Input Output)通用输入输出口
  • 8种输入输出模式
  • 输出模式可控制端口输出高电平,驱动LED、蜂鸣器、模拟通信协议输出时许等
  • 输入模式可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等

GPIO基本结构

GPIO位结构

最左边是寄存器,中间是驱动器,右边是引脚。

上面是输入,下面是输出。

先说上面,VDD为上拉电阻,VSS为下拉电阻。

上拉电阻:默认为高电平输入模式。

下拉电阻:默认为低电平输入模式。

施密特触发器:只有高于上限或低于下限,输出才发生变化,类似于下图。

   通过设置位设置和位清除寄存器,如果对某一位置1操作,在设置寄存器的对应位写1即可,剩下不需要设置的置0。

  推挽输出模式下,P-MOS和N-MOS均有效,数据寄存器为1时,上管导通,下管断开,输出直接接到VDD,就是输出高电平。数据寄存器为0时,上管断开,下管导通,输出直接接到VSS,就是输出低电平。

  开漏输出模式下,P-MOS无效,只有N-MOS在工作,数据寄存器为1时,下管断开,输出相当于断开,也就是高阻模式,数据寄存器为0时,下管导通,输出直接接到VSS,输出低电平。开漏模式可以作为通信协议的驱动方式。

8种模式

  • 浮空输入:可读取引脚电平,若引脚悬空,则电平不确定
  • 上拉输入:可读取引脚电平,内部连接上拉电阻,悬空时默认为高电平
  • 下拉输入:可读取引脚电平,内部连接下拉电阻,悬空时默认为低电平
  • 模拟输入:GPIO无效,引脚直接接入内部ADC
  • 开漏输出:可输出引脚电平,高电平为高阻态,低电平接VSS
  • 推挽输出:可输出引脚电平,高电平为VDD,低电平接VSS
  • 复用开漏输出:由片上外设控制,可输出引脚电平,高电平为高阻态,低电平接VSS
  • 复用推挽输出:由片上外设控制,可输出引脚电平,高电平为VDD,低电平接VSS

按键简介

  按键抖动:由于按键内部使用的是机械式弹簧片来进行通断的,所以在按下和松手的瞬间会伴随有一连串的抖动。

传感器模块介绍

  传感器模块:传感器元件(光敏电阻/热敏电阻/红外接收管等)的电阻会随外界模拟量的变化而变化,通过与定值电阻分压即可得到模拟电压输出,再通过电压比较器进行二值化即可得到数字电压输出。

为什要接上拉,如果PA0没有接上拉,就会变成浮空,所以必须要接上拉。

这个既可以接上拉也可也接浮空,上拉就是双电阻,更稳定,相应的损耗也大一些。

复习C语言

C语言数据类型

C语言宏定义

关键字:#define
用途:用一个字符串代替一个数字,便于理解,防止出错;提取程序中经常出现的参数,便于快速修改
定义宏定义:
    #define ABC 12345
引用宏定义:
    int a = ABC;    //等效于int a = 12345;

C语言typedef

关键字:typedef
用途:将一个比较长的变量类型名换个名字,便于使用
定义typedef:
     typedef unsigned char uint8_t;
引用typedef:
     uint8_t a;    //等效于unsigned char a;

C语言结构体

关键字:struct
用途:数据打包,不同类型变量的集合
因为结构体变量类型较长,所以通常用typedef更改变量类型名引用结构体成员:
typedef struct{

  char x;

  int y;

  float z;

} StructName_t;
 

C语言枚举

关键字:enum
用途:定义一个取值受限制的整型变量,用于限制变量取值范围;宏定义的集合
定义枚举变量:


因为枚举变量类型较长,所以通常用typedef更改变量类型名引用枚举成员:

代码部分

配置流程

1、时钟开启;

2、配置端口。

GPIO配置部分

1    // 时钟开启
2     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
3 
4     // 配置端口
5     GPIO_InitTypeDef GPIO_InitStruct;
6     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;                    // 推挽输出
7     GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;                           
8     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;                    
9     GPIO_Init(GPIOA, &GPIO_InitStruct);

为什么要用APB2,可以点击RCC_APB2PeriphClockCmd查看定义,可以看到,所以用APB2。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《数学之美》第三版的读书笔记一、主要是马尔可夫假设、隐马尔可夫模型、图论深度/广度、PageRank相关算法、TF-IDF词频算法

1、马尔可夫假设 从19世纪到20世纪初,俄国有个数学家叫马尔可夫他提出了一种方法,假设任意一个词出现的概率只同它前面的词有关。这种假设在数学上称为马尔可夫假设。 2、二元组的相对频度 利用条件概率的公式,某个句子出现的概率等于每一个词出现的条件概率相乘,于是可展…

STM32_5(中断)

中断系统 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行中断优先级:当…

计算公式-dB转换,噪声,IP3,OP1dB,耗散

1. dB和log转换公式 dB在缺省情况下总是定义功率单位,以 10lg 为计。 d B 10 l g ( B ) dB 10lg(B) dB10lg(B) P o w e r G a i n ( d B ) 10 l g ( P o u t P i n ) Power Gain(dB) 10lg(\frac{P_{out}}{P_{in}}) PowerGain(dB)10lg(Pin​Pout​​) 2. 级联情…

Django 集成 Celery 实现高效的异步任务处理

概要 在复杂的 Web 应用中,处理长时间运行的任务或定期任务是一项挑战。Django 作为一个强大的 Python Web 框架,可以通过集成 Celery 这一异步任务队列来优化这些任务的处理。Celery 不仅能提高应用性能,还能改善用户体验。本文将深入探讨如…

redis的高可用(主从复制和哨兵模式)

redis的高可用(主从复制和哨兵模式) redis的性能管理:redis的数据缓存在内存当中 INFO memory:查看redis内存使用情况 used_memory:1800800:redis中数据占用的内存 used_memory_rss:5783552:redis向操作…

【nlp】2.8 注意力机制拓展

注意力机制拓展 1 注意力机制原理1.1 注意力机制示意图1.2 Attention计算过程1.3 Attention计算逻辑1.4 有无attention模型对比1.4.1 无attention机制的模型1.4.2 有attention机制的模型1 注意力机制原理 1.1 注意力机制示意图 Attention机制的工作原理并不复杂,我们可以用下…

本地训练,开箱可用,Bert-VITS2 V2.0.2版本本地基于现有数据集训练(原神刻晴)

按照固有思维方式,深度学习的训练环节应该在云端,毕竟本地硬件条件有限。但事实上,在语音识别和自然语言处理层面,即使相对较少的数据量也可以训练出高性能的模型,对于预算有限的同学们来说,也没必要花冤枉…

文件的原理和应用

常识: 1 文件包括属性和内容 2 文件有打开和未打开文件, 3 本文先讨论谁打开的文件,以及如何管理已经打开的文件 一 回忆c接口 1 fopen 我们在test.c里面用一下fopen函数,不存在打开的文件会默认创建,那为什么默认新建在当前…

易点易动设备管理系统:提升企业设备维修效率的工具

在现代企业运营中,设备的正常运行和及时维修至关重要。然而,传统的设备维修管理方法往往效率低下、易出错,给企业带来了不小的困扰。为了解决这一问题,易点易动设备管理系统应运而生。作为一款先进的智能化系统,易点易…

c语言——俄罗斯方块

一、游戏效果 俄罗斯方块 二. 游戏背景 俄罗斯方块是久负盛名的游戏,它也和贪吃蛇,扫雷等游戏位列经典游戏的⾏列。 《俄罗斯方块》(Tetris,俄文:Тетрис)是一款由俄罗斯人阿列克谢帕基特诺夫于1984…

ChatGPT/GPT4丨编程助手;AI画图;数据分析;科研/项目实现;提示词工程技巧;论文写作等

ChatGPT 在论文写作与编程方面也具备强大的能力。无论是进行代码生成、错误调试还是解决编程难题,ChatGPT都能为您提供实用且高质量的建议和指导,提高编程效率和准确性。此外,ChatGPT是一位出色的合作伙伴,可以为您提供论文写作的…

lv11 嵌入式开发 FS4412开发环境搭建 8

目录 1 开发板硬件资源介绍 2 初始原理图 3 交叉开发环境搭建 3.1 在ubuntu下安装交叉编译工具链 3.2 在windows下安装SecureCRT 3.3 在windows下安装USB转串口驱动 3.4 下载测试程序 4 硬件控制原理 4.1 地址映射表 4.2 查看数据手册 1 开发板硬件资源介绍 …

关于sklearn的:还可能是网络的问题???

前提:安装sklearn需要 numpy、scipy等库(这个自行搜索) 昨天安装numpy、scipy很快,一会就好了,然后安装sklearn一直报错,还以为是版本问题。 今天大早上起来,再次安装,顺利成功&…

GPIO模式详解:推挽/开漏/浮空/上拉/下拉/施密特(迟滞)输入

GPIO(General Purpose Input Output)可用于执行数字输入或输出功能。典型的应用包括从/向模拟或数字传感器/设备读写数值、驱动LED、为I2C通信驱动时钟、生成外部组件的触发、发出中断等。 文章目录 1 GPIO简介2 输出模式2.1 推挽输出2.2 开漏输出 3 输入模式3.1 高阻态(浮空)、…

CVE-2023-22515 Confluence未授权漏洞分析

0x01 漏洞描述 Confluence 是由 Atlassian 开发的企业级协作软件。2023年10月,Atlassian 官方披露 CVE-2023-22515 Atlassian Confluence Data Center & Server 权限提升漏洞。攻击者可构造恶意请求创建管理员,从而登录系统,造成敏感信息…

K8s实战RestartPoliy策略

一、默认策略为Always cmd.yaml apiVersion: v1 kind: Pod metadata:name: myapp-pod labels:app: myapp spec: containers:- name: myapp-container image: busyboxcommand: [sh, -c, echo OK!&& sleep 60]首先我们根据这个yaml创建一个测试的pod 执行命令 kubec…

GIT | 基础操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤销修改 | 删除文件

GIT | 基础操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤销修改 | 删除文件 文章目录 GIT | 基础操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤销修改 | 删除文件前言一、安装git二、git基本操作2.1 初始化git2.2 配置局部生效2.3 配置全局生效 三、认识工作区…

【计算机网络笔记】路由算法之层次路由

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

路由的控制与转发原理

场景1:路由器收到数据包后,会根据数据包的目标IP地址,计算出目标网段,再确定终端设备的具体位置。这个过程中,还需要计算出接口,或数据包下一跳的地址。最终会生成一条路由,即路径,存…

2023亚太杯数学建模B题思路分析 - 玻璃温室中的微气候法规

1 赛题 问题B 玻璃温室中的微气候法规 温室作物的产量受到各种气候因素的影响,包括温度、湿度和风速[1]。其中,适 宜的温度和风速是植物生长[2]的关键。为了调节玻璃温室内的温度、风速等气候因素 , 温室的设计通常采用带有温室风扇的通风系统&#xf…