STM32_GPIO

STM32_GPIO

1、STM32 GPIO简介

什么是GPIO?

General Purpose Input Output,即通用输入输出端口,简称GPIO

作用:负责采集为外部期间的信息(输入)或者控制外部器件工作(输出

  • 特点

    • 按组存在,组数视芯片而定,每组最多16个IO引脚
    • 快速翻转,每次翻转最快只需要两个时钟周期(F1最高速度可以达到50MHz)
    • 每个IO口都可以做中断
    • 支持8种工作模式
  • 电气特性

    • STM32工作电压范围

    2V <= VDD <= 3.6V,通常为3.3V

    • GPIO识别电压范围

      CMOS端口

      0:-0.3V <= VIL <= 1.164v

      1:1.833V <= VIH <= 3.6v

      通常为3.3V,带FT标志的可兼容5V

    • GPIO输出电流

    单个IO,最大25mA

    总和不能超过芯片总输入输出电流

1.1 IO端口基本结构介绍

在这里插入图片描述

  1. 保护二极管

    • 钳位电路

    • 输入电压 > VDD,上面的二极管导通

    • 输入电压 < VSS,下面的二极管导通

  2. 上下拉电阻

    • 阻值:30 ~ 50KΩ
  3. 施密特触发器

    • 可将非标准方波(如:正弦波)整形成方波
    • 输入电压 > 正向阈值电压,输出高电平
    • 输入电压 < 负向阈值电压,输出低电平
    • 负向阈值电压 < 输入电压 < 正向阈值电压,输出不变
  4. P-MOS管和 N-MOS

    • MOS管通过控制栅极电压(Vgs)实现导通或关闭
    • Vgs < 0,P导通
    • Vgs > 0,N导通

1.2 GPIO的八种模式分析

GPIO八种工作模式特点及应用
输入浮空输入用,完全浮空,状态不定
输入上拉输入用,用内部上拉,默认是高电平
输入下拉输入用,用内部下拉,默认是低电平
模拟功能ADC、DAC
开漏输出软件I2C的SDL、SCL等
推挽输出驱动能力强,25mA(max),通用输出
开漏式复用功能片上外设功能(硬件I2C的SDI、SCL引脚等)
推挽式复用功能片上外设功能(SPI的SCK、MISO、MOSI引脚等)
  • 输入浮空

    • 上拉电阻关闭
    • 下拉电阻关闭
    • 施密特触发器打开
    • MOS管均不导通
    • IO口为高阻态时,电平由外部环境决定
  • 输入上拉

    • 上拉电阻打开
    • 下拉电阻关闭
    • 施密特触发器打开
    • MOS管均不导通
    • IO口为高阻态时,呈现高电平
  • 输入下拉

    • 上拉电阻关闭
    • 下拉电阻打开
    • 施密特触发器打开
    • MOS管均不导通
    • IO口为高阻态时,呈现低电平
  • 模拟功能

    • 上拉电阻关闭
    • 下拉电阻关闭
    • 施密特触发器关闭
    • MOS管均不导通
    • 专门用于模拟信号输入输出
  • 开漏输出

    • 上拉电阻关闭
    • 下拉电阻关闭
    • 施密特触发器打开
    • P-MOS管**连接输出控制内的VDD**始终不导通
    • 往ODR对应位写0,经输出控制内的非门取反,N-MOS管导通;写1,经输出控制内的非门取反,N-MOS管不导通
    • 不能输出高电平,必须有外部(或内部)上拉才能输出高电平
  • 开漏式复用功能

    • 上拉电阻关闭
    • 下拉电阻关闭
    • 施密特触发器打开
    • P-MOS管**连接输出控制内的VDD**始终不导通
    • 不能输出高电平,必须有外部(或内部)上拉才能输出高电平
    • 由其他外设控制输出
  • 推挽输出

    • 上拉电阻关闭
    • 下拉电阻关闭
    • 施密特触发器打开
    • 往ODR对应位写0,经输出控制内的非门取反,N-MOS管导通;写1,经输出控制内的非门取反,P-MOS管导通
    • 可输出高低电平,驱动能力强
  • 推挽式复用功能

    • 上拉电阻关闭
    • 下拉电阻关闭
    • 施密特触发器打开
    • 可输出高低电平,驱动能力强
    • 由其他外设控制输出

1.3 GPIO寄存器介绍

  • GPIO通用寄存器GPIOx_yyy(F1系列)
名称功能
CRL配置工作模式,输出速度
CRH配置工作模式,输出速度
IDR输入数据
ODR输出数据
BSRR设置ODR寄存器值
BRRF4之后没有这个寄存器,考虑代码兼容性则不建议使用
LCKR配置锁定,用的不多
  • GPIO通用寄存器GPIOx_yyy(F4/F7/H7系列)
名称功能
MODER设置模式
OTYPER设置输出类型
OSPEEDR设置输出速度
PUPDR设置上下拉电阻
IDR输入数据
ODR输出数据
BSRR设置ODR寄存器值
LCKR配置锁定,用的不多

使用ODR控制输出,在读和修改访问之间产生中断时,可能会发生风险;BSRR则无风险

ODR修改:读 -> 改 -> 写

BSRR修改: 写

2、程序设计

2.1 通用外设驱动模型(四步法)

  1. 初始化
    • 时钟设置、参数设置、【IO设置、中断设置(开中断、设NVIC)可选】
  2. 读函数(可选)
    • 从外设读取数据(可选)
  3. 写函数(可选)
    • 往外设写入数据(可选)
  4. 中断服务函数(可选)
    • 根据中断标志,处理外设各种中断事务(可选)

GPIO需要实现前三步

2.2 GPIO配置步骤

  1. 使能时钟
    • __HAL_RCC_GPIOx_CLK_ENABLE()
  2. 设置工作模式
    • HAL_GPIO_Init()
  3. 设置输出状态(可选)
    • HAL_GPIO_WritePin()
    • HAL_GPIO_TogglePin()
  4. 读取输入状态(可选)
    • HAL_GPIO_ReadPin()
HAL库驱动函数主要寄存器功能
__HAL_RCC_GPIOx_CLK_ENABLE()RCC_APB2ENR开启GPIO时钟
HAL_GPIO_Init()CRL、CRH、ODR初始化GPIO
HAL_GPIO_WritePin()BSRR控制IO输出高/低电平
HAL_GPIO_TogglePin()BSRR每次调用IO输出电平翻转一次
HAL_GPIO_Init()CRL、CRH、ODR初始化GPIO
HAL_GPIO_WritePin()BSRR控制IO输出高/低电平
HAL_GPIO_TogglePin()BSRR每次调用IO输出电平翻转一次
HAL_GPIO_ReadPin()IDR读取IO电平
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值