stm32f407VET6 系统学习 day01 GPIO 配置

这篇具有很好参考价值的文章主要介绍了stm32f407VET6 系统学习 day01 GPIO 配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. GPIO 的5个配置  

GPIO,即通用I/O(输入/输出)端口,是STM32可控制的引脚。STM32芯片的GPIO引脚与外部设备连接起来,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。

STM32F407有7组IO。分别为GPIOA~GPIOG,每组IO有16个IO口,共有112个IO口  通常称为 PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。  并且F4系列是基于Cortex-M4内核 

GPIO的复用:

STM32F4 有很多的内置外设,这些外设的外部引脚都是与 GPIO 共用的。也就是说,一个引脚可以有很多作用,但是默认为IO口,如果想使用一个 GPIO内置外设的功能引脚,就需要GPIO的复用,那么当这个 GPIO 作为内置外设使用的时候,就叫做复用。    比如说串口  就是GPIO复用为串口.

 配置: 

1.引脚号:                GPIO_Pin

2. 工作模式:           GPIO_Mode

3. 配置速度:            GPIO_Speed

4.输出/输入的方式:  GPIO_OType

5.有无上拉电阻 :       GPIO_PuPd  


分析每个配置的参数:

 

1. 引脚号   参数 (17 个)

stm32f407VET6 系统学习 day01 GPIO 配置

 GPIO_Pin_x (0--15)


2. 工作模式    (4个参数)

typedef enum
{ 
  GPIO_Mode_IN   = 0x00, /*!< GPIO Input Mode */
  GPIO_Mode_OUT  = 0x01, /*!< GPIO Output Mode */
  GPIO_Mode_AF   = 0x02, /*!< GPIO Alternate function Mode */
  GPIO_Mode_AN   = 0x03  /*!< GPIO Analog Mode */
}GPIOMode_TypeDef;

        GPIO_Mode_IN     端口为输入模式

        GPIO_Mode_OUT    端口为输出模式

         GPIO_Mode_AF      端口为 复用模式 

        GPIO_Mode_AN      端口 为  GPIO模拟模式

解释:

复用模式: STM32有很多内置外设,这些外设的外部引脚都是与GPIO复用的。一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。(简单来说 ,这个口子,我同时需要做 输出和输入, 这就是复用 )

GPIO模拟模式:引脚信号直接连接模拟输入,实现对外部信号的采集,可以收集 0~Vss 的电压 值。 (简单点, ADC   DAC   数模转换,模数转换的 专用模式        )


 3.速度 参数 

typedef enum
{ 
  GPIO_Low_Speed     = 0x00, /*!< Low speed    */
  GPIO_Medium_Speed  = 0x01, /*!< Medium speed */
  GPIO_Fast_Speed    = 0x02, /*!< Fast speed   */
  GPIO_High_Speed    = 0x03  /*!< High speed   */
}GPIOSpeed_TypeDef;

/* Add legacy definition */
#define  GPIO_Speed_2MHz    GPIO_Low_Speed    
#define  GPIO_Speed_25MHz   GPIO_Medium_Speed 
#define  GPIO_Speed_50MHz   GPIO_Fast_Speed 
#define  GPIO_Speed_100MHz  GPIO_High_Speed  

GPIO_Low_Speed             速度为   2MHZ

GPIO_Medium_Speed      速度为   25MHZ

GPIO_Fast_Speed            速度为   50MHZ

GPIQ_High_Speed            速度为   100MHZ


4.输出/输入的方式:  2个参数

typedef enum
{ 
  GPIO_OType_PP = 0x00,
  GPIO_OType_OD = 0x01
}GPIOOType_TypeDef;

GPIO_OType_PP       推挽输出  (推挽输出既可以输出高电平也可以输出低电平。)

GPIO_OType_OD        开漏输出   (只能输出低电平,要想输出高电平必须要接上拉电阻)


5.有无上拉电阻 :        (3个参数)

typedef enum
{ 
  GPIO_PuPd_NOPULL = 0x00,
  GPIO_PuPd_UP     = 0x01,
  GPIO_PuPd_DOWN   = 0x02
}GPIOPuPd_TypeDef;

GPIO_PuPd_NOPULL     ( 浮空)

GPIO_PuPd_UP          (上拉电阻)   (开始的时候这个 端口的 电平是高电平)

