常用庫函式 跑馬燈實驗和我為什麼使用庫函式?

2021-10-25 12:34:28 字數 3884 閱讀 9818

建議閱讀時長15min,全是乾貨

希望讀者能點贊,關注,分享,讓我更有動力,等我徹底寫完stm32的學習日誌,我會製作成電子書,分享給大家。

截至2023年8月28日,st公司一共開發了三個庫,分別是標準外設庫(std),hal庫,ll庫,此前使用直接控制暫存器的方式控制微處理器,從開發時間上是暫存器--->標準外設庫--->hal庫--->ll庫,其中暫存器的優點是**量少,標準外設庫可移植性強,hal庫和ll庫雖然**量少於標準外設庫和固定平台的可移植性增強,但是在跨平台的可移植性大大降低,各平台的相容性差,並且stm32cube平台有些臃腫,我鑑於學習時間和未來的跨平台考慮,選擇了標準外設庫。

下面開始正文:

重要翻譯:

reset clock controller ——rcc暫存器(復位時鐘控制器暫存器)

步驟:確定stm32中的所需引腳的連線

led0-pb5

led1-pe5

確定使用庫函式

標頭檔案stm32f10x_gpio.h

stm32f10x_rcc.h

原始檔 stm32f10x_gpio.c

stm32f10x_rcc.c

一般常見庫函式重要函式:

1個初始化函式:

void gpio_init(gpio_typedef* gpiox, gpio_inittypedef* gpio_initstruct);
作用:初始化乙個或者多個io口(同一組)的工作方式和速度。該函式主要是操作gpio_crl(crh)暫存器,在上拉或者下拉的時候有設定bsrr或者brr暫存器

gpiox: gpioa~gpiog

這裡的 gpio_inittypedef* gpio_initstruct為:

typedef struct

gpio_inittypedef;

gpio_init函式初始化樣例:

gpio_inittypedef gpio_initstructure;

gpio_initstructure.gpio_pin = gpio_pin_5; //led0-->pb.5 埠配置

gpio_initstructure.gpio_mode = gpio_mode_out_pp; //推挽輸出 ,可高可低

gpio_initstructure.gpio_speed = gpio_speed_50mhz; //io口速度為50mhz

gpio_init(gpiob, &gpio_initstructure); //根據設定引數初始化gpiob.5

2個讀取輸入電平函式:

uint8_t gpio_readinputdatabit(gpio_typedef* gpiox, uint16_t gpio_pin);

uint16_t gpio_readinputdata(gpio_typedef* gpiox);

uint8_t gpio_readinputdatabit(gpio_typedef* gpiox, uint16_t gpio_pin);

作用:讀取某個gpio的輸入電平。實際操作的是gpiox_idr暫存器。

例如:

gpio_readinputdatabit(gpioa, gpio_pin_5);//讀取gpioa.5的輸入電平

uint16_t gpio_readinputdata(gpio_typedef* gpiox);

作用:讀取某組gpio的輸入電平。實際操作的是gpiox_idr暫存器。

例如:

gpio_readinputdata(gpioa);//讀取gpioa組中所有io口輸入電平
2個讀取輸出電平函式:

uint8_t gpio_readoutputdatabit(gpio_typedef* gpiox, uint16_t gpio_pin);

uint16_t gpio_readoutputdata(gpio_typedef* gpiox);

uint8_t gpio_readoutputdatabit (gpio_typedef* gpiox, uint16_t gpio_pin);

作用:讀取某個gpio的輸出電平。實際操作的是gpio_odr暫存器。

例如:

gpio_readoutputdatabit(gpioa, gpio_pin_5);//讀取gpioa.5的輸出電平

uint16_t gpio_readoutputdata(gpio_typedef* gpiox);

作用:讀取某組gpio的輸出電平。實際操作的是gpio_odr暫存器。

例如:

gpio_readoutputdata(gpioa);//讀取gpioa組中所有io口輸出電平
4個設定輸出電平函式:

void gpio_setbits(gpio_typedef* gpiox, uint16_t gpio_pin);
作用:設定某個io口輸出為高電平(1)。實際操作bsrr暫存器

void gpio_resetbits(gpio_typedef* gpiox, uint16_t gpio_pin);
作用:設定某個io口輸出為低電平(0)。實際操作的brr暫存器。

void gpio_writebit(gpio_typedef* gpiox, uint16_t gpio_pin, bitaction bitval);

void gpio_write(gpio_typedef* gpiox, uint16_t portval);

這兩個函式不常用,也是用來設定io口輸出電平。

程式設計 檔案結構圖:

檔案結構圖

硬體程式設計:

#ifndef __led_h 

#define __led_h

//#include "sys.h"

//led 埠定義

//#define led0 pbout(5)// ds0-digital signal 0

//#define led1 peout(5)// ds1

void led_init(void);//初始化

#endif

#include "led.h" 

#include "stm32f10x.h"

//初始化 pb5 和 pe5 為輸出口.並使能這兩個口的時鐘

//led io 初始化

void led_init(void)

#include "led.h" 

#include "delay.h"

//#include "sys.h"

#include "stm32f10x.h"

//跑馬燈實驗

int main(void)

}

新增標頭檔案路徑,設定obj路徑,新增target資料夾和標頭檔案,原始檔

按照上面的步驟設定,就可以完成最簡單的跑馬燈實驗。

跑馬燈實驗 庫函式版

1 參考資料 stm32f1開發指南 庫函式版本 第六章 跑馬燈實驗6.1小節 stm32中文參考手冊v10 第8章通用和復用功能io gpio和afio 2 warship原理圖 led0 pd5 led1 pe5 共陽極 低電平有效 推挽輸出 可以輸出強高低電平,連線數字器件 操作io口 標頭檔...

LED跑馬燈實驗

一 新建工程並新增相應的工程檔案 本實驗需要用到三個韌體庫檔案,分別為stm32f4xx gpio.c stm32f4xx gpio.h stm32f4xx rcc.c stm32f4xx rcc.h misc.c misc.h 二 編寫使用者驅動 1 編寫c檔案 a.使能gpio時鐘,根據電路原理...

實驗一 跑馬燈實驗

一 實驗目的 通過控制戰艦stm32開發板上的兩個led燈 ds0和ds1交替閃爍,實現類似跑馬燈的效果。二 stm32 io簡介 stm32 的每個 io 埠都有 7 個暫存器來控制。他們分別是 配置模式的 2 個 32 位的埠配置暫存器 crl 和 crh 2 個 32 位的資料暫存器 idr ...