目录

  • 输出模式(推挽/开漏)详细说明
  • 1、GPIO时钟使能开启,(操作RCC寄存器)
    • 1、查找外设挂接地址
    • 2、APB2 外设时钟使能
  • 2、配置GPIO初始化
  • 3、操作GPIO
  • 4、推挽输出点亮led灯

输出模式(推挽/开漏)详细说明

GPIO 引脚经过两个保护二极管后就分成两路,上面一路是“输入模式”, 下面一路是“输出模式,输出模式,线路经过一个由 P-MOS 和 N-MOS 管组成的单元电路,这让 GPIO 引脚具有了推挽和开漏两种输出模式.

推挽模式时双 MOS 管以推挽方式工作,输出数据寄存器GPIOx_ODR 可控制 I/O 输出高低电平。输入一个高电平时,P-MOS 管导通,N-MOS 管截止,对外输出高电(3.3V)。 输入一个低电平时,P-MOS 管截止,N-MOS 管导通,对外输出低电平(0V).当切换输入高低电平时,两个 MOS 管将轮流导通,一个负责灌电流(电流输 出到负载),一个负责拉电流(负载电流流向芯片),使其负载能力和开关速度 都比普通的方式有很大的提高

开漏模式时,不论输入是高电平还是低电平,P-MOS 管总处于关闭状 态。只有 N-MOS 管工作,输出 数据寄存器可控制 I/O 输出高阻态或低电平。输入低电平时,N-MOS 管导通,输出即为低电平。当输入 高电平时,N-MOS 管截止,引脚状态处于高阻态。因此想让引脚输出高电平,那么引脚必须外接一个上拉电阻, 由上拉电阻提供高电平。具有"线与"功能即多个开漏输出模式的引脚接在一起,只要有一个引脚为低电平,其他所有管脚都 为低

通用:输出速度可配置,有 2MHz\25MHz\50MHz 的选项。此处的输出速度即 I/O 支持的高低电平状态最高切 换频率,支持的频率越高,功耗越大,如果功耗要求不严格,把速度设置成最大 即可。
总结:开漏输出模式一般应用在 I2C、SMBUS 通讯等需要“线与”功能的总线电路中。推挽输出模式一般应用在需要较强的输出高电平时的驱动能力的场合。除了必须要用开漏输出模式的场合,我们一般选择推挽输出模式

1、GPIO时钟使能开启,(操作RCC寄存器)

1、查找外设挂接地址

要使能GPIO时钟我们必须知道它在哪条总线上,下面我们按图索骥:

ARM 将4GB 的存储器空间,平均分成了 8 块区域, 每块区域的大小是 512MB,
图1

图2

在这 8 个 Block 里面,Block0、Block1 和 Block2 这 3 个块是我们最为关 心的。因为它包含了 STM32 芯片的内部 Flash、RAM 和片上外设

查看图1或图2,我们知道片上外设在Block 2区域,Block2 用于设计片内外设,根据外设总线速度的不同,Block2 被划分为 AHB 和 APB 两部分,APB 又被分成 APB1 和 APB2 总线
图3
图4

查看图3和图4,我们根据地址范围,至此可以知道所有GPIO都在APB2上,因此我们使能APB2 外设时钟

2、APB2 外设时钟使能

图5

函数名
void RCC_APB2PeriphClockCmd(u32 RCC_APB2Periph, FunctionalState NewState)
功能:使能或者失能 APB2 外设时钟
RCC_APB2Periph函数参数取值范围
RCC_APB2Periph_AFIO ——功能复用 IO 时钟
RCC_APB2Periph_GPIOA —— GPIOA 时钟
RCC_APB2Periph_GPIOB ——GPIOB 时钟
RCC_APB2Periph_GPIOC —— GPIOC 时钟
RCC_APB2Periph_GPIOD —— GPIOD 时钟
RCC_APB2Periph_GPIOE ——GPIOE 时钟
RCC_APB2Periph_ADC1 ——ADC1 时钟
RCC_APB2Periph_ADC2 ——ADC2 时钟
RCC_APB2Periph_TIM1 ——TIM1 时钟
RCC_APB2Periph_SPI1 ——SPI1 时钟
RCC_APB2Periph_USART1 ——USART1 时钟
RCC_APB2Periph_ALL ——全部 APB2 外设时钟
NewState函数参数取值范围
ENABLE 或者 DISABLE
示例:使能GPIOB时钟

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

