当前位置: 首页 > news >正文

STM32--GPIO

教程

视频

博主教程

STM32系统结构图

GPIO

GPIO(General Purpose Input/Output)是STM32内部的一种外设。

一个STM32芯片内存在多个GPIO外设,每个GPIO外设有16个引脚;

比如GPIOA:PA0~PA15;

GPIOB:PB0~PB15。

每个IO引脚都有输入电路和输出电路。

GPIO8种工作模式

链接

输入模式

由上下拉电阻控制。

上拉模式如何保持高电平

工作原理

  1. 当配置为上拉模式时,GPIO内部会连接一个上拉电阻(通常约30-50kΩ)到VDD

  2. 当没有外部信号驱动时,上拉电阻会将引脚电压拉至高电平

VDD(正电源)

下拉模式如何保持低电平

工作原理

  1. 当配置为下拉模式时,GPIO内部会连接一个下拉电阻(通常约30-50kΩ)到GND

  2. 当没有外部信号驱动时,下拉电阻会将引脚电压拉至低电平

VSS(负电源/地)

输出模式

由正负半导体控制 。

MOS

MOS(金属氧化物半导体)。

PMOS中的"P"

  • P代表Positive(正)

  • 当输出高电平时导通

NMOS中的"N"

  • N代表Negative(负)

  • 当输出低电平时导通

推挽输出

1上高,0下低;

开漏输出

PMOS断开,无效,只有NMOS在工作。

通用和服用输出

复用输出模式,与通用输出模式很是类似。只是输出的高低电平的来源,不是写程序让CPU直接写输出数据到寄存器,取而代之利用片上(stm32芯片上的)外设模块的复用功能输出来决定的。

GPIO编程控制步骤

1,使用RCC开启GPIO的时钟;

2,使用GPIO_Init()函数初始化GPIO;

3,使用输出/输出函数控制GPIO口。

GPIO的库函数

设置GPIO引脚电平

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

功能:设置指定GPIO端口的单个或多个引脚为高电平(置1)

参数

  • GPIOx:GPIO端口(如GPIOA、GPIOB等)

  • GPIO_Pin:要设置的引脚(可使用|组合多个引脚)

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

功能:设置指定GPIO端口的单个或多个引脚为低电平(置0)

参数

  • GPIOx:GPIO端口

  • GPIO_Pin:要清除的引脚(可使用|组合多个引脚)

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);

功能:设置指定GPIO端口的单个引脚状态

参数

  • GPIOx:GPIO端口

  • GPIO_Pin:要设置的引脚(只能单个引脚)

  • BitVal:引脚状态(Bit_SETBit_RESET

// 设置GPIOC的Pin4为高电平
GPIO_WriteBit(GPIOC, GPIO_Pin_4, Bit_SET);// 设置GPIOC的Pin4为低电平
GPIO_WriteBit(GPIOC, GPIO_Pin_4, Bit_RESET);

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

功能:一次性设置整个GPIO端口的输出状态

参数

  • GPIOx:GPIO端口

  • PortVal:16位值,表示所有引脚的状态(每个bit对应一个引脚)

// 设置GPIOA所有引脚状态:Pin0=1, Pin1=0, Pin2=1, 其他=0
GPIO_Write(GPIOA, 0x0005);  // 二进制 0000 0000 0000 0101

获取引脚输入/输出电平

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

相关文章:

  • ffmpeg录音测试
  • k8s node soft lockup (内核软死锁) 优化方案
  • <论文>(字节跳动)使用大语言模型进行时间序列理解和推理
  • Nginx 安全防护与HTTPS部署
  • 2025 RSAC|大语言模型应用风险与厂商攻防新策略
  • 【coze】故事卡片(图片、音频、文字)
  • 游戏引擎学习第261天:切换到静态帧数组
  • 瑞克的CTF
  • MySQL中的约束
  • 赛灵思 XCZU11EG-2FFVC1760I XilinxFPGAZynq UltraScale+ MPSoC EG
  • 第一章-语言基础\3.STL
  • https://juejin.cn/editor/drafts/7262346366541070395
  • 高性能网络优化:深入解析忙轮询(Busy Polling)技术
  • HTTP 与 HTTPS 的深度剖析:差异、原理与应用场景
  • 第11次:用户注册(简要版)
  • Ubuntu打开中文文本乱码
  • 使用AI应用开发平台搭建夸奖机器人,玩转AI【COZE入门案例-第1课】
  • 说下RabbitMQ的整体架构
  • STM32教程:串口USART通讯协议原理及分析(基于STM32F103C8T6最小系统板标准库开发)*详细教程*
  • 爬虫技术-利用Python和Selenium批量下载动态渲染网页中的标准文本文件
  • 苹果用户,安卓来“偷心”
  • 打造多元文旅消费场景,第四届长三角城市戏剧节启幕
  • 俄乌交换205名被俘人员,俄方人员已抵达白俄罗斯
  • 陕西礼泉一村民被冒名贷款40余万,法院发现涉嫌经济犯罪驳回起诉
  • 世界羽联主席巴达玛:中国组织赛事的能力无与伦比
  • 五一档观众最满意《水饺皇后》