GPIO_PuPd_DOWN      (下拉电阻)  (开始的时候这个端口的 电平是低电平)



6.配置输入输出模式有下面几点值得注意:

作为普通GPIO输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时不要使能该引脚对应的所有复用功能模块。

作为普通GPIO输出:根据需要配置该引脚为推挽输出或开漏输出,同时不要使能该引脚对应的所有复用功能模块。

作为普通模拟输入:配置该引脚为模拟输入模式,同时不要使能该引脚对应的所有复用功能模块。

作为内置外设的输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时使能该引脚对应的某个复用功能模块。


7.配置为 八种工作模式

stm32f407VET6 系统学习 day01 GPIO 配置

4种输入模式

(1)GPIO_Mode_IN_FLOATING 浮空输入
(2)GPIO_Mode_IPU 上拉输入
(3)GPIO_Mode_IPD 下拉输入
(4)GPIO_Mode_AIN 模拟输入

4种输出模式 

(5)GPIO_Mode_Out_OD 开漏输出(带上拉或者下拉)
(6)GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)
(7)GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉)
(8)GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)


8. 开始配置 8种模式

1. GPIO_Mode_IN_FLOATING 浮空输入

     
//1.配置时钟: 给个心跳。 选择需要的时钟频率
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    GPIO_InitTypeDef GIOSTRUCT;
	
	//2.配置功能: 功能太多。 选择GPIO功能;
	GIOSTRUCT.GPIO_Mode=GPIO_Mode_IN ; // 输入模式 
	GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引脚 
	GIOSTRUCT.GPIO_PuPd=GPIO_PuPd_NOPULL     ;  //  浮空电阻
	GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
	//外部无上拉电阻选择推挽输出,  外部有上拉电阻选择开漏输出
	GIOSTRUCT.GPIO_OType=GPIO_OType_PP;
	GPIO_Init(GPIOE,&GIOSTRUCT);

 


2.GPIO_Mode_IPU 上拉输入

     
//1.配置时钟: 给个心跳。 选择需要的时钟频率
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    GPIO_InitTypeDef GIOSTRUCT;
	
	//2.配置功能: 功能太多。 选择GPIO功能;
	GIOSTRUCT.GPIO_Mode=GPIO_Mode_IN ; // 输入模式 
	GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引脚 
	GIOSTRUCT.GPIO_PuPd=GPIO_PuPd_UP  ;  //  上拉电阻
	GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
	//外部无上拉电阻选择推挽输出,  外部有上拉电阻选择开漏输出
	GIOSTRUCT.GPIO_OType=GPIO_OType_PP;
	GPIO_Init(GPIOE,&GIOSTRUCT);

3.GPIO_Mode_IPD 下拉输入

     
//1.配置时钟: 给个心跳。 选择需要的时钟频率
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    GPIO_InitTypeDef GIOSTRUCT;
	
	//2.配置功能: 功能太多。 选择GPIO功能;
	GIOSTRUCT.GPIO_Mode=GPIO_Mode_IN ; // 输入模式 
	GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引脚 
	GIOSTRUCT.GPIO_PuPd=GPIO_PuPd_DOWN   ;  //  下拉电阻
	GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
	//外部无上拉电阻选择推挽输出,  外部有上拉电阻选择开漏输出
	GIOSTRUCT.GPIO_OType=GPIO_OType_PP;
	GPIO_Init(GPIOE,&GIOSTRUCT);

4.GPIO_Mode_AIN 模拟输入

     
//1.配置时钟: 给个心跳。 选择需要的时钟频率
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    GPIO_InitTypeDef GIOSTRUCT;
	
	//2.配置功能: 功能太多。 选择GPIO功能;
	GIOSTRUCT.GPIO_Mode=GPIO_Mode_AN  ; // 输入模式 
	GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引脚 
	GIOSTRUCT.GPIO_PuPd= 随意  ;  // 
	GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
	//外部无上拉电阻选择推挽输出,  外部有上拉电阻选择开漏输出
	GIOSTRUCT.GPIO_OType=GPIO_OType_PP;
	GPIO_Init(GPIOE,&GIOSTRUCT);