2、配置GPIO初始化

下面是对GPIO的具体配置
图6

重点函数
函数名: void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
功能:根据 GPIO_InitStruct 中指定的参数初始化外设 GPIOx 寄存器
GPIOx参数取值范围:x 可以是 A,B,C,D 或者 E,来选择 GPIO 外设
GPIO_InitStruct指针参数设置
typedef struct
{
u16 GPIO_Pin; //管脚选择
GPIOSpeed_TypeDef GPIO_Speed; //设置选中管脚的速率
GPIOMode_TypeDef GPIO_Mode; //管脚的工作状态
} GPIO_InitTypeDef;

示例

void LED_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//GPIOE时钟使能开启//结构体参数配置GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; //选择你要设置的IO口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//最高输出速率50MHZGPIO_Init(GPIOB, &GPIO_InitStructure);//根据指定的参数初始化外设 GPIOx 寄存器}

3、操作GPIO

函数:
函数名
void GPIO_SetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
功能:设置指定的数据端口位,(输出高电平)
GPIOx参数取值范围:A,B,C,D 或者 E
GPIO_Pin参数取值范围:GPIO_Pin_x(x 可以是 0-15)的任意组合,多个 |
示例:

GPIO_SetBits(GPIOB, GPIO_Pin_10 | GPIO_Pin_15);

函数名
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
功能:清除指定的数据端口位,(输出低电平)
GPIOx参数取值范围:A,B,C,D 或者 E
GPIO_Pin参数取值范围:GPIO_Pin_x(x 可以是 0-15)的任意组合,多个 |
示例

GPIO_ResetBits(GPIOB, GPIO_Pin_10 | GPIO_Pin_15);

4、推挽输出点亮led灯

除了主函数这样操作,其他的必要的.c .h也是必要的
GPIO外设的库文件:stm32f10x_gpio.c、 stm32f10x_gpio.h

