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而不必在外围电路增加元器件。

STM32学习笔记(6.2):LCD的显示

7. 程序源代码 main.c文件中的代码: #include "stm32f10x_lib.h" #include "stm32f10x_lcd.h" extern unsigne...
  • yanliqiang
  • yanliqiang
  • 2013年01月31日 19:46
  • 1074

STM32之GPIO结构

1、STM32的GPIO结构图 GPIO共有8中设置模式:输入浮空、输入上拉、输入下拉、模拟输入、开漏输出、推挽式输出、推挽式复用功能,开漏复用功能,共4种输入,2种输入,2种复用功能。 2、...
  • YangPan2007
  • YangPan2007
  • 2016年09月07日 17:06
  • 732

stm32 L blog

http://blog.csdn.net/kaijiexue/article/details/12875245
  • gtkknd
  • gtkknd
  • 2014年09月08日 15:57
  • 685

STM32L系列单片机内部EEPROM的读写

STM32L系列单片机内部提供了EEPROM存储区域,但实质上,其FLASH也是EEPROM类型,只不过有一块区域被开放出来专门用作EEPROM操作而已。STM32L的EEPROM使用寿命设计为100...
  • WangSanHuai2010
  • WangSanHuai2010
  • 2012年09月01日 19:46
  • 17441

10.函数库-静态库和共享库

10.函数库-静态库和共享库 函数库是指由若干目标文件按某种格式构成的集合,它分为两种类型:静态库和共享库。应用程序在链接静态库时是将所需的静态库函数嵌入至可执行文件中(并非全部静态库),而在链接共...
  • notbaron
  • notbaron
  • 2016年10月22日 23:05
  • 30398

STM32入门系列-GPIO结构

已经了解了STM32 GPIO的基本概念及引脚分类。现在来看下STM32 GPIO内部的结构是怎样的。IO端口位的基本结构如下图所示。    从图中可以看出GPIO内部结构还是比较复杂的,只要将这...
  • dilireba
  • dilireba
  • 2017年11月17日 14:09
  • 109

.9

用户手中看到的产品界面,并非设计师呕心沥血创作的效果图,而是一个个单独的切图经由开发同学技术实现。切图作为设计师与开发者之间的桥梁,它的作用很关键,合适的切图、精准的位置可以最大限度的还原效果图的设计...
  • w358637319
  • w358637319
  • 2014年07月01日 13:33
  • 446

STM32学习之I2C

stm32 i2c通信 [操作寄存器+库函数] 作者:Changing发表时间:07-12 22:01分类:电子相关No Comments I2C总线是由NXP(原PHILIPS)公司设计...
  • k122769836
  • k122769836
  • 2012年10月20日 09:28
  • 26576

OpenGL相关函数库介绍

原文:http://blog.chinaunix.net/uid-20638550-id-1909182.html   OpenGL 函数库相关的API有核心库(gl)、实用库(glu)、辅助库(a...
  • wolf96
  • wolf96
  • 2014年07月25日 22:40
  • 1058

静态库,动态库是啥,有啥区别(静态函数库/动态函数库)

因之前初学接触这个概念的时候无法直观的理解,询问多人也得到类似如下回复:静态库就是静态库,动态库就是动态库。一个编译一个不编译等类似的回复。伪善的人太多,披着“有问题可以问我”的外衣,请教了就TMLG...
  • lz_equal
  • lz_equal
  • 2016年09月05日 13:25
  • 826
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STM32L和STM32F函数库区别之GPIO
举报原因:
原因补充:

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