日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32L1X系列GPIO运用

發布時間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32L1X系列GPIO运用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

轉載于:https://www.cnblogs.com/xiumusheng/p/10538700.html

總結

以上是生活随笔為你收集整理的STM32L1X系列GPIO运用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。