STM32单片机相比51单片机,内部结构复杂很多,因此直接对底层寄存器编码,相对复杂,这个需要我们了解芯片手册,对于复杂项目,这些操作可能需要反复编写,因此出现了标准库的方式,对寄存器操作进行了封装,操作相对简单。随着项目复杂度提升,又出现了封装更厉害的一种库HAL,这个需要借助STM32CubeMx工具来生成代码。
简单来说,STM32编码有三种方式:
1、寄存器编码。
2、标准库操作编码。
3、HAL库操作编码。
这三种方式各有优劣势,寄存器编码更偏向底层,方便我们熟悉单片机内部结构,开发效率相对较低,因为很多初始化,赋值操作需要反复编写,使用HAL库,可以减少大量代码,提高了开发效率,但是不便于理解底层逻辑,需要非常熟练STM32单片机工作逻辑之后才好上手。
第一种寄存器编码方式,构建项目可以直接新建一个普通项目,如下所示:
项目新建之后,什么也没有,我们需要手动添加一个启动文件和一个main.c文件到工程目录:
我们在keil工具里面,通过添加现有项的方式将这两个文件加到Source Group 1 中,如下所示:
这个时候,编译会报错:
说是SystemInit符号未定义,其实是我们构建的项目代码里面(main.c)中缺少SystemInit()方法,添加上就可以了。