STM32F1笔记(一)GPIO输出

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在后续如有项目需要再添加入笔记。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374425.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dataframe转化为array_【Python专栏】12 种高效 Numpy 和 Pandas 函数为你加速分析

来源:机器之心编译:Jamin、杜伟、张倩我们都知道,Numpy 是 Python 环境下的扩展程序库,支持大量的维度数组和矩阵运算;Pandas 也是 Python 环境下的数据操作和分析软件包,以及强大的数据分析库。二者在日常…

具有GlassFish和一致性的高性能JPA –第1部分

您以前听说过连贯性吗? 大概是。 它是那些著名的内存网格解决方案之一,该解决方案承诺了超快的数据访问速度和对经常使用的数据的无限空间。 一些众所周知的竞争对手是Infinispan , Memcached和Terracotta Ehcache 。 它们都很棒,…

如何在自己的代码中实现分享视频文件或者是图片文件到微信 QQ微博 新浪微博等!!!...

首先在文档第一句我先自嘲下 , 我是大傻逼, 弄了两天微信是视频分享,一直被说为啥跟系统的相册分享的不一样,尼玛!!! 这里来说正文,我这里不像多少太多,大家都是程序猿&a…

sql 数据库中用创建好的视图修改表数据

只要满足下列条件,即可通过视图修改基础基表的数据: 1、任何修改(包括 UPDATE、INSERT 和 DELETE 语句)都只能引用一个基表的列。 2、视图中被修改的列必须直接引用表列中的基础数据。不能通过任何其他方式对这些列进行派生&#…

boost原理与sklearn源码_机器学习sklearn系列之决策树

一、 Sklearn库 Scikit learn 也简称 sklearn, 自2007年发布以来,scikit-learn已经成为Python重要的机器学习库了。支持包括分类、回归、降维和聚类四大机器学习算法。还包含了特征提取、数据处理和模型评估三大模块。sklearn是Scipy的扩展,建立在NumPy和…

STM32F1笔记(二)GPIO输入

STM32 GPIO输入的经典应用是按键。 先看电路。声明:参考正点原子战舰开发板。 在这里可以看到,KEY_UP按键是高电平有效的,即当按下该按键时,GPIO读到高电平。 KEY0/1/2是低电平有效的,即当按下该按键时,G…

Google Authenticator:将其与您自己的Java身份验证服务器配合使用

用于移动设备的Google Authenticator应用程序是一个非常方便的应用程序,它实现了TOTP算法(在RFC 6238中指定)。 使用Google Authenticator,您可以生成时间密码,该密码可用于在共享请求用户密钥的身份验证服务器中授权用…

[Week2 作业] 代码规范之争

这四个问题均是出自 http://goodmath.scientopia.org/2011/07/14/stuff-everyone-should-do-part-2-coding-standards/ 。 我对这四个问题均持反驳的看法,下面是我的理由~ Q1:这些规范都是官僚制度下产生的浪费大家的编程时间、影响人们开发效率, 浪费时…

STM32F1笔记(三)UART/USART

UART:Universal Asynchronous Receiver/Transmitter(通用异步收/发器) USART:Universal Synchronous/Asynchronous Receiver/Transmitter(通用同步/异步串行收/发器) 从命名即可看出USART就是UART的基础上…

python安装界面翻译_python环境搭建

如果想要运行python需要有解释器和编辑器。 什么是解释器 解释器我们可以把它理解成翻译官,它是将我们写的python代码翻译成计算机能够懂得机器语言。 然后计算机收到解释器的命令来干活,最终再将结果反馈在解释器中。 解释器推荐使用anaconda3 什么是an…

无需重新部署Eclipse和Tomcat即可进行更改

他们说,由于应用程序服务器过大,Java的开发速度很慢–您必须重新部署应用程序才能看到所做的更改。 使用PHP,Python等脚本语言时,可以“保存并刷新”。 这个法定问题总结了这个“神话”。 是的,这是一个神话。 您也可以…

进阶篇-用户界面:4.Android中常用组件

1.下拉菜单 在Web开发中&#xff0c;HTML提供了下拉列表的实现&#xff0c;就是使用<select>元素实现一个下拉列表&#xff0c;在其中每个下拉列表项使用<option>表示即可。这是在Web开发中一个必不可少的交互性组件&#xff0c;而在Android中的对应实现就是Spinne…

收款单单据编号不正确

问题现象:现在在应收&#xff0c;应付的收款单录入和付款单录入里点击增加的话&#xff0c;单据编号如果是出现2024呢&#xff0c;按保存的话&#xff0c;就会出现单据号重复&#xff1b;查到的最大的单据号是3034&#xff0c;在流水号里改成3038后再增回加的话还是出现2024。然…

STM32F1笔记(四)NVIC中断优先级管理

STM32将中断分为5个组&#xff0c;组0~4。配置代码如下&#xff1a; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 在标准库里&#xff0c;分组的定义如下&#xff1a; /** defgroup Preemption_Priority_Group * {*/#define NVIC_PriorityGroup_0 ((uint32_t…

到底是什么程序和功能?

许多RDBMS支持“例程”的概念&#xff0c;通常将其称为过程和/或函数。 这些概念已经在编程语言中存在了一段时间了&#xff0c;而且不在数据库中。 区分程序和功能的著名语言是&#xff1a; 艾达 基本知识 帕斯卡 等等… &#xff08;存储的&#xff09;过程和&#xff08…

http的“无连接”指的是_http协议无状态中的 quot;状态quot; 到底指的是什么?...

引子&#xff1a;最近在好好了解http&#xff0c;发现对介绍http的第一句话【http协议是无状态的&#xff0c;无连接的】就无法理解了&#xff1a;无状态的【状态】到底指的是什么&#xff1f;&#xff01;找了很多资料不仅没有发现有一针见血正面回答这个问题的&#xff0c;而…

个人日志-7.4

姓名 刘鑫 时间 2016.7.4 学习内容 完善需求分析报告。撰写数据库设计说明书。初步安排计划概要设计说明书。调整项目开发计划说明书。 所遇问题 无 解决方案 无 转载于:https://www.cnblogs.com/liuxin13070013/p/5641967.html

通达信编程实例

1、放量a、今日比昨日的成交量放大了1倍&#xff1a;VOL/REF(VOL, 1)>2; b、今日的五日均量比五天前的五日均量放大了3倍&#xff1a;AA:MA(VOL, 5);BB:REF(AA, 5);AA/BB>4&#xff1b; c、今天的成交量达到了整个流通盘的10%以上(注意&#xff0c;10%的表达式是10/100或…

STM32F1笔记(五)外部中断EXTI

STM32的每个IO都可以作为外部中断的中断输入口。 STM32F103的中断控制器支持19个外部中断/事件请求。每个中断设有状态为&#xff0c;每个中断/事件都有独立的触发和屏蔽设置。 STM32F103的19个外部中断为&#xff1a; EXTI线0~15&#xff1a;对应外部IO口的输入中断。 EXT…

您不想错过的十大Java书籍

我们通过阅读书籍并进行实验来学习。 因此&#xff0c;必须选择最佳的可用选项。 在本文中&#xff0c;我想与一些书分享我的经验&#xff0c;以及它们如何帮助您发展为Java开发人员。 让我们从头开始&#xff0c;对于任何Java学生来说&#xff0c;前三本书都是一个很好的起点。…