学习STM32_Day2: 新建工程模板与点亮LED

烈酒焚心 提交于 2020-08-12 01:58:07

学习STM32_Day2: 新建工程模板

写在前面

本章搬运自部门电子部所写的接地气新建工程版,做了修正与适当修改,原本选取了C8T6,因为笔者此次选用RCT6学习,所以新建区别处在括号内已备注。

如何建立工程模板

通常,我们为单片机编写代码时使用的工程是一个较复杂的多文件工程,包含启动文件、库文件、用户代码等等,

这个工程是不用每次都去建立的,只要根据现成的模板稍加修改即可,但为了能够灵活地使用工程模板,有必要了解一下这个模板是如何建立的。

一、新建工程

1.建立一个文件夹,命名为HelloSTM32,并在文件夹内新建四个文件夹,命名如下:
在这里插入图片描述

CORE 用来存放核心文件和启动文件,OBJ 是用来存放编译过程文件以及 hex 文件,

STM32F10x_FWLib 文件夹顾名思义用来存放 ST 官方提供的库函数源码文件。已有的 USER 目录除了用来放工程文件外,还用来存放主函数文件 main.c,以及其他包括 system_stm32f10x.c 等等

  1. 打开Keil,选择左上方的“Project”,然后“New uVision Project”,在USER文件下建立一个名为“HelloSTM32”的工程文件。
    在这里插入图片描述

  2. 在弹出的窗口中选择STM32F103C8并“OK”。(mini板选择STM32F103RC)
    在这里插入图片描述

  3. 然后会跳出这个界面,ta是一个选择性配置所需文件的界面,直接选择OK
    在这里插入图片描述

    然后工程就新建完成了

二、添加文件

刚刚我们新建的工程只是一个框架,启动文件等必要的东西还没有添加进去,下面我们就来添加相应的文件。

在压缩包里面可以找到一个名为“STM32F10x_StdPeriph_Lib_V3.5.0”的文件,这是ST官方推出的F1系列产品的标准库,里面有我们所需的全部文件,我们将选择其中一部分添加到我们的工程里面。首先我们复制文件到对应的路径下

  1. 打开目录STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver, 将目录下面的 srcinc 文件夹复制到我们刚才建立的 STM32F10x_FWLib 文件夹里面。 src 存放的是固件库的.c 文件,inc 存放的是对应的.h 文件,每个外设对应一个.c 文件和一个.h 头文件。

  2. 打开目录 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 下面,将文件 core_cm3.c 和 文 件 core_cm3.h 复 制 到 CORE文件夹里。

  3. 打开目录

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\s tartup\arm 下面,将里面的 startup_stm32f10x_md.s 文件复制到 CORE 下面。(mini板选择startup_stm32f10x_hd.s

  1. 打开目录:

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 下,然后将里面的三个文件 stm32f10x.hsystem_stm32f10x.csystem_stm32f10x.h复制到我们的 USER 文件夹里。

  1. 打开目录:

STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template ,将下面的 4 个文件 main.cstm32f10x_conf.hstm32f10x_it.cstm32f10x_it.h 复制到 USER 目录下。经过这5个步骤,需要的文件复制完毕。下面我们将 这些文件加入我们的工程中去。

  1. 右键点击 Target1,选择 Manage Project Items。
    在这里插入图片描述

  2. 在Project Targets一栏,我们将Target名字修改为HelloSTM32,然后在Groups一栏删掉一个 Source
    在这里插入图片描述

  3. Group1,建立三个 Groups:USER,CORE,FWLIB。(别急着退出)

  4. 在选中FWLIB这一分组的情况下,点击右侧的“Add Files”,定位到我们刚才建立的目录

    STM32F10x_FWLib/src**下面,将里面所有的文件选中(Ctrl+A),然后点击 Add,然后 Close.可以看到 Files 列表下面包含我们添加的文件。

  5. 用和步骤8相同的方法,添加core_cm3.cstartup_stm32f10x_md.s (注意,默认添加的 时候文件类型为.c,也就是添加 startup_stm32f10x_md.s 启动文件的时候,你需要选择文件类型 为 All files 才能看得到这个文件)到CORE分组下(记得选中该分组)。

  6. 用和步骤8相同的方法,添加 main.cstm32f10x_it.csystem_stm32f10x.c到USER分组下

​ (记得选中该分组)。

到这里,所需文件已全部添加完毕,点击OK回到主界面。

三、稍加修改

接下来我们要编译工程,在编译之前我们首先要选择编译中间文件编译后存放目录。 方法如下图:
在这里插入图片描述

  1. 打开“Options for Target…” 然后选择“Output”选项下面的“Select folder for objects…”,然后选择目录为我们之前新建的 OBJ 目录。这里请大家注意,如果我们不设置 Output 路径,那么默认的编译中间文件存放目录就是 MDK 自动生成的 Objects 目录和 Listings 目录。 (其实设置这个就是为了下载的时候方便找HEX文件)
    在这里插入图片描述
    修改完以后我们可以试着编译一下工程,注意点这个按钮,会看到一堆报错,这是因为MDK找不到头文件。
    在这里插入图片描述


  2. 用和步骤1一样的方法召唤一个菜单,然后点击 C/C++ 选项.然后点击Include Paths 右边的按钮(···)。弹出一个添加 path 的对话框,然后我们将图上面的 3 个目录添 加进去。记住,keil 只会在一级目录查找,所以如果你的目录下面还有子目录,记得 path 一定要定位到 后一级子目录。然后OK(一次)
    在这里插入图片描述
  3. 还是在“C/C++”选项下,添加宏定义STM32F10X_MD,USE_STDPERIPH_DRIVER,(mini板选择STM32F10X_HD,USE_STDPERIPH_DRIVER) 如下图:
    在这里插入图片描述
  4. 在工程中打开main.c(左侧展开名称前的加号,找到文件后双击),用以下的代码替换原来全部内容:
void Delay(u32 count)   {
u32 i=0;       
for(;i<count;i++);  }   //简单、不精确的延时
int main(void)   {  
GPIO_InitTypeDef  GPIO_InitStructure;               //创建一个GPIO结构体    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);   //使能GPIOB对应的时钟    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;     //LED_GREEN-->PB.8 指定一个端口     
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //设置为推挽输出       
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //设置IO 口速度为 50MHz (最大响应频率,与响应速度和噪声有关)      
GPIO_Init(GPIOB, &GPIO_InitStructure);    //根据设定参数初始化 GPIOB.8       GPIO_SetBits(GPIOB,GPIO_Pin_8);      //PB.8 输出高 ,LED阳极接到3.3V,推挽模式下GPIO拉高时输出3.3V,LED不被点亮
while(1)     {         
GPIO_ResetBits(GPIOB,GPIO_Pin_8);              
Delay(3000000);          
GPIO_SetBits(GPIOB,GPIO_Pin_8);          
Delay(3000000);      }   }

5.然后,点之前那个编译按键(Build)或者按快捷键F7进行编译,输出栏显示如下:
在这里插入图片描述

OK,NO ERROR,NO WARNING ,完美。

(下载用的HEX文件在OBJ目录下,下载流程参考开发板使用说明)

写在后面

本帖仅供分享,如有错误,感谢指正!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!