點亮開發板上的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.根據位址每位對應的功能...