STM32學習記錄 點燈儀式(庫函式)

2021-10-25 10:19:39 字數 4496 閱讀 6703

程式設計方法:

庫函式程式設計:直接呼叫函式操作 (簡單易學)

暫存器程式設計:直接對暫存器就行操作 (上手難度大,但利於理解工作原理)

gpio庫中的重要函式

注意操作io口之前必須使能對應時鐘位

rcc_apb2periphclockcmd

(對應io口引數,使能or非使能)

rcc_apb2periphclockcmd

(rcc_apb2periph_gpiob|rcc_apb2periph_gpioe, enable)

;//使能 pb,pe 埠時鐘

對應io口引數

#define rcc_apb2periph_afio              ((uint32_t)0x00000001)

#define rcc_apb2periph_gpioa ((uint32_t)0x00000004)

#define rcc_apb2periph_gpiob ((uint32_t)0x00000008)

#define rcc_apb2periph_gpioc ((uint32_t)0x00000010)

#define rcc_apb2periph_gpiod ((uint32_t)0x00000020)

#define rcc_apb2periph_gpioe ((uint32_t)0x00000040)

#define rcc_apb2periph_gpiof ((uint32_t)0x00000080)

#define rcc_apb2periph_gpiog ((uint32_t)0x00000100)

#define rcc_apb2periph_adc1 ((uint32_t)0x00000200)

#define rcc_apb2periph_adc2 ((uint32_t)0x00000400)

#define rcc_apb2periph_tim1 ((uint32_t)0x00000800)

#define rcc_apb2periph_spi1 ((uint32_t)0x00001000)

#define rcc_apb2periph_tim8 ((uint32_t)0x00002000)

#define rcc_apb2periph_usart1 ((uint32_t)0x00004000)

#define rcc_apb2periph_adc3 ((uint32_t)0x00008000)

#define rcc_apb2periph_tim15 ((uint32_t)0x00010000)

#define rcc_apb2periph_tim16 ((uint32_t)0x00020000)

#define rcc_apb2periph_tim17 ((uint32_t)0x00040000)

#define rcc_apb2periph_tim9 ((uint32_t)0x00080000)

#define rcc_apb2periph_tim10 ((uint32_t)0x00100000)

#define rcc_apb2periph_tim11 ((uint32_t)0x00200000)

enable                  //使能

disable //不使能

1.用於初始化io口狀態

void

gpio_init

(gpio_typedef* gpiox, gpio_inittypedef* gpio_initstruct);

具體用法:

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;

//速度 50mhz

//以上四行設定gpio結構體

gpio_init

(gpiob,

&gpio_initstructure)

;//根據設定引數配置 gpio

上面**的意思是設定 gpiob 的第 5 個埠為推挽輸出模式,同時速度為 50m。從上面初始化**可以看出,gpio_initstructure 的第乙個成員變數 gpio_pin 用來設定是要初始化哪個或者哪些 io 口;第二個成員變數 gpio_mode 是用來設定對應 io 埠的輸出輸入模式。

其中8 個模式分別為:

gpio_mode_ain =

0x0,

//模擬輸入

gpio_mode_in_floating =

0x04

,//浮空輸入

gpio_mode_ipd =

0x28

,//下拉輸入

gpio_mode_ipu =

0x48

,//上拉輸入

gpio_mode_out_od =

0x14

,//開漏輸出

gpio_mode_out_pp =

0x10

,//通用推挽輸出

gpio_mode_af_od =

0x1c

,//復用開漏輸出

gpio_mode_af_pp =

0x18

//復用推挽

io 口速度設定,有三個可選值

gpio_speed_10mhz 

gpio_speed_2mhz

gpio_speed_50mhz

2.讀取io口輸入電平

uint8_t gpio_readinputdatabit

(gpio_typedef* gpiox, uint16_t gpio_pin)

//讀取單獨某個io口

uint16_t gpio_readinputdata

(gpio_typedef* gpiox)

//讀取整個gpio組中的所有io口

比如要讀 gpioa.5 的電平狀態,那麼方法是:

gpio_readinputdatabit

(gpioa, gpio_pin_5)

;

返回值是 1(bit_set)或者 0(bit_reset);

3.讀取io口輸出電平

uint8_t gpio_readoutputdatabit

(gpio_typedef* gpiox, uint16_t gpio_pin)

//讀取單獨某個io口

uint16_t gpio_readoutputdata

(gpio_typedef* gpiox)

//讀取整個gpio組中的所有io口

4.設定輸出電平

void

gpio_setbits

(gpio_typedef* gpiox, uint16_t gpio_pin)

;void

gpio_resetbits

(gpio_typedef* gpiox, uint16_t gpio_pin)

在多數情況下,我們都是採用這兩個函式來設定 gpio 埠的輸入和輸出狀態。比如我們要設定 gpiob.5 輸出 1,那麼方法為:

gpio_setbits

(gpiob, gpio_pin_5)

;

反之如果要設定 gpiob.5 輸出位 0,方法為:

gpio_resetbits

(gpiob, gpio_pin_5)

;

#include

"stm32f10x.h"

void

delay

(u32 count)

intmain

(void

)}

STM32學習筆記 調庫點燈

參考指南 暫時空白 bsp board support package 板級支援包 bsp led.c bsp led.h 1.開啟外設時鐘 2.配置外設初始化結構體 3.呼叫外設初始化函式,把配置好的結構體成員寫到暫存器裡邊 bsp board support package 板級支援包 incl...

stm32學習記錄

讓自己別忘了大學裡學的東西,那麼就把它記錄下下來,效率會比忘記然後重新再去找資料再重頭學高的多 先講講定時器的基礎定時功能 1.先做乙個形象的比喻 手錶 秒鐘 時鐘 定時器 定時器內部時鐘 定時器輸出時鐘 它們倆基本相同,不同的是,對於手錶是秒鐘和分鐘之間的進製是固定為60,而對於定時器,定時器內部...

STM32學習筆記 SystemInit 函式

時鐘頻率 在stm32韌體庫3.0中對時鐘頻率的選擇進行了大大的簡化,原先的一大堆操作都在後台進行。系統給出的函式為systeminit 但在呼叫前還需要進行一些巨集定義的設定,具體的設定在system stm32f10x.c檔案中。檔案開頭就有乙個這樣的定義 define sysclk freq ...