STM32使用暫存器工程模板點亮乙個LED燈

2021-09-19 09:09:53 字數 2836 閱讀 4864

點亮開發板上的led1燈。

#define periph_base      ((unsigned int)0x40000000)

#define apb2periph_base (periph_base + 0x00010000)

#define gpioc_base (apb2periph_base + 0x1000)

#define gpioc_crl *(unsigned int*)(gpioc_base+0x00)

#define gpioc_crh *(unsigned int*)(gpioc_base+0x04)

#define gpioc_idr *(unsigned int*)(gpioc_base+0x08)

#define gpioc_odr *(unsigned int*)(gpioc_base+0x0c)

#define gpioc_bsrr *(unsigned int*)(gpioc_base+0x10)

#define gpioc_brr *(unsigned int*)(gpioc_base+0x14)

#define gpioc_lckr *(unsigned int*)(gpioc_base+0x18)

#define ahbperiph_base (periph_base + 0x20000)

#define rcc_base (ahbperiph_base + 0x1000)

#define rcc_apb2enr *(unsigned int*)(rcc_base+0x18)

在stm32f10x.h標頭檔案中,新增上面的內容。

#define periph_base      ((unsigned int)0x40000000)

#define apb2periph_base (periph_base + 0x00010000)

#define gpioc_base (apb2periph_base + 0x1000)

首先定義基位址,將其轉化為無符號整型。

對gpioc暫存器進行設定

#define gpioc_crl 	 	 *(unsigned int*)(gpioc_base+0x00)

#define gpioc_crh *(unsigned int*)(gpioc_base+0x04)

#define gpioc_idr *(unsigned int*)(gpioc_base+0x08)

#define gpioc_odr *(unsigned int*)(gpioc_base+0x0c)

#define gpioc_bsrr *(unsigned int*)(gpioc_base+0x10)

#define gpioc_brr *(unsigned int*)(gpioc_base+0x14)

#define gpioc_lckr *(unsigned int*)(gpioc_base+0x18)

a、首先需要將上面的整型資料強轉成指標型別。

(unsigned int*)(gpioc_base+0x00)
b、將指標指向的記憶體單元中的內容取出來,根據c的知識,需要在其前面加上乙個「*」。

*

(unsigned

int*

)(gpioc_base+

0x00

)

c、根據資料手冊,將對應的位址內容使用乙個便於是別的名字進行定義。

a、配置時鐘,根據資料手冊,gpio都是掛接在apb2下,這也是上面使用的標頭檔案有apb2的原因。

只需要將第4位置1即可,為了不影響其他位的狀態,需要做或操作。

rcc_apb2enr |= (1<<4);

a、先將低4位清0,在進行輸出的設定,設定為最大時鐘速度,輸出模式使用通用推挽輸出模式。

根據開發板的原理圖,當該引腳設定為0時,led燈被點亮,設定為1時,熄滅。

STM32蜂鳴器 暫存器

這次實驗犯了個笑話,竟然在巨集定義後面加分號.就像這樣 define 大家千萬不要學我,結果報錯expected expression,還苦惱半天,想為啥操作不了暫存器了?我真愚蠢!剛開始我也不會寫這些東西,其實摸清套路就好,rcc時鐘使能 gpio初始化 相關暫存器初始化 延時函式 串列埠等初始化...

STM32暫存器對映

1.對映即將記憶體的某段位址與某一暫存器對應,微控制器對函式的操作底層是操作暫存器,而暫存器最終是操作記憶體上對應的單元,2.各個暫存器對應的位址都是在st定義的起始位址上層層偏移得到 3.想要實現某功能可直接對此段記憶體寫進相應的值,即可賦予某一功能 4.stm32底層實際是先定義出外設基位址,然...

STM32之暫存器開發

首先克服心理作用,不要總是預設暫存器開發難,其實暫存器開發和庫函式開發所用的方法和難度是一樣的,並不難,下面用以stm32為例解釋。1.明確自己需要的功能 庫函式開發也需要 2.檢視手冊,找到功能對應的微控制器資源 3.找到功能所需暫存器 庫函式開發需要找到相應的功能函式 4.根據位址每位對應的功能...