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 复用推挽输出

相关推荐
IMPYLH4 小时前
Python 的内置函数 reversed
笔记·python
星辰pid4 小时前
STM32控制四自由度机械臂(SG90舵机)(硬件篇)(简单易复刻)
stm32·单片机·嵌入式硬件·机械臂
威桑6 小时前
STM32 专有名词缩写整合
stm32·单片机·嵌入式硬件
码荼7 小时前
学习开发之hashmap
java·python·学习·哈希算法·个人开发·小白学开发·不花钱不花时间crud
武昌库里写JAVA8 小时前
Oracle如何使用序列 Oracle序列使用教程
java·开发语言·spring boot·学习·课程设计
ysa0510308 小时前
数论基础知识和模板
数据结构·c++·笔记·算法
祁思妙想8 小时前
八股学习(三)---MySQL
数据库·学习·mysql
今天背单词了吗9808 小时前
算法学习笔记:7.Dijkstra 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·开发语言·数据结构·笔记·算法
mitt_9 小时前
《人生顶层设计》读书笔记7
笔记
智者知已应修善业9 小时前
【51单片机节日彩灯控制器设计】2022-6-11
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机