stm32f407之C语言

一、位操作

运算符 含义 运算符 含义
& 按位与 ~ 取反
| 按位或 << 左移
^ 按位异或 >> 右移

 (1) 不改变其他位的值的状况下,对某几个位进行设值

GPIOA->BSRRL&=0XFFOF;//将第4-7位清零

然后再与需要的值进行|或运算

GPIOA->BSRRL|=0X0040;//设置相应位的值,不改变其他位的值 

(2) 移位操作提高代码可读性

GPIOx->ODR=(((uint32_t)0x01)<<pinpos);//将 ODR 寄存器的第 pinpos 位设置为 1

 二、define宏定义

#define 标识符 字符串

“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。例如:

#define PLL_M 8

定义标识符 PLL_M 的值为 8。

三、ifdef条件编译

当满足某条件时对一组语句进行编译,而 当条件不满足时则编译另一组语句。

#ifdef 标识符
程序段 1
#else
程序段 2
#endif 

四、extern变量申明

C 语言中 extern 可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编 译器遇到此变量和函数时在其他模块中寻找其定义。这里面要注意,对于 extern 申明变量可以多 次,但定义只有一次。在我们的代码中你会看到看到这样的语句:

extern u16 USART_RX_STA; 

这个语句是申明 USART_RX_STA 变量在其他文件中已经定义了,在这里要使用到。所以,你肯定 可以找到在某个地方有变量定义的语句:

u16 USART_RX_STA; 

下面通过一个例子说明一下使用方法。 在 Main.c 定义的全局变量 id,id 的初始化都是在 Main.c 里面进行的。 Main.c 文件

u8 id;//定义只允许一次
main()
{
id=1;
printf("d%",id);//id=1
test();
printf("d%",id);//id=2
}

但是我们希望在main.c的 changeId(void)函数中使用变量id,这个时候我们就需要在main.c 里面去申明变量 id 是外部定义的了,因为如果不申明,变量 id 的作用域是到不了 main.c 文件 中。看下面 main.c 中的代码:

extern u8 id;//申明变量 id 是在外部定义的,申明可以在很多个文件中进行
void test(void){
id=2;
}

在 main.c 中申明变量 id 在外部定义,然后在 main.c 中就可以使用变量 id 了。

五、typedef 类型别名

我们可以为结体定义一个别 名 GPIO_TypeDef,这样我们就可以在其他地方通过别名 GPIO_TypeDef 来定义结构体变量了。 方法如下:

typedef struct
{
 __IO uint32_t MODER;
 __IO uint32_t OTYPER;
…
} GPIO_TypeDef;

Typedef 为结构体定义一个别名 GPIO_TypeDef,这样我们可以通过 GPIO_TypeDef 来定义结构体 变量:

GPIO_TypeDef _GPIOA,_GPIOB;

六、结构体

posted @ 2020-10-16 20:17  code;  阅读(187)  评论(0)    收藏  举报