一 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,一切底层配置,最终都是配置寄存器
基地址+偏移量, 一级一级映射,最终到外设基地址——一个基本地址
注意这一行是将一排地址强制转换为按顺序的结构体变量