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;

浙公网安备 33010602011771号