天天看點

STM32F1XX(七) C語言,寄存器位址名稱映射(P17)

一 C語言複習

1 位操作

2 define 宏定義關鍵詞

3 ifdef 條件編譯

4 extern 變量聲明

5 typedef 類型别名

6 結構體

7 static 關鍵字

1 位操作:6種操作運算符

STM32F1XX(七) C語言,寄存器位址名稱映射(P17)

異或:值一樣取1,不同取0

GPIOA->CRL&=0xFFFFFF0F; //将4-7位清0

GPIOA->CRL|=0x00000040; //設定對應位的值,不改變其他位的值

GPIOA->ODR|=1<<5;

TIMx->SR=(uint16_t)~TIM_FLAG;

2 define宏定義關鍵詞

define是C語言中的預處理指令,它用于宏定義,可以提高源代碼的可讀性,為程式設計提供友善。

常見的格式:

#define 辨別符 字元串

“辨別符”為所定義的宏名。”字元串“ 可以是常數,表達式,格式串等。

例如:

#define SYSCLK_FREQ_72MHz 72000000

定義辨別符SYSCLK_FREQ_72MHz的值為72000000

3 ifdef條件編譯

單片機程式開發過程中,經常會遇到一種情況,當滿足某條件時對一組語句進行編譯,而當條件不滿足時則編譯另一組語句。條件編譯指令最常見的形式為:

STM32F1XX(七) C語言,寄存器位址名稱映射(P17)

4 extern 變量申明

extern是申明,不是定義,定義永遠隻有一次

C語言中extern可以置于變量或者函數前,以表示變量或者函數的定義在别的檔案中,提示編譯器遇到此變量和函數時在其他子產品中尋找其定義。

注:對于extern申明變量可以多次,但定義隻有一次

STM32F1XX(七) C語言,寄存器位址名稱映射(P17)

5 typedef 類型别名

定義一種類型的别名,而不是簡單的宏替換。可以用作同時聲明指針型的多個對象。可以多重定義,即被定義的某一個宏可以再被定義為另一個宏。

STM32F1XX(七) C語言,寄存器位址名稱映射(P17)

6 結構體:構造類型

STM32F1XX(七) C語言,寄存器位址名稱映射(P17)

在結構體申明的時候可以定義變量,也可以申明之後定義,方法是:

struct 結構體名字 結構體變量清單;

結構體作用:

同一個類型可以用數組,不同類型可以用結構體組織。

結構體可擴充性強。

STM32F1XX(七) C語言,寄存器位址名稱映射(P17)

7 C語言關鍵字:static

static 申明的局部變量,存儲在靜态存儲區。

它在函數調用結束之後,不會被釋放。它的值會一直保留下來。

是以可以說static申明的局部變量,具有記憶功能。

二 MDK中寄存器位址名稱映射分析

對于MCU,一切底層配置,最終都是配置寄存器

STM32F1XX(七) C語言,寄存器位址名稱映射(P17)
STM32F1XX(七) C語言,寄存器位址名稱映射(P17)

基位址+偏移量, 一級一級映射,最終到外設基位址——一個基本位址

STM32F1XX(七) C語言,寄存器位址名稱映射(P17)

注意這一行是将一排位址強制轉換為按順序的結構體變量

STM32F1XX(七) C語言,寄存器位址名稱映射(P17)

繼續閱讀