STM32L和STM32F函式庫區別之GPIO

2021-07-12 05:07:11 字數 2387 閱讀 2805

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

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

gpiootype_typedef;

#define is_gpio_otype(otype) (((otype) == gpio_otype_pp) || ((otype) == gpio_otype_od))

typedef enum

gpiopupd_typedef;

#define is_gpio_pupd(pupd) (((pupd) == gpio_pupd_nopull) || ((pupd) == gpio_pupd_up) ((pupd) == gpio_pupd_down))

而 stm32f10x  就沒有分那麼多層次直接定義每種輸入輸出模式對應的值

typedef enum

gpiomode_typedef;

這是因為 stm32l15x 在硬體的輸出上也加上了上拉下拉的可選配置。這樣做是為了使用更靈活。使用者可在需要上拉輸出的時候直接配置gpio而不必在外圍電路增加元器件。

STM32F 使用的幾個要點

最近在使用stm32f103開展新專案的評估,接連著專案的維護,花去自己不少時間,哎.快樂地解決bug,希望以後的程式bug越少越好。1.swd介面 從 淘的jlink v8,不貴,直接將jlink連線評估板,能識別swd介面,但是提示 cpu core not found,這是由於兩者設定不一致的...

STM32F的幾種序列通訊匯流排總結

一 usart 通用同步非同步收發器 usart 提供了一種靈活的方法與使用工業標準nrz非同步序列資料格式的外部裝置之間進行全雙工資料交換。usart支援同步單向通訊和半雙工單線通訊,也支援lin 區域性網際網路 智慧卡協議和irda 紅外資料組織 sir endec規範,以及數據機 cts rt...

SPIFFS檔案系統移植 基於STM32F407

本帖最後由 huangxuejia 29212 於 2018 6 3 22 47 編輯 spiffs檔案系統,有什麼特別呢?從名字就可知,這是乙個用於spi flash的file system。現在好像在esp8266上用的很多,感覺慢慢有的人氣了。從特性上說,這個檔案系統用很少的ram資源。但是,...