記錄一下,方便以後翻閱~
實驗內容:跑馬燈、蜂鳴器和按鍵輸入
官方資料:《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...