GPIO:General Purpose Input Output (通用输入/输出)。

GPIO最经典应用:LED灯。

先看电路。声明:参考正点原子战舰开发板。

与LED串联的电阻称为限流电阻。

限流电阻计算公式:R=(U-LED压降)/20ma。

U为LED工作电压,LED一般最大电流为20ma。

在此R=(3.3-0.7)/0.02=130Ω。

因此本次示例中限流电阻阻值大于130Ω,才不会烧坏LED。

再看代码。

GPIO初始化。

void LED_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_SetBits(GPIOB, GPIO_Pin_5);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;GPIO_Init(GPIOE, &GPIO_InitStructure);GPIO_SetBits(GPIOE, GPIO_Pin_5);
}

LED应用

void HW_Led0_Off(void)
{GPIO_SetBits(GPIOB, GPIO_Pin_5);    //设置GPIO输出1
}void HW_Led0_on(void)
{GPIO_ResetBits(GPIOB, GPIO_Pin_5);  //设置GPIO输出0
}void HW_Led1_Off(void)
{GPIO_SetBits(GPIOE, GPIO_Pin_5);    //设置GPIO输出1
}void HW_Led1_on(void)
{GPIO_ResetBits(GPIOE, GPIO_Pin_5);  //设置GPIO输出0
}

思考:为什么IO输出低电平时LED亮,而不是输出高电平?

思路:

1、由于单片机的I/O口的结构决定了它灌电流能力较强,而拉电流能力比较弱(即IO口的低平驱动能力较强而高电平驱动能力较差);

2、为了简化单片机接口的设计。高电平驱动和低电平驱动是同样的效果,另外,低电平驱动也简化了控制代码,避免了单片机上电复位时端口置高电平后对led的影响;

从STM32中文参考手册内得知,STM32的GPIO可配置为八种模式。

1、浮空输入(Input floating)

2、上拉输入(Input pull-up)

3、下拉输入(Input pull-down)

4、模拟输入(Analog)

5、开漏输出(Output open-drain)

6、推挽式输出(Output push-pull)

7、推挽式复用功能(Alternate function push-pull)

8、开漏复用功能(Alternate function open-drain)

