从零开始学习STM32(一)—— 新建工程模板

从零开始学习STM32(一)—— 新建工程模板

  • 前言
  • 准备工作
    • 软件下载
    • 必要文件下载
  • 新建工程
  • 结语

前言

从零开始学习STM32系列将由浅入深,和大家一起走进STM32的世界。

本系列的学习是基于正点原子的 ALIENTEK MiniSTM32 V3.0 开发板,miniSTM32开发板已经具备了大多数常用的功能,引脚数量始终,很适合初学者学习。

本篇作为该系列的第一章,将向大家介绍如何新建一个工程模板。工程模板建立的步骤较为反复,少了任何一个步骤都有可能导致打量编译错误,还请大家仔细认真的阅读。

准备工作

软件下载

STM32的开发软件为 Keil uvision5 MDK(以下将简称MDK5)
Keil uvision5 MDK 软件安装及教程
提取码:tnrj

必要文件下载

在 MDK5 安装完成后,要让 MDK5 支持 STM32F103 的开发,我们还需要安装 STM32F1的器件支持包:Keil.STM32F1xx_DFP.2.2.0.pack(STM32F1 的器件包)
提取码:okoj

还有建立工程时要用的文件:
STM32F10x_StdPeriph_Lib_V3.5.0
提取码:ytel

