天天看点

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)

继续阅读