typedef enum
{ GPIO_Mode_AIN = 0x0,GPIO_Mode_IN_FLOATING = 0x04,GPIO_Mode_IPD = 0x28,GPIO_Mode_IPU = 0x48,GPIO_Mode_Out_OD = 0x14,GPIO_Mode_Out_PP = 0x10,GPIO_Mode_AF_OD = 0x1C,GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;

驱动LED使用的是推挽输出。推挽电路(push-pull)就是两个不同极性晶体管间连接的输出电路。

简单理解推挽和开漏的区别:驱动能力不同。推挽驱动能力强。

复用意思是GPIO不作为普通IO,而是特殊功能使用,比如ADC、USART等。

更深层次的研究可参考链接博客:https://blog.csdn.net/techexchangeischeap/article/details/72569999

引脚输出速度有3种:

typedef enum
{ GPIO_Speed_10MHz = 1,GPIO_Speed_2MHz, GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;

GPIO的速度应该与应用匹配。速度配置越高,噪声越大,功耗越大。

比如配置为串口应用,波特率为115200,此时GPIO的速度配置为2MHz就够了,既省电也噪声小。

I2C接口,400K波特率,若想把余量留大些,可以配置为10MHz。

SPI接口,18M或9M需要选用50MHz的GPIO速度。

输入模式的讲解在下一篇笔记。

特殊应用重映射I/O在后续如有项目需要再添加入笔记。

STM32F1笔记(一)GPIO输出相关推荐

  1. STM8S自学笔记-003 GPIO输出:点亮LED灯 and 跑马灯特效

    STM8S自学笔记-003 GPIO输出:点亮LED灯 and 跑马灯特效 点亮LED GPIO初始化函数:GPIO_Init() GPIO电平操作库函数:GPIO_WriteHigh().GPIO_ ...

  2. 笔记(5) —— GPIO 输出高低电平

    文章目录 一. 适用功能 二. 硬件设计(参考) 三. 软件设计 ① 使用到的固件库文件 ② 代码整理 一. 适用功能 GPIO 翻转.LED 闪烁.无源蜂铃器.跑马灯等 GPIO 输出高低电平控制. ...

  3. 立创梁山派学习笔记——GPIO输出控制

    梁山派 前言 开发板简介 GD32F407ZGT6官方资源 数据手册 1.系统框图 2. 引脚复用表 3.命名规则 4.其他 用户手册 固件库与PACK包 开发环境搭建 立创官方的资料包 资料齐活,开 ...

  4. NRF51822开发笔记-5.nRF51822裸机实验GPIO输出驱动LED

    NRF51822开发笔记-5.nRF51822裸机实验GPIO输出驱动LED 一.例程分析 1.多个GPIO输出模式配置函数 2.单个GPI0输出模式配置函数 GPIO输出高电平函数 二.程序设计 一 ...

  5. 启明云端分享|ESP32学习笔记参考GPIO口操作

    提示:作为Espressif(乐鑫科技)大中华区合作伙伴及sigmastar(厦门星宸)VAD合作伙伴,我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考.同时也用 ...

  6. gpio驱动广播Android,[RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED【转】

    Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 由于板子没有lcd无法得知sd卡升级是否完成,因此使用LED显示. Recovery中升级完成后控 ...

  7. STM32复习笔记(五) —— GPIO锁定机制

    STM32复习笔记(五) -- GPIO锁定机制 1.GPIO 锁定机制 锁定机制可以锁定 IO 口的配置,锁定一个端口位之后,直至下一次复位之前,将不能再更改端口位的配置 2.本例程软件设计思路 1 ...

  8. stm32核心板可以点亮灯吗_二、STM32的GPIO输出操作

    这是我STM32F103C8T6开发笔记专栏的一部分.可以到专栏中查阅更多内容. STM32F103C8T6开发笔记整理​zhuanlan.zhihu.com [写在前面]: 这篇笔记的内容,主要是指 ...

  9. 面向应用学习stm32(1)-GPIO输出点亮灯

    前导:本文的目的与,意在于面向应用的学习单片机,故不会涉及太多的原理知识,例如寄存器之类的. 主要目的在于面向应用的学习单片机,学会单片机的基础用法,开发板采取野火的指南者f103. 作者大二小白,写 ...

最新文章

  1. 做项目经理到底有多爽?
  2. SQL操作语句之查询及删除重复记录的方法
  3. 对冲基金BKCM LLC创始人看涨BCH
  4. PHP之高性能I/O框架:Libevent(二)
  5. 浏览器窗口的高度和宽度
  6. java 执行html里的js_如何用java执行指定页面中的js代码
  7. 前端学习(536):多列布局3列得间距
  8. C++ 多继承中的多义性
  9. Python写入文件,但是发现文件为空,竟然未写入!
  10. 主题模型TopicModel:LSA(隐性语义分析)模型和其实现的早期方法SVD
  11. php开源源码管理后台小程序团购,秒杀,分销 高可用
  12. linux最好的mp4软件,【良心推荐】5款好用的MP4视频编辑器
  13. Android应用快捷方式
  14. python 使用qq登陆搜狗微信搜索
  15. 搜遍全网,终于找到一个适合新手入门的物联网教程
  16. 12000字解读白小T:成立1年创收1亿,单品类策略如何引爆流行?
  17. 网鼎杯 Comment 解题记录
  18. java去除html代码中含有的html、js、css标签,获取文字内容
  19. Python保姆级教程.pdf,太全了!
  20. 《大话设计模式》php版本

热门文章

  1. Ajax中的url使用规则
  2. 佛山市南海技师学校计算机类,佛山南海信息技术学校2021年有哪些专业
  3. 使用FormData进行Ajax请求上传文件
  4. 史上最全的HTML和CSS标签常用命名规则
  5. Inside Kolla - 04 Kolla 目录结构
  6. Sum of Even Numbers After Queries
  7. 不要怂,就是GAN (生成式对抗网络) (五):无约束条件的 GAN 代码与网络的 Graph...
  8. SEO 百度后台主动推送链接
  9. Topcoder SRM 648 (div.2)
  10. swift入门之TableView