一、定义整数的两种不同数据类型
有符号型(signed):可以表示正负数,最高位为0表示正数,最高数为1表示负数。
无符号型(unsigned):只能表示正数。
二、寄存器赋值的方法
单片机基础操作就是给寄存器赋值去实现一些功能,而STM32单片机有标准库函数、HAL库函数、寄存器三种主流写法,前两种就是通过typdef、#define来将一些十六进制的数替换成自定义的标识符,这样的好处就是提高代码的可读性例如: #define GPIO_MODE 0x00000003u 配置GPIO的模式。
而我们操作寄存器呢?
要记住一个重点,我们在C语言和数电中都学过的与操作(&)和或操作(|)用|来置位用&来清零有三种方法:
法1:先给寄存器清零,然后再用&来置位。
法 2:异或操作,不同为1,相同为0。
三、#define宏定义
宏定义的核心是替换,提高可读率和易读率
#define LED1(X) do{x?\ }while(0)
用do while来构造宏定义
四、条件编译
有#ifndef #if() #ifdef #endif
五、extern声明变量
放在函数/变量前,表示声明变量在其它文件页里
六、typedef的用法
typedef 为数据类型创建一个新名字
typedef 现有的数据类型 新名字
typedef unsigned char uint8_t 用 uint8_t 来代替 unsigned char 无符号型字符
七、结构体
struct 结构体名
{
成员列表
}变量名列表
使用时:变量名.成员=?就可以引用结构体里的成员然后赋值,这么做使用方便,在面对多变量的时候只需要在结构体力引用就好了!
八、指针
指针是非常重要的尤其是结构体指针,但靠文字是很难解释的建议大家去B站搜一搜自学一下。
九、代码规范
大家写代码的时候一定要注意代码规范,比如指针地址不要超过数组的长度,创建新变量的时候要符合规范,通俗易懂等等。