STM32L1X系列GPIO运用
STM32L15x 系列中基本步驟是和STM32F10x相同的
一 配置GPIO
? 初始化GPIO時我們需要催一下內(nèi)容進(jìn)行配置(以下步驟沒有必然順序)
? 1 創(chuàng)建GPIO結(jié)構(gòu)
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? 結(jié)構(gòu)體成員(不同之處在這里)
? 例:
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? 這個結(jié)構(gòu)體
? typedef struct
???? {
uint32_t GPIO_Pin; //對應(yīng)管腳? GPIOx_Pinx0~15
GPIOMode_TypeDef GPIO_Mode; //所選管腳的模式:輸入、輸出、懸空、模擬
?????? GPIOSpeed_TypeDef GPIO_Speed; //所選管腳的響應(yīng)速率 400K/ 10M /20M/ 40M
GPIOOType_TypeDef GPIO_OType; //所選管腳的開漏、上/下拉
?????? GPIOPuPd_TypeDef GPIO_PuPd; //所選管腳是否上/下拉
???? }GPIO_InitTypeDef;
每個結(jié)構(gòu)體成員又是以枚舉形式結(jié)構(gòu)體出現(xiàn)。
???? 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? 就沒有分那么多層次直接定義每種輸入輸出模式對應(yīng)的值
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;
這是因?yàn)?STM32L15x 在硬件的輸出上也加上了上拉下拉的可選配置。這樣做是為了使用更靈活。使用者可在需要上拉輸出的時候直接配置GPIO而不必在外圍電路增加元器件。
轉(zhuǎn)載于:https://www.cnblogs.com/xiumusheng/p/10538700.html
總結(jié)
以上是生活随笔為你收集整理的STM32L1X系列GPIO运用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: linux在执行时提示无此文件的一个处理
- 下一篇: Docker 搜索镜像
