前些日子学习 STM32F10x 基本一些内容 ,由于需要,今天开始学习 STM32L15x 系列。 前面简单介绍过 STM32L15x 。下面具体介绍下GPIO GPIO_InitTypeDe f的事。
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而不必在外围电路增加元器件。
以上是我对STM32L15x GPIO的一点鄙见,还愿高手多多指点。感激不尽!!
分享到:
相关推荐
STM32L15x系列LCD控制器部分中文数据手册,让对英文不好的同学有了方便的阅读资料,更加快捷的掌握该部分用法。
低功耗系列芯片 STM32L15x_Flash和EEPROM
低功耗系列芯片 STM32L15x_通信外设USART
STM8L15X系列是ST的低功耗产品。STM8L15X系列库
电子-STM32L15x官方教程.rar,单片机/嵌入式STM32-F0/F1/F2
低功耗系列芯片 STM32L15x_时钟和复位系统RCC
stm8l15x系列数据手册英文
stm32l15x数据手册中文
STM32L15x series of training materials (1) STM32L15x series of training materials (1)
低功耗系列芯片 STM32L15x_模拟比较器COMP
STM32L15单片机低功耗程序和STM32L15单片机资料 。
低功耗系列芯片 STM32L15x_通用GPIO和外部中断EXTI
低功耗系列芯片 STM32L15x_电源管理PWR和低功耗模式
STM32L15x代码已测试STM32L151C8T6和STM32L151RC的片子,包含时钟设置,串口收发等代码
电子-STM32L15x09模拟比较器COMP.pdf,单片机/嵌入式STM32-F0/F1/F2
意法半导体8位超低功耗单片机STM8L15x系列开发文档之GPIO
官方STM32L15x技术培训资料(中文),内容包含:概述,Flash和EEPROM,LCD控制器, 从STM32F1xx到STM32Lxx,DMA,PWR,低功耗模式,IWDG,WWDG,COMP,ADC,RCC,RTC,DAC,I2C,SPI,USART,TIM,系统配置SYSCFG和...
STM8L15X系列库函数例程,包括库文件,和基本例程,对于STM8L15系列的开发人员有很大哦作用。
STM8L15x_StdPeriph_Lib_V1.2.0
STM8L15x官方库,提供了各种外设的操作接口。