STM32 GPIO学习指南
stm32 GPIO学习
1)GPIO功能描述
·引脚电平0-3.3V,部分可容忍5V(带FT)。
·输出模式下可以控制端口输出高低电平,用以驱动LED、控制蜂鸣器,模拟通信协议输出时序等;输入模式下可以读取端口的高低电平或者电压、用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
·GPIO基本结构:APB2<->GPIOA(寄存器-驱动器)-PA0~15
·GPIO的输出可以通过三种方式,分别是位设置寄存器(库函数使用),输出数据寄存器和位带
·GPIO位结构如图1所示:

图1 GPIO位结构图
·推挽输出可以输出高电平或低电平,开漏输出只能输出低电平
·开漏输出的作用有:通信协议驱动(I2C),输出5V信号
·GPIO的8种工作模式如表1所示:
表1

·GPIO端口为配置表和输出模式位如图2-3所示:

图1 端口位配置表

图2 输出模式位
2)GPIO功能配置(详细原件电路见图1)
2.1 GPIO输入配置
·输出缓冲器被禁止,施密特触发器输入激活
·根据输入配置(上拉,下拉或浮动),连接弱上拉和下拉电阻
·出现在I/O引脚上的数据在每个APB2始终被采样到输入数据寄存器
·对输入数据寄存器读访问可得到I/O状态
2.2 GPIO输出配置
·输出缓冲器被禁止,施密特触发器输入激活,弱上拉和下拉电阻
被禁止
·开漏模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将端口置于高组态(P-MOS从不被激活)
·推挽模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将激活P-MOS
·出现在I/O引脚上的数据在每个APB2始终被采样到输入数据寄存器(这样做的目的:一是允许软件读取引脚的实际状态,如开漏输出模式下的总线监测;二是用于诊断,比如检测是否短路或连接问题,推挽输出模式下的故障检测;三是支持某些特殊功能,比如在输出模式下同时监控引脚状态,如软件模拟双向通信。)0
·在开漏模式,对输入数据寄存器读访问可得到I/O状态
·在推挽模式,对输出数据寄存器读访问可得到最后一次写的值
·了解复用功能配置和模拟输入配置
·了解外设的GPIO配置
3)GPIO寄存器描述
·STM32一共有16个A和16个B口,可通过对GPIOx_CRL和GPIOx_CRH寄存器(各8个)的值修改直接控制GPIOx的工作状态,如图3所示

图3 GPIO寄存器描述
·例如GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=8;就是把GPIOA0配置成推挽上拉(下拉)输入模式
·了解输入输出数据寄存器ODR的配置,端口未设置/清除寄存器BSRR的配置,端口位清除寄存器BRR的配置。用BSRR和BRR去改变管脚状态的时候,没有被中断打断的风险。也就不需要关闭中断。
·了解端口配置锁定寄存器(GPIOx_LCKR)
·了解复用功能I/O和调试配置(AFIO)
4)GPIO实验内容
·GPIO初始化代码
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
·GPIO输出代码
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
·GPIO输入代码
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);
4.1 LED流水灯

4.2蜂鸣器

4.3 按键控制LED

4.4 光敏传感器控制蜂鸣器(我控制的是LED)

4.5 OLED调试工具
·调试方式:串口调试,显示屏调试,Keil调试模式,点灯调试,注释调试
·OLED:有机发光二极管,功耗低,响应速度快,宽视角,轻薄柔韧。0.96寸OLED,供电:3~5.5V,通信协议:4针I2C/7针SPI,分辨率128*64,四行十六列。
表1 OLED驱动函数


附学习参考网址
STM32入门教程-2023版 细致讲解 中文字幕
STM32 GPIO的配置寄存器(CRL、CRH)快速学习_gpioa->crh-CSDN博客
GPIO 配置之ODR, BSRR, BRR 详解_gpiox->brr-CSDN博客
作者:茯苓gao