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. vivado2016.1下载程序出错:End of startup status: LOW

    现象 使用JTAG下载程序,发现刚开始下载就出现了End of startup status: LOW错误.但能检测到芯片,证明JTAG没烧毁. 流程 前几次下载都没有问题,然后就有问题了. (1)怀 ...

  2. Python--面向对象初识

    Python基础-初识面向对象 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函 ...

  3. luogu5290 春节十二响

    题目链接 思路 先考虑一条链的情况怎么做. 因为只有两个子树,并且两个子树都是链.所以可以把这两条链找出来,然后\(sort\)一下.合并起来. 然后推广到树上 对于每一棵树都可以按照和上面同样的方法 ...

  4. 超越村后端开发(4:API开发)

    1.users相关的api开发 1.在settings中添加APPID,SECRET 2.在apps/users/views.py内: from chaoyuecun.settings import ...

  5. 商务电话思维图(XMind für Geschäftliche Telefongespräche)

    在和德国人打交道时,经常会遇到打电话的情景,应该怎么应对呢?不用担心,记住下面这个导图,轻松搞定德语电话的常用句型. 最后,按照惯例,来张美景.人越是上了年纪,就活的越是小心.但无论外界怎么样,请保持 ...

  6. python 内置函数详解

    懒得写了  参考1:https://www.cnblogs.com/xiao1/p/5856890.html 参考2:https://www.runoob.com/python/python-buil ...

  7. Servlet学习笔记(1)

    Servlet:Sun公司制订的一种用来扩展Web服务功能的组间规范. 第1部分 C/S和B/S介绍 1 C/S Client Server 客户端 服务器程序: 客户端需要单独开发,用户需要下载并安 ...

  8. APACHE 安装

    APACHE  安装 到官网下载apache软件 解压apache软件 安装APR相关优化模块 创建APACHE安装目录 安装apche,开始预编译(检测安装环境) 编译和安装 启动时报错及排错 修改 ...

  9. 【opencv实践】边缘检测

    边缘检测: 一.canny算子 Canny边缘检测根据对信噪比与定位乘积进行测度,得到最优化逼近算子,也就是Canny算子.类似与 LoG 边缘检测方法,也属于先平滑后求导数的方法. 二.canny算 ...

  10. redis集群配置与管理

    Redis在3.0版本以后开始支持集群,经过中间几个版本的不断更新优化,最新的版本集群功能已经非常完善.本文简单介绍一下Redis集群搭建的过程和配置方法,redis版本是5.0.4,操作系统是中标麒 ...