建議閱讀時長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 ...