STM32L和STM32F函数库区别之GPIO

转载 2016年05月30日 16:35:16

STM32L15x 系列中基本步骤是和STM32F10x相同的

 

一 配置GPIO

 

  初始化GPIO时我们需要催一下内容进行配置(以下步骤没有必然顺序)

 

  1 创建玩结构

 

       GPIO_InitTypeDef  GPIO_InitStructure;

   2 使能需要端口时钟

      /* Enable GPIOs clock */  
       RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | 
                        RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOD | 
                        RCC_AHBPeriph_GPIOE | RCC_AHBPeriph_GPIOH, ENABLE);

  3 配置 GPIO_InitStructure  结构体成员(不同之处在这里)

  例:

     /* Configure the GPIO_LED pins  */
       GPIO_InitStructure.GPIO_Pin = LD_GREEN_GPIO_PIN | LD_BLUE_GPIO_PIN;
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
       GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
       GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
       GPIO_Init(LD_GPIO_PORT, &GPIO_InitStructure);
       GPIO_LOW(LD_GPIO_PORT, LD_GREEN_GPIO_PIN);

 

二 分析

   

 首先看一下STM32L15x  的 GPIO_InitTypeDef  这个结构体

     typedef struct

     {

       uint32_t GPIO_Pin;     //对应管脚  GPIOx_Pinx0~15  

       GPIOMode_TypeDef GPIO_Mode;   //所选管脚的模式:输入、输出、悬空、模拟            

       GPIOSpeed_TypeDef GPIO_Speed;   //所选管脚的响应速率 400K/ 10M /20M/ 40M

       GPIOOType_TypeDef GPIO_OType;   //所选管脚的开漏、上/下拉                                         

       GPIOPuPd_TypeDef GPIO_PuPd;    //所选管脚是否上/下拉    

     }GPIO_InitTypeDef;

 

每个结构体成员又是以枚举结构体(这是我的叫法……不知道是否准确啊 大家意会~嘿嘿)出现。

     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;

    #define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_IN)  || ((MODE) == GPIO_Mode_OUT)  ((MODE) == GPIO_Mode_AF)|| ((MODE) == GPIO_Mode_AN))

 

 

    typedef enum

    {

      GPIO_Speed_400KHz = 0x00, /*!< Very Low Speed */

      GPIO_Speed_2MHz   = 0x01, /*!< Low Speed */

      GPIO_Speed_10MHz  = 0x02, /*!< Medium Speed */

      GPIO_Speed_40MHz  = 0x03  /*!< High Speed */

    }GPIOSpeed_TypeDef;

    #define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Speed_400KHz) || ((SPEED) == GPIO_Speed_2MHz)  ((SPEED) == GPIO_Speed_10MHz)||  ((SPEED) == GPIO_Speed_40MHz))

 

 

    typedef enum

    { GPIO_OType_PP = 0x00,

      GPIO_OType_OD = 0x01

    }GPIOOType_TypeDef;

    #define IS_GPIO_OTYPE(OTYPE) (((OTYPE) == GPIO_OType_PP) || ((OTYPE) == GPIO_OType_OD))

 

 

    typedef enum

    { GPIO_PuPd_NOPULL = 0x00,

      GPIO_PuPd_UP     = 0x01,

      GPIO_PuPd_DOWN   = 0x02

    }GPIOPuPd_TypeDef;

    #define IS_GPIO_PUPD(PUPD) (((PUPD) == GPIO_PuPd_NOPULL) || ((PUPD) == GPIO_PuPd_UP) ((PUPD) == GPIO_PuPd_DOWN))

而 stm32f10x  就没有分那么多层次直接定义每种输入输出模式对应的值

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;

 

这是因为 STM32L15x 在硬件的输出上也加上了上拉下拉的可选配置。这样做是为了使用更灵活。使用者可在需要上拉输出的时候直接配置GPIO而不必在外围电路增加元器件。

相关文章推荐

STM32L1xx的库函数有个Bug(stm32l1xx_gpio.c)

在使用STM32L151的时候遇到 GPIO_PinAFConfig(xx,xx,xx)函数无效,有时候还有导致程序HardFault的问题。之前遇到就使用直接寄存器操作避免了这个问题,这次出现了Ha...

STM32L0xx_HAL_Driver库的使用——UART

单片机型号:STM32L051C8T6 开发环境MDK5.12 库版本:STM32L0xx_HAL_Driver V1.1.0 主机环境:Windows XP 之前一直使用的STM32F030...

[技术文章搬家]STM32F207V学习笔记之深度解读GPIO

由于项目的要求,之前一段时间感觉学起来很乱,软件上要看GPRS部分代码并参与跟上位机服务器端交互的调试,但我本人对STM32事实上还有很多原理上的东西不明白,硬件方面要学电路原理还有DXP制作电路板的...

STM32F10X系列GPIO外部中断

先从最简单的问题开始,用STM32外部中断的方法实现PB.0按键控制PA.0LED灯: 先总的说下实现中断的步骤: 1,配置NVIC寄存器(函数),设置中断为第几组,占先优先级和次优先级;      ...

玩转STM32F0 Value Line Discovery 之 GPIO配置工具

前面简单的介绍了时钟配置

STM32F429I-DISO探索第一篇 --GPIO(2)

上一篇写了GPIO简单的流水灯测试,看着有点单调,习惯了串口调试,板子上没有串口 那就另想办法吧,看着LCD突然有了个想法,为什么不把调试信息输出到LCD上,以前在做2416 WINCE开发的时候就经...

HAL库-STM32F4 HAL_GPIO_Init()

在ST官方库中,我们可以找到对某个GPIO初始化的函数 HAL_GPIO_Init()

STM32F207ZG GPIO口学习

学习一个新的开发板的第一步肯定是学习流水灯的过程,资料提供了两个版本的代码,一个是寄存器版本的,一个是库函数版本的。根据网上一些资料和自己的理解,考虑到后期整个系统复杂性,决定采用库函数版本开发,后期...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)