STM32F1笔记(一)GPIO输出

发布者:人妙果华最新更新时间:2019-08-07 来源: eefocus关键字: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在后续如有项目需要再添加入笔记。


关键字:STM32F1  GPIO输出 引用地址:STM32F1笔记(一)GPIO输出

上一篇:STM32407串口控制PWM占空比和频率
下一篇:stm32 F407串口通信出现乱码

推荐阅读最新更新时间:2024-11-06 17:21

STM32F1的DMA使用
在前面我们提到过 DMA,这一章我们就来学习 STM32F1 的DMA 使 用。要实现的功能是:通过 K_UP 按键控制 DMA 串口 1 数据的传送,在传送过程中让 D2 指示灯不断闪烁,直到数据传送完成。D1 指示灯闪烁提示系统正常运行。学习时可以参考《STM32F10x 中文参考手册》-10 DMA 控制器(DMA)章节。 DMA 简介 DMA,全称是 Direct Memory Access,中文意思为直接存储器访问。DMA 可用于实现外设与存储器之间或者存储器与存储器之间数据传输的高效性。之所以称为高效, 是因为 DMA 传输数据移动过程无需 CPU 直接操作, 这样节省的 CPU 资源就可供其它操作使用。
[单片机]
<font color='red'>STM32F1</font>的DMA使用
LPC2478 GPIO 输出控制
void main(){ //将P3.25 P3.28 P3.26 P3.29配置成输出模式,默认为上拉输出 //初始化 PINSEL7&=(~(3 18)); FIO3DIR |= 1 25; //P3.25/OUT DIR PINSEL7&=(~(3 24)); FIO3DIR |= 1 28; //P3.28/OUT DIR PINSEL7&=(~(3 20)); FIO3DIR |= 1 26; //P3.26/OUT ENA PINSEL7&=(~(3 26)); FIO3DIR |= 1 29; //P3.29/OUT ENA //输出高低电平 FIO3CLR |= 1 26; FIO3SET |=
[单片机]
arm7单片机编程实例,ARM7之输入/输出端口GPIO编程教程
  一、输入/输出端口GPIO编程   一—(01)、一位数码管静态显示(通过74HC595实现)   1、管脚连接模块   首先介绍一下LPC2106的相关的管脚~~   特性:可以实现独立的管脚配置   应用:管脚连接模块的用途是将管脚配置为需要的功能(这一章节主要就是介绍GPIO功能~~别的会在接下来的章节中分别予以介绍~~)   描述:管脚连接模块可以使所选管脚具有一个以上的功能。配置寄存器控制多路开关来连接管脚与片内外设。外设在激活和任何相关只读使能之前必须连接到适当的管脚。任何使能的外设功能如果没有映射到相应的管脚,则被认为是无效的。   寄存器的描述:   管脚连接模块包括两个寄存器:   管脚功能
[单片机]
arm7单片机编程实例,ARM7之输入/<font color='red'>输出</font>端口<font color='red'>GPIO</font>编程教程
STM32单片机的GPIO输入、输出模式与配置方法
STM32 单片机是一款高性能、低功耗的 32 位微控制器,具有强大的计算能力、灵活的外设模块和实现微控制器应用所需的社区支持。在单片机应用中,GPIO 输入输出模式是必不可少的硬件接口之一。本文将介绍 STM32 单片机的 GPIO 输入、输出模式与配置方法。 一、 STM32 单片机 GPIO 简介 GPIO ,全称 General Purpose Input/Output,即通用输入输出口。它是一个通用的数字电平接口,可以极大地扩展单片机的应用范围。GPIO 的主要功能就是承载数据,它是单片机与外部设备或硬件进行数据通讯的桥梁,也是微控制器的重要运行部件之一。 STM32 单片机的 GPIO 端口主要分为以下两种: 1
[单片机]
STM32 GPIO的输入输出-HAL库
本文将介绍STM32基于HAL库的GPIO使用,利用上文创建好的HAL库工程模板,可以方便的编写应用程序。 我们目标是编写一个LED灯和按键的使用例子,每按下一次按键,LED的亮灭状态将进行一次反转。 1. LED软件设计 我们创建 led.h 和 led.c 在工程模板的inc和src文件夹中。 1.1 头文件定义 该模块代码作用是防止在某一个代码文件中引入多个.h文件时,防止重复引入同一个.h文件,如果重复引入的话,在编译时候汇报“redefine”错误。 ifndef 全称是 if not define ,当在一个代码中第一次引入led.h文件时__LED_H未定义,则代码会继续往下执行,同时定义了__LED
[单片机]
STM32F1外部中断的使用
中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部中断,2个定时/计数器中断和一个串口中断,但是在STM32中,中断数量大大增加,而且中断的设置也更加复杂。今天就将来探讨一下关于STM32中的中断系统。 1 基本概念 ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级设置8bit中的高4位。 STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字节PRI
[单片机]
STM32F1系列单脉冲模式下最小脉宽为多少?
在微控制器领域,STM32F1系列是一款非常流行的产品,广泛应用于各种嵌入式系统设计。该系列微控制器具有多种特性,其中包括单脉冲模式。在这种模式下,最小脉宽是一个重要的参数,它决定了脉冲信号的持续时间。 STM32F1系列微控制器的PWM(脉冲宽度调制)功能可以产生不同宽度的脉冲。关于最小脉冲宽度的具体数值,这取决于具体的硬件配置和编程设置。 在硬件上,STM32F1系列微控制器通常具有内置的PWM模块,可以配置为产生不同频率和占空比的脉冲。然而,具体的最小脉冲宽度限制取决于硬件电路设计和配置。 在软件编程方面,可以通过设置PWM模块的参数来配置脉冲的宽度。一般来说,可以通过设置比较匹配值或计时器溢出值等方式来控制脉冲宽度。具
[单片机]
【STM32F103】使用库函数点亮LED(GPIO输出
使用库建立好工程模板,就可以方便的使用STM32标准库来编写应用程序了,LED的控制使用到GPIO外设的基本输出功能。 本部分实验使用的是野火STM32F103开发板,硬件资源如上。 这是一个RGB灯,由红蓝绿三色组成,可以通过PWM控制混色。 这些LED的阴极接在GPIO引脚1、0、5,只要我们控制GPIO引脚电平输出状态,就可以控制灯的亮灭。 首先要写LED控制引脚及亮灭相关的宏定义: // bsp_led.h #ifndef __BSP_LED_H #define __BSP_LED_H #include stm32f10x.h #define LED_G_GPIO_PIN GPI
[单片机]
【STM32F103】使用库函数点亮LED(<font color='red'>GPIO</font><font color='red'>输出</font>)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved