Keil5-建立第一个STM32工程
此致:特别感谢作者Lomo-chen所写的文章给我的帮助,我尝试做了一下,成功了,今天整理一下。
一、建立文件夹:
1、在桌面或其他盘建立一个文件夹,此处名称为Test,用来存放工程程序。

2、在Test文件夹下,建立User、Driver、List、Output三个文件夹。
-- User (存放main函数文件)
-- Driver (存放驱动函数文件)
-- List (存放编译文件)
-- Output (存放输出文件)

二、创建工程
1、打开Keil软件,选择Project ---> New μVision Project...--> 输入文件名 TestDemo --> 点击保存。弹出如下:

2、选择自己需要的芯片型号,此处为STM32F103C8,点击OK,自动弹出如下:

3、在对应选项中选择所需的必选项,即勾选:
-- CMSIS 下 的 CORE 项
-- Device 下的 Startup 项
-- Stdperiph Driver 下的 RCC 和 framework 项
剩下的外设驱动先不添加,在程序编写的时候,按需求添加。(为了方便,大家还是在这个添加最好,省的麻烦)

4、点击界面中魔术棒右边的按钮,即如下按钮:

5、点击之后,弹出的窗口中,可以修该工程名,并且可对程序进行分组分类:
-- Project Targets 工程名,默认为Target 1,此处修改为 FenTest
-- Groups 分组分类,默认为 Source Group 1 ,此处修改为四个文件:User、Core、Driver、Config

6、点击OK,界面显示如下:

-- User 只存放 main.c 文件(说是这么说,其实随便啦~)
-- Core 存放各种中断处理函数
-- Config 用来存放MCU的外设配置初始化函数
-- Driver 用来存放MCU和其他芯片的驱动函数
7、 鼠标点击User,右键选择Add New Item to Group ‘User’:
8、依次添加各个目录下所需的.c文件和.h文件

9、点击魔术棒,点击Output选项,勾选Create HEX File ,
点击Select Folder for Objects 选项,在弹出的界面中设置好相应文件的输出路径 Output:

10、在C/C++ 选项中,如下图填写,并将相应文件包含进来:
注意:Define项不用填写任何东西。include paths 项一定要到STM32F103C8这个子目录,即:
.\Driver;.\User;.\RTE;.\RTE\Device;.\RTE\Device\STM32F103C8

11、上述过程只是创建了一个框架,接下来,我们创建文件:
(1)上面说了在user创建了main.c和main.h文件
(2)在Config文件夹下创建config.c和config.h文件
(3)在main.c文件中,包含 #include “config.h” #include “stm32f103x.h”
(4)打开config.h,添加以下代码:
#ifndef __CONFIG_H
#define __CONFIG_H
#include "stm32f10x.h" //记得添加此头文件,因为config.c用到GPIO相关函数等
void LED_GPIO_Config(void);
void Delay_ms(u16 time);
#endif
(5)打开config.c文件,添加以下代码:
#include "config.h" /*************** 配置GPIO*******************/
void LED_GPIO_Config(void)
{
//配置PC13引脚
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC, GPIO_Pin_13 ); //配置PB14引脚
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB, GPIO_Pin_14 );
} //毫秒级延时函数
void Delay_ms(u16 time)
{
u16 i=;
while(time--)
{
i=;
while(i--);
}
}
(6)在main.c文件中添加如下代码:
#include "config.h"
#include "stm32f10x.h"
int main()
{
//初始化GPIO
LED_GPIO_Config(); while (){ GPIO_ResetBits(GPIOC,GPIO_Pin_13);//开
Delay_ms();
GPIO_SetBits(GPIOC,GPIO_Pin_13);//关
Delay_ms(); GPIO_ResetBits(GPIOB,GPIO_Pin_14);//开
Delay_ms();
GPIO_SetBits(GPIOB,GPIO_Pin_14);// 关
Delay_ms();
}
}
(6)忘了一点,因为前面我们没有在 Stdperiph Driver项中添加 GPIO外设驱动,此处要添加:

(7)保存,点击编译。 这时候:
rte_components.h会自动包含进项目
stm32f10x_config.h也不用手动修改。 (全自动,非常方便!)
12、烧录文件:
(1)此处使用ST-Link V2下载器
(2)点击魔术棒,点击Debug,在use中选择ST-Link Debugger
(3)点击旁边的Setting,ort 选择 sw
(4)点击Flash Download,点击Add,选择STM32F10x Med-density Flash 128K .....
(5)点击下载图标,即可下载

13、观察开发板的gpio口的led状态:
现象:PC13 PB14有规律的依次闪烁。
这样就成功搭建好工程,并且点亮LED灯!
Keil5-建立第一个STM32工程的更多相关文章
- pycharm建立第一个django工程-----windows中
pycharm建立第一个django工程 系统:win764 ip: 192.168.0.100 安装django pip install django 左上角建立一个名为Firstdjango工程 ...
- 建立第一个Django工程---linux中的python
建立第一个Django工程 环境: ip: 192.168.0.92 系统:centos7.5 安装django pip install django 启动一个HelloWorld工程 django- ...
- 建立第一个OpenGL工程(GLUT)
本文参考了<计算机图形学>(Donald Hearn著)的第2.9节. OpenGL基本函数库用来描述图元.属性.几何变换.观察变换和进行许多其他的操作.OpenGL被设计成与硬件无关,因 ...
- Keil建立第一个C51工程的步骤
参见51+arm开发板<使用手册.pdf> 1.“project” >> “new project” >> 新建一个用于保存工程的文件夹例如dem &g ...
- 在linux下搭建STM32工程
转载自康神博客:http://blog.csdn.net/u013298300/article/details/50243935 在LINUX下开始一个STM32工程 在LINUX下开始一个STM32 ...
- 编写一个c++工程
c++接触的很少,之前也只是会编写一个简单的cpp文件,但一个工程的实现,往往不仅包括源文件(.cpp后缀文件)一般还有头文件(.h后缀文件)等.一个c++工程中只能有一个main函数,这个函数所在的 ...
- vivado设计一:建立第一个入门工程(基于zybo)
vivado设计一:建立第一个入门工程(基于zybo) 0赞 发表于 2014/6/17 23:03:25 阅读(8777) 评论(4) 软件:vivado 2013.4 电脑:xp系统 硬件:zyb ...
- 使用keil建立标准STM32工程模版(图文详细版!)
1. 模板工程的创建(超级详细版,使用的是keil 4.5版本) 1.1创建工程目录 良好的工程结构能让文件的管理更科学,让开发更容易更方便,希望大家养成良好的习惯,使用具有合理结构的工程目录,当 ...
- Keil5创建基于RTX的STM32工程(转载+自己的体会)
转载自:https://blog.csdn.net/u011976086/article/details/54342447#commentBox 之前使用过ucos,freertos,但是这个keil ...
随机推荐
- LNMP一键安装包+Thinkphp搭建基于pathinfo模式的路由
LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RadHat/Fedora.Debian/Ubuntu/Raspbian/Deepin VPS或独立主机安装LNMP(Ngin ...
- 18-python基础-字符串(1)
1.字符串的定义 字符串就是一串字符,是编程语言中表示文本的数据类型. 在python中可以使用一对双引号“”或者一对单引号‘’定义一个字符串. 可以使用索引获取一个字符串中指定位置的字符,索引计数从 ...
- 详解 Flexible Box 中的 flex 属性
导读: 弹性盒子是 CSS3 的一种布局模式,一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有适当的行为的布局方式.其中 flex 属性用于指定弹性子元素如何分配空间. flex 属性的值 ...
- 【Movie】绿皮书
今天和室友一起去看了<绿皮书>,一部获得奥斯卡的电影. 起初我是没什么太大期望的,纯粹是因为特价票10块钱,加上身边一个小姐姐的力荐. 看完我觉得,啊不愧是奥斯卡电影啊.推荐. 以下可能会 ...
- 使用Turbine对集群进行监控
为什么要使用Turbine Turbine是聚合服务器发送事件流数据的一个工具,hystrix的监控中,只能监控单个节点,实际生产中都为集群,因此可以通过turbine来监控集群下hystrix的me ...
- java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
有两种实现方法,分别是继承Thread类与实现Runnable接口用synchronized关键字修饰同步方法反对使用stop(),是因为它不安全.它会解除由线程获取的所有锁定,而且如果对象处于一种不 ...
- Angularjs书写规范
文件命名原则: 遵循以描述组件功能,然后是类型(可选)的方式来给所有的组件提供统一的命名 命名:feature.type.js. 测试文件名(feature.type.spec.js) 大多数文件都有 ...
- C#接口的作用实例解析
一.接口的作用: 我们定义一个接口: public interface IBark { void Bark(); } 1. 再定义一个类,继承于IBark,并且必需实现其中的Bark()方法 pub ...
- 【LeetCode 14】最长公共前缀
题目链接 [题解] 二分最长前缀的长度. 然后暴力把第2..n个字符串和第1个字符串的前mid个字符匹配. 还有一种比较厉害的算法. 把这n个字符串加入到字典树当中去. 然后根节点到第一个有分支的节点 ...
- 搭建本地 8.8 W 乌云漏洞库
这个是关于两个图片马的帖子. https://zhuanlan.zhihu.com/p/27486144 这个是开源地址: https://github.com/m0l1ce/wooyunallbug ...