STM32學習心得三 GPIO實驗 基於庫函式

2021-10-04 07:29:54 字數 3738 閱讀 3822

記錄一下,方便以後翻閱~

實驗內容:跑馬燈、蜂鳴器和按鍵輸入

官方資料:《stm32中文參考手冊v10》第8章 通用和復用功能io(gpio和afio)

特點:不涉及暫存器操作、位操作相關**,適合初學庫函式操作的朋友

原理圖:

1)如圖所示,跑馬燈,pb5接led0,pe5接led1;

3)如圖所示,pe4接key0,pe3接key1,pe2接key2,pa0接wk_up;

工作原理不細講,一定要看清外設與哪個gpio管腳對接。

涉及四個gpio庫函式

1)void

gpio_init

(gpio_typedef* gpiox, gpio_inittypedef* gpio_initstruct); //初始化作用

2)void

gpio_setbits

(gpio_typedef* gpiox,uint16_t gpio_pin); //設定輸出電平為高

3)void

gpio_resetbits

(gpio_typedef* gpiox,uint16_t gpio_pin); //設定輸出電平為低

4)uint8_t gpio_readinputdatabit

(gpio_typedef*gpiox, uint16_t gpio_pin)

;//讀取某個gpio埠的輸入電平

在stm32f10x_gpio.**件中,有如下**,需要牢記:

typedef

enum

gpiomode_typedef;

這八種模式對應的位址是如何修改暫存器的,我暫時還不了解,有興趣的可以仔細解讀stm32f10x_gpio.c檔案中的void gpio_init(gpio_typedef* gpiox, gpio_inittypedef* gpio_initstruct)函式。

實驗步驟

1) 新建工程模板;

2) 新建hardware空資料夾(與user資料夾並列);

3) 在mdk軟體中,新建led.c,beep.c和key.c三個.c檔案以及對應的led.h,beep.h和key.h標頭檔案,均儲存在hardware資料夾中;

4) led.h標頭檔案**如下:

#ifndef __led_h

#define __led_h

void

led_init

(void);

#endif

5)beep.c標頭檔案**如下:

#ifndef __beep_h

#define __beep_h

void

beep_init

(void);

#endif

6)key.h標頭檔案**如下:

#ifndef __key_h

#define __key_h

#include

"stm32f10x.h"

void

key_init

(void);

u8 key_scan

(u8)

;#endif

7)led.c檔案**如下:

#include

"led.h"

#include

"stm32f10x.h"

void

led_init

(void

)

8)beep.c檔案**如下:

#include

"stm32f10x.h"

#include

"beep.h"

void

beep_init

(void

)

9)key.c檔案**如下:

#include

"stm32f10x.h"

#include

"key.h"

#include

"delay.h"

void

key_init

(void

)//io初始化

u8 key_scan

(u8 mode)

elseif(

gpio_readinputdatabit

(gpioe,gpio_pin_4)==1

&&gpio_readinputdatabit

(gpioe,gpio_pin_3)==1

&&gpio_readinputdatabit

(gpioe,gpio_pin_2)==1

&&gpio_readinputdatabit

(gpioa,gpio_pin_0)==0

)key_up=1;

return0;

// 無按鍵按下

}

10) 在mdk軟體中,右鍵target1,單擊manage project items…,在project items介面、groups一欄,新建hardware,並將led.c,beep.c和key.c三個.c檔案新增進來;

11)在mdk軟體中,單擊魔術棒,在c/c++選項裡,單擊include paths右邊的…,新增led.h,beep.h和key.h三個標頭檔案的目錄(即hardware);

12)新建main.c主函式,**如下:

#include

"stm32f10x.h"

#include

"delay.h"

#include

"led.h"

#include

"beep.h"

#include

"key.h"

intmain

(void

)delay_ms

(1000);

//延遲1000ms

gpio_resetbits

(gpiob,gpio_pin_8)

;//控制蜂鳴器不叫

gpio_setbits

(gpiob,gpio_pin_5)

;//控制led0滅

gpio_setbits

(gpioe,gpio_pin_5)

;//控制led1滅}}

}

13)完成後即可執行看效果。

舊知識點

1)複習如何使用flymcu除錯程式,可參考stm32學習心得一:flymcu軟體配置;

2)複習如何新建工程模板-基於庫函式,可參考stm32學習心得二:新建工程模板。

STM32學習心得(1)

學stm32的目的只是為了可以讓乙個電機轉動起來,哈哈哈是不是感覺沒什麼大目標。但是能讓電機轉起來就覺得很有成就感。我在學之前有的概念就是 pwm,can,輸入輸出啥的,然而卻並不知道是幹什麼的。前一段時間在 上買了一款stmf103的板子,買回來後裝了keil4花了好幾個小時,又花了好幾個小時配置...

STM32學習筆記之GPIO 三

首先從最簡單的角度介紹gpio是什麼東西。首先gpio最基本 最簡單的作用是我們可以通過程式設計的方式讓它作輸入或者輸出,而輸入 輸出的形式為高低電平 通常0v為低電平,3.3v為高電平 要讓gpio作輸入或者輸出,首先就需要對io口相關的暫存器進行配置。先介紹一下什麼是暫存器,暫存器是 處理器內的...

STM32學習心得 八 初識中斷

typedef struct nvic type 其中最常用的就是中斷優先順序暫存器。同時,在 misc.h 韌體庫中也實現了部分與中斷相關的函式 void nvic prioritygroupconfig uint32 t nvic prioritygroup void nvic init nvi...