因为 ALIENTEK MiniSTM32 开发板所使用的 STM32 型号为STM32F103RCT6,所以在这里我们选择 STMicroelectronics→STM32F1Series→STM32F103→STM32F103RCT6(如果使用的是其他系列的芯片,选择相应的型号就可以了,特别注意:一定要安装对应的器件 pack 才会显
示这些内容哦!!,如果没得选择,请关闭 MDK,然后安装STM32F1的器件支持包

新建工程

准备就绪后我们就可以开始建立工程啦!

1.新建一个工程文件夹,并在该文件夹中新建一个子文件夹(名字自己爱取啥就取啥,父文件夹我命名为first class,子文件夹为USER)
从零开始学习STM32(一)—— 新建工程模板_第1张图片

2.打开菜单栏中的项目
从零开始学习STM32(一)—— 新建工程模板_第2张图片
3. 选择新uVision项目
从零开始学习STM32(一)—— 新建工程模板_第3张图片
4.选择我们新建的子文件夹,保存工程

5.接着会弹出窗口
从零开始学习STM32(一)—— 新建工程模板_第4张图片
mini板用的是STM32F103RTC6芯片,所以选择SYMicroelectronics——STM32F1 Series——STM32F103——STM32F103RC,然后点击OK。
从零开始学习STM32(一)—— 新建工程模板_第5张图片
紧接着会弹出下面的串口,取消或×掉就好了
从零开始学习STM32(一)—— 新建工程模板_第6张图片
6.到了这一步,框架算是搭好了,接下来就是加入各种文件让他能够正常运行。首先,在父文件夹first class中再新建几个文件(名字任取,自己清楚就好了)。
从零开始学习STM32(一)—— 新建工程模板_第7张图片
7.打开文件夹STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver,将其中的文件inc和src复制到first class\STM32f10x_FWLIB文件夹中。
从零开始学习STM32(一)—— 新建工程模板_第8张图片
从零开始学习STM32(一)—— 新建工程模板_第9张图片
7.打开文件夹STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport中的两个文件复制到first class\CORE文件夹中。
从零开始学习STM32(一)—— 新建工程模板_第10张图片
从零开始学习STM32(一)—— 新建工程模板_第11张图片
8.打开文件夹STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\STSTM32f10x\startup\arm文件夹中的startup_stm32f10x_hd文件复制到first class\CORE文件夹中。
从零开始学习STM32(一)—— 新建工程模板_第12张图片
从零开始学习STM32(一)—— 新建工程模板_第13张图片
9.打开文件夹STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\STSTM32f10x,将stm32f10x、system_stm32f10x、system_stm32f10x文件复制到first class\USER文件夹中。
从零开始学习STM32(一)—— 新建工程模板_第14张图片
从零开始学习STM32(一)—— 新建工程模板_第15张图片
10.打开文件夹STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template,将图中的四个文件复制到first class\USER文件夹中
从零开始学习STM32(一)—— 新建工程模板_第16张图片
从零开始学习STM32(一)—— 新建工程模板_第17张图片
11.右击Target,选择Manage Project Items,更改或添加相关文件
从零开始学习STM32(一)—— 新建工程模板_第18张图片
从零开始学习STM32(一)—— 新建工程模板_第19张图片
12.接着我们将相关文件添加到相应的组中,图示为FWLIB组添加文件的步骤。
打开文件夹first class\STM32f10x_FWLIB\src,将其中的所有文件添加到FWLIB组中
从零开始学习STM32(一)—— 新建工程模板_第20张图片
从零开始学习STM32(一)—— 新建工程模板_第21张图片
下图展示的是将first class\USER文件夹中的三个.c文件添加到USER组中
从零开始学习STM32(一)—— 新建工程模板_第22张图片
CORE组文件的添加有些不同,打开first class\CORE文件夹,先将文件类型改为All files,再将箭头所指的两个文件添加到CORE组中。
从零开始学习STM32(一)—— 新建工程模板_第23张图片
13.因为在编译时会产生大量文件,所以我们要进行一些设置。
如图,点击魔术棒。
从零开始学习STM32(一)—— 新建工程模板_第24张图片
点击Output选项,将图示的三个选项全部勾选,特别注意,不勾选Create HEX File选项将无法生成hex文件。
从零开始学习STM32(一)—— 新建工程模板_第25张图片
点击Select Folder For Objects可以更改编译时产生的文件的存储位置。(我选的时first class\OBJ文件夹)
从零开始学习STM32(一)—— 新建工程模板_第26张图片
从零开始学习STM32(一)—— 新建工程模板_第27张图片
14.再次点开魔术棒,点击选项C/C++,选择Include Paths,将所需文件添加到该选项中
从零开始学习STM32(一)—— 新建工程模板_第28张图片
所需添加的文件有
从零开始学习STM32(一)—— 新建工程模板_第29张图片

从零开始学习STM32(一)—— 新建工程模板_第30张图片
原子哥还为我们提供了几个常用的函数,我们也可以按照这个步骤把它添加到工程里:SYSTEM
提取码:mjoq

添好之后是这样的
从零开始学习STM32(一)—— 新建工程模板_第31张图片

特别注意,如果少了第十四步,程序将无法编译成功,并且,我们以后编写的头文件也要添加到这里。还有就是,只能添加最后一级的子文件夹
例如,first class\STM32f10x_FWLIB文件是无法直接添加的,first class\STM32f10x_FWLIB\inc可添加成功。

15.再次点开魔术棒,点击选项C/C++,在Define框中添加宏定义"STM32F10X_HD,USE_STDPERIPH_DRIVER"。点击OK就可以了。
从零开始学习STM32(一)—— 新建工程模板_第32张图片

特别注意,宏定义写错将导致编译失败。还有,每次添加完文件或修改参数都要点击确认,否则,数据不会更改。

16.做到这一步,编译时任会有一个错误。那是因为主函数已经编写好了,但是不是我们想要的程序,里面运用到了我们没有的头文件。全部删除,重新写一个程序就好了。
从零开始学习STM32(一)—— 新建工程模板_第33张图片
测试代码

#include "stm32f10x.h"
 void Delay(u32 count)
 {
     
  u32 i=0;
  for(;i<count;i++);

 }
 int main(void)

 {
     	
  GPIO_InitTypeDef  GPIO_InitStructure;
 	
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);	 //使能PA,PD端口时钟
	
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;				      //LED0-->PA.8 端口配置
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		  //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		  //IO口速度为50MHz
  GPIO_Init(GPIOA, &GPIO_InitStructure);					      //根据设定参数初始化GPIOA.8
  GPIO_SetBits(GPIOA,GPIO_Pin_8);						            //PA.8 输出高

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;	    		    //LED1-->PD.2 端口配置, 推挽输出
  GPIO_Init(GPIOD, &GPIO_InitStructure);	  			   	  //推挽输出 ,IO口速度为50MHz
  GPIO_SetBits(GPIOD,GPIO_Pin_2); 						          //PD.2 输出高 	  
  while(1)
	{
     
	    GPIO_ResetBits(GPIOA,GPIO_Pin_8);
	    GPIO_SetBits(GPIOD,GPIO_Pin_2);
		Delay(5000000);
		GPIO_SetBits(GPIOA,GPIO_Pin_8);
		GPIO_ResetBits(GPIOD,GPIO_Pin_2);
		Delay(5000000);
	}
 }

点击编译
从零开始学习STM32(一)—— 新建工程模板_第34张图片
至此,新建工程的所有步骤全部完成。分享一个技巧,以后要编写工程直接复制这个模板就好了。

结语

新建工程项目步骤繁琐,还希望大家认真仔细,因为少了任何一个步骤都有可能导致工程建立失败。找到哪里出错可能要花很多时间。这时我踩过的大坑啊!!!!祝大家一次就成功!!!!

这是我在CSDN上发布的第一篇文章,有什么不足的地方还请大家斧正。

最后,希望大家点赞,收藏加关注!!!!

多谢大家的支持!!!!

你可能感兴趣的:(嵌入式,嵌入式,stm32)