1.所有晶元的引腳順序都是逆序排列的
2.晶元主要由核心和片上外設組成。
儲存器本身不具有位址,給儲存器分配位址的過程就稱為儲存器對映。
給儲存器再分配乙個位址的過程就叫做儲存器重對映。
設計片上外設時,以四個位元組為乙個單元,共32bit,每個單元對應不同的功能,我們控制這些單元就可以驅動外設工作。
根據每個單元的功能不同,以功能為名給這個記憶體單元起別名,這個別名就是暫存器。
給已經分配好位址的有特定功能的記憶體單元取別名的過程就叫做暫存器對映
例子:gpiof埠的輸出資料暫存器odr的記憶體位址為0x4002 1414(odr暫存器32位,低16位有效,控制16個io埠輸出高低電平)
*
(unsigned
int*
)0x40021414
=0xffff
;
通過暫存器方式訪問記憶體單元
#define gpiof_base 0x40021400
#define gpiof_odr (unsigned int *)(0x40021400 + 0x14)
*gpiof_odr =
0xffff
;
/* 外設基位址 */
#define periph_base (unsigned int)0x40000000
/* 匯流排基位址 */
#define apb1periph_base periph_base
#define apb2periph_base (periph_base + 0x10000)
#define ahb1periph_base (periph_base + 0x20000)
#define ahb2periph_base (periph_base + 0x10000000)
/* gpio外設基位址 */
#define gpioa_base ahb1periph_base
#define gpiob_base (ahb1periph_base + 0x400)
#define gpioc_base (ahb1periph_base + 0x800)
#define gpiod_base (ahb1periph_base + 0xc00)
#define gpioe_base (ahb1periph_base + 0x1000)
#define gpiof_base (ahb1periph_base + 0x1400)
#define gpiog_base (ahb1periph_base + 0x1800)
#define gpioh_base (ahb1periph_base + 0x1c00)
#define gpioi_base (ahb1periph_base + 0x2000)
c語言的語法規定,結構體內變數的儲存空間是連續的。
typedef
unsigned
int uint32_t;
/*無符號 32 位變數*/
typedef
unsigned
short
int uint16_t;
/*無符號 16 位變數*/
/* gpio 暫存器列表 */
typedef
struct
gpio_typedef;
gpio_typedef * gpiox;
//gpiox為指標,儲存的是變數的位址
gpiox = gpioa_base;
//將gpiox指向gpioa的基位址
gpiox->moder = oxffffffff;
//通過結構體成員訪問gpioa的moder暫存器
gpiox->bsrrl = oxffff;
清零操作:&=~
置位操作:|=
取反操作:^=
將變數的某位清零:
//x&=~(1
0xff
;//1111 1111 //bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
//將變數x的第三位清零
x &=~(
1<<3)
;//1111 0111
將變數的某位置位:
//x |= (1
0xf0
;//1111 0000
//將變數x的第零位置位
x |=(1
<<0)
//1111 0001
將變數的某位取反:
// x ^= (1
0xff
;//1111 1111
//將變數x的第2位取反
x ^=(1
<<2)
;// 1111 1011
STM32學習筆記 (1)基礎知識
參考文章 stm32 命名規則 rom ram flash 區別 1.rom read only memory 唯讀儲存器。特點 掉電不丟失資料,主要用來儲存 和常量等內容。2.ram random access memory 隨機儲存器,可讀可寫。特點 掉電會丟失資料。ram又分為sram sta...
STM32的時鐘基礎知識
一 不使用外部晶振時,osc in和osc out的原理圖設計 1 對於少於100個引腳的產品有兩種方法 1.1 osc in和osc out分別通過10k的電阻接地 提高emc效能。1.2 重對映osc in和osc out為pd0和pd1,配置為推挽輸出並輸出低電平 減少功耗且節省兩個外部電阻。...
stm32學習筆記一
最近小毅入手了一塊stm32,考慮到其arm cotexm3核心的強大性,決定學學。今天是第一次接觸,先從簡單的開始。小毅使用的開發環境是windows下的rvmdk,是keil的乙個版本,keil大家都不陌生吧,哈哈,學過51的都知道,就不贅述了。遇到了第乙個問題 led.axf error l6...