#include "stm32f10x.h"
void delay(u32 i)
{while(i--);
}
void LED_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//GPIOE时钟使能开启GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; //选择你要设置的IO口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//最高输出速率50MHZGPIO_Init(GPIOE, &GPIO_InitStructure);GPIO_SetBits(GPIOE, GPIO_Pin_5);}
int main()
{LED_Init();while(1){GPIO_ResetBits(GPIOE, GPIO_Pin_5);//清除指定的数据端口位,给低电平delay(6000000);GPIO_SetBits(GPIOE, GPIO_Pin_5);//设置指定的数据端口位,给高电平delay(6000000);}
}

STM32F103学习笔记(1)掌握GPIO操作—输出模式(推挽/开漏)相关推荐

  1. STM32 GPIO的输入、输出模式的介绍应用总结(模拟/浮空/上拉/下拉/推挽/开漏)

    GPIO的输入.输出总结 一.输入模式 1.GPIO_Mode_AIN(==模拟输入==) 2.GPIO_Mode_IN_FLOATING(==浮空输入==) 3.GPIO_Mode_IPD(==下拉 ...

  2. STM32F103学习笔记四 时钟系统

    STM32F103学习笔记四 时钟系统 本文简述了自己学习时钟系统的一些框架,参照风水月 1. 单片机中时钟系统的理解 1.1 概述 时钟是单片机的脉搏,是单片机的驱动源 用任何一个外设都必须打开相应 ...

  3. C# 学习笔记(19)操作SQL Server下

    C# 学习笔记(19)操作SQL Server下 ADO.net操作数据库 这应该是比较老的技术了,以后有空的话学学 Linq /// <summary> /// 数据库使用类 /// & ...

  4. C# 学习笔记(18)操作SQL Server 中

    C# 学习笔记(18)操作SQL Server 中 数据库基础操作 SQL语法可以参考 菜鸟教程 或者微软官方的SQL示例 注意SQL不区分大小写 查 1.基础查询 --最基础的查询语句, selec ...

  5. C# 学习笔记(17)操作SQL Server 上

    C# 学习笔记(17)操作SQL Server上 安装SQL Server 微软官网 https://www.microsoft.com/zh-cn/sql-server/sql-server-dow ...

  6. Python学习笔记:使用Python操作数据库

    Python学习笔记:使用Python操作数据库 一.数据库编程接口 为了对数据库进行统一的操作,大多数语言都提供了简单的.标准化的数据库接口(API).在Python Database API 2. ...

  7. JPA学习笔记---JPA数据的操作:增加,删除,修改,获取,使用JPQL进行查询

    JPA学习笔记---JPA数据的操作:增加,删除,修改,获取,使用JPOL进行查询 创梦技术交流平台:资源下载,技术交流,网络赚钱: 交流qq群:1群:248318056 2群:251572072 技 ...

  8. python复制指定字符串_python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)...

    python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...

  9. STM32F103学习笔记(5)——数码管驱动TM1650使用

    一.简介 TM1650 是一种带键盘扫描接口的 LED(发光二极管显示器)驱动控制专用电路.内部集成有 MCU 输入输出控制数字接口.数据锁存器.LED 驱动.键盘扫描.辉度调节等电路.TM1650 ...

最新文章

  1. 兰州大学C语言程序设计课程作业,【兰州大学|兰州大学C语言程序设计课程作业( 五 )】语言程序设计|课程|作业-傻大方...
  2. 京东架构师解析URL监控
  3. 自己写一个树形导航菜单
  4. Tomcat源码分析 - 1
  5. Artifactory——启动错误[Artifactory failed to initialize: check Artifactory logs for errors.]解决方案
  6. c语言 大雨 班上多个同学准备,2015年计算机二级考试《C语言》提高练习题(7)
  7. 十大面试问题解惑,秒杀一切HR、技术面试。iOS程序员必读!
  8. 印尼商品期货交易监管局考虑对加密货币交易征税
  9. 天梯—奇偶分家(C语言)
  10. 负载均衡之让nginx跑起来
  11. Otsu‘s Thresholding的工作原理
  12. 屏幕录像专家V2014(附注册码)
  13. mysql-front源码_MySQL-Front(5.3版本)
  14. Python-根据日期计算周对应的日期
  15. WOS/EI/SCOPUS 三大文献检索数据库区别你了解吗?
  16. jsp是在html里面嵌入哪种代码?_是否要从单片机转嵌入式Linux?
  17. android pppd流程,一种基于PPPD实现PPP‑Server功能的通信模块及其实现方法与流程...
  18. 如何通过YouTube实现财富自由?
  19. Jetson NX设置nvme固态硬盘为系统盘
  20. 1-Java的诞生和发展

热门文章

  1. 天天快递电子面单接口对接说明及案例
  2. warning: CRLF will be replaced by LF in 出现的原因和解决办法
  3. 五轴数控转台_你真的了解五轴加工吗?看完你会恍然大悟!
  4. 微型计算机按照结构划分共分为几种,2016计算机一级《MS Office》基础习题与解析...
  5. java开发装机指南
  6. 风雷影音v2.1.1.0落雪梨花绿色精简版【首家独创双播放内核架构、全面支持高清格式】...
  7. 笔记本安装Win2012R2 心得(包含无线网卡+有线网卡驱动解决方法)
  8. 软件解决机械键盘连击问题(或许是最佳实践); 软件解决鼠标连击问题
  9. Ubuntu 完全关闭桌面特效
  10. Andoird 软键盘的弹出、收起(二)