5.GPIO_Mode_Out_OD 开漏输出(带上拉或者下拉)

     
//1.配置时钟: 给个心跳。 选择需要的时钟频率
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    GPIO_InitTypeDef GIOSTRUCT;
	
	//2.配置功能: 功能太多。 选择GPIO功能;
	GIOSTRUCT.GPIO_Mode=GPIO_Mode_OUT  ; // 输出模式 
	GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引脚 
	GIOSTRUCT.GPIO_PuPd= 上拉/下拉  ;  // 
	GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
	//外部无上拉电阻选择推挽输出,  外部有上拉电阻选择开漏输出
	GIOSTRUCT.GPIO_OType=GPIO_OType_OD;
	GPIO_Init(GPIOE,&GIOSTRUCT);
     
//1.配置时钟: 给个心跳。 选择需要的时钟频率
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    GPIO_InitTypeDef GIOSTRUCT;
	
	//2.配置功能: 功能太多。 选择GPIO功能;
	GIOSTRUCT.GPIO_Mode=GPIO_Mode_AF   ; // 输出模式 
	GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引脚 
	GIOSTRUCT.GPIO_PuPd= 上拉/下拉  ;  // 
	GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
	//外部无上拉电阻选择推挽输出,  外部有上拉电阻选择开漏输出
	GIOSTRUCT.GPIO_OType=GPIO_OType_OD;
	GPIO_Init(GPIOE,&GIOSTRUCT);


6.GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)

     
//1.配置时钟: 给个心跳。 选择需要的时钟频率
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    GPIO_InitTypeDef GIOSTRUCT;
	
	//2.配置功能: 功能太多。 选择GPIO功能;
	GIOSTRUCT.GPIO_Mode=GPIO_Mode_AF   ; // 输出模式 
	GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引脚 
	GIOSTRUCT.GPIO_PuPd= 上拉/下拉  ;  // 
	GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
	//外部无上拉电阻选择推挽输出,  外部有上拉电阻选择开漏输出
	GIOSTRUCT.GPIO_OType=GPIO_OType_OD;
	GPIO_Init(GPIOE,&GIOSTRUCT);


7.GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉)

     
//1.配置时钟: 给个心跳。 选择需要的时钟频率
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    GPIO_InitTypeDef GIOSTRUCT;
	
	//2.配置功能: 功能太多。 选择GPIO功能;
	GIOSTRUCT.GPIO_Mode=GPIO_Mode_OUT   ; // 输出模式 
	GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引脚 
	GIOSTRUCT.GPIO_PuPd= 上拉/下拉  ;  // 
	GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
	//外部无上拉电阻选择推挽输出,  外部有上拉电阻选择开漏输出
	GIOSTRUCT.GPIO_OType=GPIO_OType_PP;
	GPIO_Init(GPIOE,&GIOSTRUCT);


8.GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)文章来源地址https://www.toymoban.com/news/detail-407238.html

     
//1.配置时钟: 给个心跳。 选择需要的时钟频率
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    GPIO_InitTypeDef GIOSTRUCT;
	
	//2.配置功能: 功能太多。 选择GPIO功能;
	GIOSTRUCT.GPIO_Mode=GPIO_Mode_AF   ; // 复用模式 
	GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引脚 
	GIOSTRUCT.GPIO_PuPd= 上拉/下拉  ;  // 
	GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
	//外部无上拉电阻选择推挽输出,  外部有上拉电阻选择开漏输出
	GIOSTRUCT.GPIO_OType=GPIO_OType_PP;
	GPIO_Init(GPIOE,&GIOSTRUCT);

