一 C語言複習
1 位操作
2 define 宏定義關鍵詞
3 ifdef 條件編譯
4 extern 變量聲明
5 typedef 類型别名
6 結構體
7 static 關鍵字
1 位操作:6種操作運算符

異或:值一樣取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條件編譯
單片機程式開發過程中,經常會遇到一種情況,當滿足某條件時對一組語句進行編譯,而當條件不滿足時則編譯另一組語句。條件編譯指令最常見的形式為:
4 extern 變量申明
extern是申明,不是定義,定義永遠隻有一次
C語言中extern可以置于變量或者函數前,以表示變量或者函數的定義在别的檔案中,提示編譯器遇到此變量和函數時在其他子產品中尋找其定義。
注:對于extern申明變量可以多次,但定義隻有一次
5 typedef 類型别名
定義一種類型的别名,而不是簡單的宏替換。可以用作同時聲明指針型的多個對象。可以多重定義,即被定義的某一個宏可以再被定義為另一個宏。
6 結構體:構造類型
在結構體申明的時候可以定義變量,也可以申明之後定義,方法是:
struct 結構體名字 結構體變量清單;
結構體作用:
同一個類型可以用數組,不同類型可以用結構體組織。
結構體可擴充性強。
7 C語言關鍵字:static
static 申明的局部變量,存儲在靜态存儲區。
它在函數調用結束之後,不會被釋放。它的值會一直保留下來。
是以可以說static申明的局部變量,具有記憶功能。
二 MDK中寄存器位址名稱映射分析
對于MCU,一切底層配置,最終都是配置寄存器
基位址+偏移量, 一級一級映射,最終到外設基位址——一個基本位址
注意這一行是将一排位址強制轉換為按順序的結構體變量