ARM32入門學習筆記之 GPIO庫

2021-09-03 01:20:08 字數 2888 閱讀 4163

函式名描述

gpio_init

根據gpio_initstruct中指定的引數初始化外設gpiox暫存器

gpio_readinputdatabit

讀取指定埠管腳的輸入

gpio_readinputdata

讀取指定的gpio埠輸入

gpio_readinputdatabit

讀取指定埠管腳的輸出

gpio_readoutputdata

讀取指定的gpio埠輸出

gpio_setbits

設定指定的資料埠位

gpio_resetbits

清除指定的資料埠位

gpio_writebit

設定或者清除指定的資料埠位

gpio_write

向指定gpio資料埠寫入資料

1.gpio_init函式

void gpio_init(gpio_typedef* gpiox, gpio_inittypedef* gpio_initstruct);
根據gpio_initstruct中指定的引數初始化外設gpiox暫存器

引數1:gpiox:x可以是a、b、c、d、e,來選擇gpio外設;

引數2:gpio_initstruct:指向結構gpio_inittypedef的指標,包含了外設gpio的配置資訊參閱section:gpio_inittypedef查閱更多該引數允許取值範圍;

例如:

//宣告乙個名為gpio_initstructure的gpio_inittypedef型結構體

gpio_inittypedef gpio_initstructure;

//選中埠1

gpio_initstructure.gpio_pin = gpio_pin_0;

//選擇埠的速度為10m

gpio_initstructure.gpio_speed = gpio_speed_10mhz;

//選擇埠為輸出模式

gpio_initstructure.gpio_mode = gpio_mode_out;

//選擇埠為推挽輸出

gpio_initstructure.gpio_otype = gpio_otype_pp;

//選擇埠為無上拉和下拉

gpio_initstructure.gpio_pupd = gpio_pupd_nopull;

gpio_init(gpioa,&gpio_initstructure);

2.gpio_readinputdatabit函式

uint8_t gpio_readinputdatabit(gpio_typedef* gpiox, uint16_t gpio_pin);
讀取指定埠管腳的輸入

引數1:gpiox:同上

引數2:gpio_pin:待讀取的埠位

例如:

uint8_t readvalue;

readvalue = gpio_readinputdatabit(gpioa,gpio_pin_7);

3.gpio_readinputdata函式

uint16_t gpio_readinputdata(gpio_typedef* gpiox);
讀取指定的gpio埠輸入

例如:

uint16_t readvalue;

readvalue = gpio_readinputdata(gpioa);

4.gpio_setbits函式

void gpio_setbits(gpio_typedef* gpiox, uint16_t gpio_pin);
設定指定的資料埠位

例如:

//設定pa1和pa0為高電平

gpio_setbits(gpioa,gpio_pin_1 |gpio_pin_0);

5.gpio_resetbits函式

void gpio_resetbits(gpio_typedef* gpiox, uint16_t gpio_pin);
清除指定的資料埠位

例如:

//設定pa1和pa0為低電平

gpio_resetbits(gpioa,gpio_pin1 | gpio_pin_0);

6.gpio_writebit函式

void gpio_writebit(gpio_typedef* gpiox, uint16_t gpio_pin, bitaction bitval);
設定或清除指定的資料埠位

例如:

//設定pa1和pa0為低電平

gpio_writebit(gpioa,gpio_pin_1 | gpio_pin_0, bit_reset);

7.gpio_write函式

void gpio_write(gpio_typedef* gpiox, uint16_t portval);
向指向gpio資料埠寫入資料

例如:

//向pa口寫入資料

gpio_write(gpioa,0x0101);

rcc_ahbperiphclockcmd(rcc_ahbenr_gpioaen,enable);

systeminit();

ARM 學習筆記之1 必看的ARM 官方文件

文件1 arm compiler armasm user guide version 6.10.pdf 非常方便查詢arm指令功能及用法。文件2 arm v5 architecture reference manual.pdf 學習cpu架構 記憶體及系統架構的不二之選。文件3 arm926ej s...

ARM9學習筆記之 MMU

我記得有一次我去應聘arm linux軟體工程師。結果被問到arm中的虛擬記憶體是怎麼管理的。由於我只對x86平台下的mmu了解,所以我被問倒了。原來我所學的只是皮毛。還有很多東西值得我去深入。要做arm linux下的驅動,熟悉虛擬記憶體應該是必須的。arm9中的虛擬記憶體是怎麼實現的呢?以下是我...

ARM9學習筆記之 彙編

arm系列晶元與pc系列 可能我說法不太準確 晶元在指令設計上就有本質的區別。arm中每條指令是精簡指令集要麼是32位,要麼是16位。而pc的指令是複雜指令集,一條指令可以由多個位元組組成。1.關於函式呼叫方法 在arm彙編中,函式呼叫非常靈活。1 bl指令 bl initmem 呼叫 initme...