到了这里,关于stm32f407VET6 系统学习 day01 GPIO 配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32F407 GPIO口输出配置配置步骤

    STM32F407ZGT6 是意法半导体(STMicroelectronics)公司推出的一款高性能ARM Cortex-M4核心的32位微控制器(MCU)。它是 STM32F4 系列的一员,具备强大的处理能力和丰富的外设功能,适用于各种应用领域。 说明:STM32F4 的主频最高是 168Mhz,所以我们一般设置 PLLCLK 为 168Mhz(M=8,N=336,P=2),通

    2024年02月12日
    浏览(24)
  • STM32F103xx / STM32F429VET6最小系统原理图

    STM32F429VET6核心板原理图 2023.12.09修改内容:打板后由于更换学习方向并未进行测试,所给原理图仅供参考,给出PDF下载链接,未设置积分和会员下载:https://download.csdn.net/download/m0_51294753/88611702。 一、前言 先前使用过的是STM32F1系列,只使用和绘制过STM32F103C8T6和STM32F103ZET6的板

    2023年04月24日
    浏览(18)
  • stm32F407学习DAY.14 在DMA模式下进行USART串口数据收发(正点原子例程为例)

    目录 一、DMA配置 1、DMA1和DMA2的请求映射 2、DMA挂载总线 3、DMA相关库函数 ​4、DMA配置过程(以串口1为例) 1)进行时钟使能 2)等待DMA可配置 3)初始化DMA(串口1的TX为DMA2 数据流7 通道4,RX为DMA2 数据流5 通道4) a.DMA外设地址par: b.DMA存储器0地址mar: c.数据传输量ndtr: 4)

    2024年02月04日
    浏览(22)
  • 【STM32F407】Note_01 STM32 编程环境搭建 -- Keil与VS code组合

    在使用进行STM32F407开发的时候,一般被推荐使用的是Keil。经过一整子的Keil洗礼,我真的要崩溃了,在界面、调试、代码跳转、代码格式化、开发效率等方面一直很抓狂。之前一直使用vs code开发,用着还蛮顺心,界面风格很讨人喜欢。因此,尝试在vs code上进行STM32开发。接下

    2024年02月16日
    浏览(15)
  • stm32第一节:认识寄存器(野火指南者——STM32F103VET6)

            STM32芯片架构                 Cortex-M3内核(arm)——(I,S,D)——总线矩阵——外设, Flash,SRAM                 外设—— GPIO,USART,12C,SPI ……         Flash及SRAM储存                 Flash——常量                 SRAM——变量         DMA作用   

    2024年02月21日
    浏览(24)
  • STM32F407驱动GC9A01+CST816D触摸显示屏

    STM32F407驱动GC9A01+CST816D触摸显示屏 GC9A01是一款spi接口的1.28寸圆形屏,分辨率240*240,3.3v供电。 CST816D是一款IIC接口的触摸屏,模块上有4根信号线RST-复位线,INT-触摸中断线,当触摸屏检测到触摸信号后会输出高电平,SCL-数据时钟线,SDA-数据线。如果只是简单的使用INT线可以不

    2024年01月17日
    浏览(35)
  • stm32f103VET6和stm32f103c8t6有什么区别?

    我来终结下这个问题。 这两款单片机我都用过,其中无际单片机特训营其中一款wifi报警主机项目就是用了stm32f103c8t6。  stm32f103VET6和stm32f103c8t6都是STMicroelectronics公司推出基于ARM Cortex-M3内核的单片机。 它们在硬件规格和性能上存在一些差异,下面我详细讲解下它们的差异之处

    2024年02月15日
    浏览(19)
  • 搭建STM32F407的Freertos系统(基于STM32CubeMX)

           本人长期开发Linux、Windows上应用软件,一直以来MCU开发有所接触,但较少(最近项目需要,小公司么,都得会,被逼的),好在有STM32CubeMX这样工具,貌似就是我想要的工具。         本次demo目标立下:         1. 搭建或移植FreeRTOS到STM32上,毕竟对于长期在Linux环境

    2024年02月10日
    浏览(31)
  • 正点原子stm32F407学习笔记5——串口通信实验

    上位机给开发板发送数据,开发板将收到的数据发回给上位机 串口设置的一般步骤可以总结为如下几个步骤: 串口时钟使能,GPIO 时钟使能。 设置引脚复用器映射:调用 GPIO_PinAFConfig 函数。 GPIO 初始化设置:要设置模式为复用功能。 串口参数初始化:设置波特率,字长,奇

    2024年02月06日
    浏览(19)
  • STM32的入门——CM3芯片STM32F103VET6的使用和相关外设

    根据《STM32库开发实战指南——基于野火指南者开发板》整理, https://gitee.com/Embedfire-stm32f103-zhinanzhe/ebf_stm32f103_zhinanzhe_ std_tutorial 在整理的过程中,还参考了其他的一些STM32资料 使用了“幕布”这款软件,添加了一些思维导图 整理框架目的: 1.梳理知识脉络 2.复习知识 被动单

    2024年02月03日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包