STM32标准库学习笔记-2.GPIO

参考教程:【STM32入门教程-2023版 细致讲解 中文字幕】

标准库开发新建工程准备工作:

  1. 建立工程文件夹,Keil中新建工程,选择型号STM32F103C8T6
  2. 工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
  3. 工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
  4. 工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹
  5. 工程选项,C/C++,Define内定义STM32F10X_MD,USE_STDPERIPH_DRIVER
  6. 工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run

STM32标准库工程架构:

GPIO简介:

  1. GPIO(General Purpose Input Output)通用输入输出口其接脚可以供使用者由程序控制自由使用
  2. 可配置为8种输入输出模式
  3. 引脚电平:0V~3.3V,部分引脚可容忍5V
  4. 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
  5. 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等

GPIO基本结构:

驱动器能够增加IO口的驱动能力。GPIO挂载在APB2上(APB (Advanced Peripheral Bus) 低速总线,用来接低速外设的。)

GPIO配置模式:

GPIO标准库代码流程:

1.使能RCC(Reset and Clock Control)复位与时钟控制器

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

2.定义GPIO_InitTypeDef 结构体,赋值初始化参数

GPIO_InitTypeDef GPIOA_InitTypeStruct;

GPIOA_InitTypeStruct.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIOA_InitTypeStruct.GPIO_Pin = GPIO_Pin_0; //0引脚

GPIOA_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz; //50MHz速度

3.将结构体取地址传入GPIO_Init函数,指明初始化GPIO为GPIOA组(每一组有16个引脚)

GPIO_Init(GPIOA,&GPIOA_InitTypeStruct);

4.使用GPIO相关的库函数对GPIO进行操作

推挽输出和开漏输出

推挽式输出(Push-Pull Output)

推挽式输出电路是由互补的两个三极管构成,所谓推拉,推是指推出去,就是输出为高电平是,电流是由内流向外的,形象的称之为推;拉就是从外部向内部拉,当输出为低电平时,电流由负载流向内部,形象的称之为拉。

开漏输出(Open Drain Output)

常说的与推挽输出相对的就是开漏输出,对于开漏输出和推挽输出的区别最普遍的说法就是开漏输出无法真正输出高电平,即高电平时没有驱动能力,需要借助外部上拉电阻完成对外驱动。下面就从内部结构和原理上说明为什么开漏输出输出高电平时没有驱动能力,以及进一步比较与推挽输出的区别。

驱动能力:又称之为带负载能力,说白了,就是指该电路的输出阻抗小,使得外接负载电路时,输出电路的输出电压能绝大部分加在负载上,就称之为带负载能力强。

八种配置模式的宏定义:

(1)GPIO_Mode_AIN 模拟输入

(2)GPIO_Mode_IN_FLOATING 浮空输入

(3)GPIO_Mode_IPD 下拉输入

(4)GPIO_Mode_IPU 上拉输入

(5)GPIO_Mode_Out_OD 开漏输出

(6)GPIO_Mode_Out_PP 推挽输出

(7)GPIO_Mode_AF_OD 复用开漏输出

(8)GPIO_Mode_AF_PP 复用推挽输出

相关推荐
Charles Ray11 分钟前
C++学习笔记 —— 内存分配 new
c++·笔记·学习
重生之我在20年代敲代码11 分钟前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记
我要吐泡泡了哦1 小时前
GAMES104:15 游戏引擎的玩法系统基础-学习笔记
笔记·学习·游戏引擎
骑鱼过海的猫1231 小时前
【tomcat】tomcat学习笔记
笔记·学习·tomcat
贾saisai3 小时前
Xilinx系FPGA学习笔记(九)DDR3学习
笔记·学习·fpga开发
北岛寒沫3 小时前
JavaScript(JS)学习笔记 1(简单介绍 注释和输入输出语句 变量 数据类型 运算符 流程控制 数组)
javascript·笔记·学习
烟雨666_java3 小时前
JDBC笔记
笔记
GEEKVIP3 小时前
Android 恢复挑战和解决方案:如何从 Android 设备恢复删除的文件
android·笔记·安全·macos·智能手机·电脑·笔记本电脑
铁匠匠匠5 小时前
从零开始学数据结构系列之第六章《排序简介》
c语言·数据结构·经验分享·笔记·学习·开源·课程设计
Moliay6 小时前
【资料分析】刷题日记2
笔记·公考·行测·常识·资料分析