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

一 配置GPIO

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

1 创建GPIO结构

GPIO_InitTypeDef GPIO_InitStructure;

2 使能需要端口时钟

RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC| RCC_AHBPeriph_GPIOD| RCC_AHBPeriph_GPIOE| RCC_AHBPeriph_GPIOH, ENABLE );

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

例:

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 );

4

GPIO_Reset( LD_GPIO_PORT, LD_GREEN_GPIO_PIN );
GPIO_Reset( LD_GPIO_PORT, LD_BLUE_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而不必在外围电路增加元器件。

STM32L1X系列GPIO运用的更多相关文章

  1. ARM Cortex M3系列GPIO口介绍(工作方式探讨)

    一.Cortex M3的GPIO口特性    在介绍GPIO口功能前,有必要先说明一下M3的结构框图,这样能够更好理解总线结构和GPIO所处的位置. Cortex M3结构框图     从图中可以看出 ...

  2. STM32入门系列-GPIO工作模式及LED电路原理

    GPIO工作模式 由于GPIO内部的结构关系,决定了GPIO可配置成以下几种模式. 输入模式 在输入模式时,施密特触发器打开,输出被禁止.可通过输入数据寄存器GPIOx_IDR读取I/O状态.输入模式 ...

  3. STM32入门系列-GPIO结构

    已经了解了STM32 GPIO的基本概念及引脚分类.现在来看下STM32 GPIO内部的结构是怎样的.IO端口位的基本结构如下图所示. 从图中可以看出GPIO内部结构还是比较复杂的,只要将这张GPIO ...

  4. STM32入门系列-GPIO概念介绍

    GPIO(general purpose intput output)是通用输入输出端口的简称,可以通过软件来控制其输入和输出.STM32 芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯 ...

  5. stm32开发笔记(三):stm32系列的GPIO基本功能之输出驱动LED灯、输入按键KEY以及Demo

    前言   stm32系列是最常用的单片机之一,不同的版本对应除了引脚.外设.频率.容量等'不同之外,其开发的方法是一样的.  本章讲解使用GPIO引脚功能驱动LED灯和接收Key按钮输入.   STM ...

  6. uboot源码解析

    实例:1.3.4版本at91sam系列 GPIO部分: 一.初始化: include\asm-arm\arch-at91sam9\gpio.h 1.同一引脚的复用设置 2.输入输出初始化寄存器 3.得 ...

  7. 合宙模块AT相关资料汇总

    1. 目录 1. 目录 [2. 新手教程](#2. 新手教程) [3. 产品资料](#3. 产品资料) 3.1 [2G模块(GPRS / GPRS+GNSS)](#3.1 2G模块(GPRS / GP ...

  8. 合宙模块LUA相关资料汇总

    1. 目录 1. 目录 [2. LUA二次开发](#2. LUA二次开发) 2.1 [新手教程](#2.1 新手教程) 2.2 [进阶教程](#2.2 进阶教程) 2.3 [LUA开发环境](#2.3 ...

  9. stm32开发笔记(二):stm32系列使用V3.5固件库的帮助文件以及GPIO基本功能(一)

    前言   stm32系列是最常用的单片机之一,不同的版本对应除了引脚.外设.频率.容量等'不同之外,其开发的方法是一样的.  本章讲解使用库函数使用GPIO引脚功能.   补充   本文章为多年前学习 ...

随机推荐

  1. Eclipse新建动态页面

    作为web小学生,写一下很多人问的基本基本基本问题 新建web项目 出现一下界面: 明明完成后一直点击next,但不要点击finish 知道出现这个界面(最后一个界面) 打上勾(用来自动生成web.x ...

  2. 如何解决Redis中的key过期问题

    最近我们在Redis集群中发现了一个有趣的问题.在花费大量时间进行调试和测试后,通过更改key过期,我们可以将某些集群中的Redis内存使用量减少25%. Twitter内部运行着多个缓存服务.其中一 ...

  3. POJ1988 Cube stacking(非递归)

    n有N(N<=30,000)堆方块,开始每堆都是一个方块.方块编号1 – N. 有两种操作: nM x y : 表示把方块x所在的堆,拿起来叠放到y所在的堆上. nC x : 问方块x下面有多少 ...

  4. vscode笔记(一)- vscode自动生成文件头部注释和函数注释

    VsCode 自动生成文件头部注释和函数注释 作者:狐狸家的鱼 本文链接:vscode自动生成文件头部注释和函数注释 GitHub:sueRimn 1.安装插件KoroFileHeader 2.设置 ...

  5. 第七周java学习总结

    学号 20175206 <Java程序设计>第七周学习总结 教材学习内容总结 第八章: 主要内容 String类 StringTokenizer类 Scanner类 StringBuffe ...

  6. thinkphp5 去除缓存

    array_map('unlink', glob(TEMP_PATH . '/*.php')); rmdir(TEMP_PATH);

  7. Hibernate日志输出到SLF4J

    一,Hibernate日志问题 工程使用SLF4J,但日志文件一直没有看到Hibernate相关日志及showsql 二,Logback文件配置 修改Hibernate 日志输出指定为SLF4J,当修 ...

  8. google搜索指南

    常用搜索技巧 搜索社交媒体@ @twitter 搜索特定价格$ $400 搜素标签# #tag 排除特定词,在词前加减号- -except 搜索完全匹配词,加双引号"" " ...

  9. 一次 ElasticSearch 搜索优化

    一次 ElasticSearch 搜索优化 1. 环境 ES6.3.2,索引名称 user_v1,5个主分片,每个分片一个副本.分片基本都在11GB左右,GET _cat/shards/user 一共 ...

  10. ReactJS虚拟DOM效应带来的一则副作用探索

    疑问 https://github.com/ruanyf/react-demos/blob/master/demo08/index.html 在如下代码中的 18 行, 需要将本类中的 方法,进行绑定 ...