輸入浮空
輸入上拉
輸入下拉
模擬輸入
開漏輸出
開漏復用輸出
推挽輸出
推挽復用輸出
2mhz
10mhz
50mhz
每組gpio共16個io口,含下7個暫存器
gpiox_crl : 埠配置低暫存器
gpiox_crh : 埠配置高暫存器
gpiox_idr : 埠輸入暫存器
gpiox_odr : 埠輸出暫存器
gpiox_bsrr : 埠位設定/清除暫存器
gpiox_brr : 埠位清除暫存器
gpiox_lckr : 埠配置鎖存暫存器
連線方式:
led0連線pb5引腳
led1連線pe5引腳
1,使能gpio時鐘
2,初始化io口工作模式
配置暫存器:gpiox_crh/crl
3,操作io口輸出高低電平
配置暫存器gpio_odr或gpio_brr
使能gpiob時鐘:
使能gpioe時鐘:
stm32f10x.h找到rcc_typedef結構體宣告:
typedef
struct
rcc_typedef;
再找到結構體指標rcc:
#define rcc ((rcc_typedef *) rcc_base)
接下來我們需要操作rcc_typedef結構體下apb2enr暫存器的第3位(gpiob)和第6位(gpioe)使能
這裡為了修改apb2enr第3位和第6位而不影響其他位的值,我們採用」|」(或)運算(有乙個是1結果就為1)
使能gpiob和gpioe我們需要將apb2enr暫存器第3位和第6位賦值為1
使能gpiob: rcc->apb2enr|=1<<3;
使能gpioe: rcc->apb2enr|=1<<6;
每組gpio有16個io口,gpiox_crl配置0-7位,gpiox_crh配置8-15位
所以配置pb5和pe5需要操作gpio_crl暫存器
每個io口由4個位控制,gpiox_crl的32個位控制8個io口
led跑馬燈需要設定io為推挽輸出
所以我們需要將gpiox.5的cnf5設定為00,mode5設定為11 , 0011的16進製制值為3
// 配置gpiox.5配置為輸出速度50mhz的推挽輸出
gpiob->crl&=0xff0fffff; // 乙個f代表4位,我們將20-23位(gpiox.5)清空為0
gpiob->crl|=0x00300000; // 不影響其他位,將20-24位值設定為0011(16進製為3)
我們的led為低電平點亮,高電平熄滅,所以初始化應設定為熄滅狀態,設定io口輸入為高電平
需要操作ord或brr暫存器,我們以odr暫存器為例:
我們要將pb5或pe5的輸出電平設定為1,需要設定第五位odr5值為1:
gpiob->odr|=1
<<5; // 在不影響其他位的情況下,將odr5賦值為1
新建led標頭檔案:haerware->led->led.h 定義led初始化函式
#ifndef __led_h
#define __led_h
void led_init(void);
#endif
新建:haerware->led->led.c 實現led初始化函式
#include "led.h"
#include "stm32f10x.h"
void led_init(void)
user->main.c 主函式編寫led跑馬燈**
#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
int main(void)
}
跑馬燈實驗 暫存器版
1 參考資料 stm32f1開發指南 暫存器 第六章 跑馬燈實驗6.1小節 stm32中文參考手冊 v10 8.2 gpio暫存器描述 7.3.7 apb2外設時鐘使能暫存器 rcc apb2enr 2 編寫步驟 使能io口時鐘。配置暫存器rcc apb2enr。初始化io口模式。配置暫存器gpio...
LED跑馬燈效果
這個led跑馬燈的效果是怎麼乙個原理,現分析如下 假設有乙個要進行變化的物件陣列,我們稱之為a物件。如下 這個等變化的陣列長度為5,有顏色陣列,我們稱之為b,如下 這個長度為3。要分析出原理,我們要根據事物的表象去分析得到事物內在的規律與原理,根據這個原理與規律我們才能得出解決辦法。我們進行一次模擬...
LED跑馬燈實驗
一 新建工程並新增相應的工程檔案 本實驗需要用到三個韌體庫檔案,分別為stm32f4xx gpio.c stm32f4xx gpio.h stm32f4xx rcc.c stm32f4xx rcc.h misc.c misc.h 二 編寫使用者驅動 1 編寫c檔案 a.使能gpio時鐘,根據電路原理...