STM32单片机入门教程---GPIO输出

GPIO是通用输入输出接口,可用于配置多种输入输出模式。STM32中的GPIO挂载在APB2总线上,每个GPIO外设包含16个引脚。输入部分包括保护二极管、上拉/下拉电阻和TTL施密特触发器,输出部分涉及位设置/清除寄存器和MOS管。文章还介绍了LED和蜂鸣器的工作原理,以及如何通过GPIO控制它们。硬件电路中,三极管用于开关控制。最后,文章提供了点亮LED和控制蜂鸣器的步骤及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GPIO简介

  • GPIO(General Purpose Input Output)通用输入输出口
  • 可配置8种输入输出模式
  • 引脚电平:0~3.3V,部分引脚可容忍5V(容忍5V的意思是可以输入5V电压,但是输出最大只能是3.3V,引脚定义中带FT的可以容忍5V)
  • 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等;(若控制功率比较大的电路,加入驱动模块即可)
  • 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等;

GPIO基本结构

在这里插入图片描述

  • 在STM32中,所有GPIO都是挂载在APB2外设总线上的;
  • GPIO分为GPIOA、GPIOB…每个GPIO外设都有16个引脚,第0号引脚叫做PA0…以此类推;
  • 寄存器(32位)的每一位对应一个引脚;

GPIO位结构

在这里插入图片描述

整体结构

  • 左边为寄存器,中间为驱动器,右边为对应某一个IO引脚;
  • 上边为输入部分,下边为输出部分;

输入部分

  • 保护二极管作用是限制IO引脚电压为0~3.3V,进而保护电路;
  • 上拉电阻和下拉电阻对应上拉输入模式(默认为高电平输入方式)和下拉输入模式(默认为低电平输入方式),如果两个电阻都不导通,则为浮空输入模式;
  • 上拉电阻和下拉电阻的作用是保证在引脚悬空时仍有高低电平,不至于使数据发生干扰;
  • TTL施密特触发器:对输入电压进行整形,如果输入电压大于某一阈值,输出瞬间升为高电平;如果输入电压低于某一阈值,输出瞬间变为低电平;如果输入电压在高低两个阈值之间,则输出不改变,原高为高,原低为低;可以避免因为数据波动造成的干扰现象;

输出部分

位设置/清除寄存器

单独操作输出数据寄存器的某一位,而不影响其他位;

MOS管

是一种电子开关,信号控制开关的导通和关闭,开关负责将IO口接到VDD或者VSS,进而选择推挽、开漏、关闭三种输出方式;

  • 推挽输出模式(强推输出模式):P-MOS和N-MOS均有效,数据寄存器为1时,上管导通,下管断开,输出直接接到VDD,输出高电平;数据寄存器为0时,上管断开,下管导通,输出直接接到VSS,输出低电平;【驱动能力较强】

  • 开漏输出模式:P-MOS无效,N-MOS工作,数据寄存器为1时,下管断开,即输出断开;数据寄存器为0时,下管导通,输出直接接到VSS,输出低电平;
    【只有低电平有驱动模式,高电平无驱动模式,可以作为通信协议的驱动方式,避免多机通信的相互干扰】
    【还可以用于输出5V的电压】

  • 关闭模式:两个MOS管都无效,即输出关闭,端口电平由外部信号来控制;

GPIO模式

通过配置GPIO的端口配置寄存器,端口可以配置成以下8种模式
在这里插入图片描述一个端口只能有一个输出,但可以有多个输入;

LED和蜂鸣器介绍

介绍

  • LED:发光二极管,正向通电点亮,反向通电不亮;
  • 有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定;
  • 无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,即可发出不同频率的声音;

硬件电路

  • 三极管:竖线为基极,带箭头的为发射极,剩下的为集电极。对于蜂鸣器上方的电路(PNP),基极给低电平导通,高电平断开;下方的电路(NPN),基极给高电平导通,低电平断开;【PNP的三极管最好接在上面,NPN的三极管最好接在下面】

面包板

中间部分纵向导通,上下两侧横向导通;
在这里插入图片描述

LED闪烁&LED流水灯&蜂鸣器

  • 接线图在程序源码的文件中查看;
    在这里插入图片描述
  • keilkill的作用:复制到工程文件夹后,双击即可删除运行过程中产生的中间文件,节约空间;
    在这里插入图片描述

点亮一个LED

原材料

  • 操作STM32的GPIO的三个步骤:
    使用RCC开启GPIO的时钟;
    使用GPIO_Init函数初始化GPIO;
    使用输出或者输入的函数控制GPIO口;

  • 查找库函数:在Library中寻找RCC和GPIO的头文件,双击打开,在头文件的最下面一般是所有库函数的声明,右键跳转到定义Definition;

  • RCC最常用的三个函数:RCC AHB外设时钟控制,RCC AHB2外设时钟控制,RCC AHB1 外设时钟控制;在这里插入图片描述

  • GPIO常用库函数:
    GPIO_Delnit,参数可以写GPIOA、GPIOB等,调用该函数后,所指定的GPIO外设就会被复位;
    AFIODelnit也是一样,可以复位AFIO外设;
    GPIO_Init的作用是用结构体的参数来初始化GPIO口,需要先定义结构体变量,对结构体赋值,再调用该函数;(Init函数在STM32基本所有外设都有)
    GPIO_StructInit可以把结构体变量赋一个默认值;
    下面是个就是GPIO的4个读取函数以及4个写入函数;

  • GPIO8种工作模式缩写:
    AIN(Analog IN)是模拟输入;
    IN_FLOATING是浮空输入;
    IPD(In Pull Down)是下拉输入;
    IPU(In Pull Up)是上拉输入;
    Out OD(Out Open Drain)是开漏输出;
    Out_PP(Out Push Pull)是推挽输出;
    AF_OD(Atl Open Drain)是复用开漏;
    AF_PP(Alt Push Pull)是复用推挽;

  • GPIO的四个输出函数:
    GPIO_SetBits:可以把指定的端口设置为高电平;
    GPIO_ResetBits:可以把指定的端口设置为低电平;
    GPIO_WriteBit:根据第三个参数Bitval的值来设置指定端口;
    GPIO_Write:可以同时对16个端口进行写入操作;

  • 延时函数Delay:微秒延时、毫秒延时、秒延时
    在这里插入图片描述

    代码

  • 点亮一个LED
    在这里插入图片描述

  • LED闪烁
    在这里插入图片描述

  • LED流水灯
    如果需要同时配置多个端口,可以使用按位或 | 的方式,或者定义中有同时全设置全部的也可以根据定义来使用;(一般来讲可以同时设置多个端口的函数名称都有加s)在这里插入图片描述
    在这里插入图片描述

  • 蜂鸣器
    A15、B3、B4端口为调试端口,使用需要另外配置;
    在这里插入图片描述
    在这里插入图片描述

总结

使用库函数的几种方法:

  • 打开头文件,拉到最后看一下有哪些函数,右键转到定义,查看函数和参数的用法;
  • 资料文件里面的库函数用户手册(版本有出入);
  • 百度查看别人的代码和解释;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值