目录
0. 《STM32单片机自学教程》专栏
13.1 新建本地工程文件夹
13.2 新建工程
13.2.1 新建工程
13.2.2 新建组
13.2-3 添加文件
13.3 配置魔术棒选项卡
13.3.1 Output 选项卡
13.3.2 C/C++选项配置
13.3.3 Dubug选项配置
13.4 使用标准库点亮LED
参考资料:
0. 《STM32单片机自学教程》专栏
本文作为专栏《STM32单片机自学教程》专栏其中的一部分,返回专栏总纲,阅读所有文章,点击Link:
STM32单片机自学教程-[目录总纲]_stm32 学习-CSDN博客
上节我们介绍了STM32的标准库,现在我们就可以基于标准库来建立工程了。基于标准库的模版比较固定,而且还是稍微有点麻烦的。所以我们经常是建立一个空的工程模版,后面开发的时候直接复制工程模板进行开发。现在我们就一步步的操作一下。
13.1 新建本地工程文件夹
在本地我们新建文件夹“Led_StdLibVersion”用于存放工程。然后新建4个文件夹:“Doc”,“StdLibrary”,” System”,”User”,如图13.1-1所示。当然这个不是固定的,按自己的喜好建立即可,只要文件夹清晰,一看文件夹就知道作用是干什么的就行了。
图13.1-1 新建文件夹目录
下面针对每个文件夹需要放的文件进行说明:
Doc文件夹:
用来存放程序相关的说明文件,比如程序怎么使用,注意事项等等。
StdLibrary文件夹:
主要是把外设相关的库函数放入,即\Libraries\STM32F10x_StdPeriph_Driver下inc和src两个文件夹下的所有文件。如图13.1-2.
图13.1-2 StdLibrary文件夹
System文件:
放入系统相关的文件,包含启动,内核及外设的寄存器映射,系统时钟配置等核心函数。主要是STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3中的文件:core_cm3.c, core_cm3.h, stm32f10x.h, system_stm32f10x.c, system_stm32f10x.h以及启动汇编文件startup_stm32f10x_md.s(注意,不同型号的启动文件不一样,md的是STM32F103C8T6型号的,选择方法前面章节有介绍,这里不再赘述。)如图13.1-3.
图13.1-3 system文件夹
User文件夹:
存放用户编写的函数,如main.c,以及中断服务函数system_stm32f10x.c, system_stm32f10x.h以及stm32f10x_conf.h。如图13.1-4.
图13.1-4 User文件夹
13.2 新建工程
13.2.1 新建工程
在我们新建的“Led_StdLibVersion”文件夹下新建工程,命名“project”。这个过程前面讲解过,这里不再赘述
13.2.2 新建组
我们新建3个组,和我们新建的文件夹同名:“StdLibrary”,” System”,”User”。如图13.2-1所示。
图13.2-1 新建组
13.2-3 添加文件
图13.2-2 添加文件
如上图所示,将同名文件夹下的文件,全部添加到MDK的同名组中。添加完成后如图13.2-3所示。
13.3 配置魔术棒选项卡
13.3.1 Output 选项卡
在Output 选项卡中把输出文件夹定位可以定位到指定文件夹,这里我一般习惯默认系统自动生成的文件夹object,这一步可不用操作。如果想在编译的过程中生成 hex 文件,可以把 Create HEX File 选项勾上。如下图:
图13.3-1 output选项卡
图13.3-2 工程组添加文件后
13.3.2 C/C++选项配置
图13.3-3 C/C++选项卡设置
如上图,C/C++选项开主要配置2个地方:
①Define配置:
在这个选项中添加宏,就相当于我们在程序中使用“#define”定义宏的效果是一样的。但是如果放在编译器中添加这个宏,优势就是后面我们新建工程的时候只要用了这个模版,就不用再在程序文件中修改代码。在上图Define位置我们需要输入:USE_STDPERIPH_DRIVER。目的就是为了让stm32f10x.h包含stm32f10x_conf.h头文件,把所有外设都包含进来。stm32f10x.h相关代码如下图13.3-4:
图13.3-4 stm32f10x.h代码设计外设包含部分
②Include Paths:
此处添加的头文件的路径,没有这一步编译的时候会报错提示找不到头文件。头文件放到了哪个文件夹,我们就把该文件夹添加到这里。
13.3.3 Dubug选项配置
图13.3-5 Debug选项卡配置
下拉列表选择对应调试器,Settings/Flash Download里勾选Reset and Run。这个前面讲过,就不再赘述。
13.4 使用标准库点亮LED
为区别前面2种点亮LED的方式,本次我们LED连接PB10这个IO口。
图13.4-1 简易接线图
代码如下:
#include "stm32f10x.h" // Device headerint main(void)
{//开启APB2,GPIOB外设时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//初始化GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//开启PB2GPIO_ResetBits(GPIOB,GPIO_Pin_2);while (1){}}
参考资料:
【1】哔站江协科技STM32入门教程
【2】《STM32单片机原理与项目实战》刘龙、高照玲、田华著
【3】《ARM Cortex-M3嵌入式原理及应用》黄可亚著
【4】《STM32嵌入式微控制器快速上手》陈志旺著
【5】《STM32单片机应用与全案例实践》沈红卫等著
【6】《野火STM32开发指南》
【7】《正点原子STM32开发指南》