1. 只要按照下面的一步步来,绝对能从0开始建立一个STM32工程。不仅包括工程建立过程,还有Jlink设置方法。本文使用芯片为STM32F103CB。

    1 下载stm32F10x的官方库

http://www.st.com/web/en/catalog/tools/PF257890

  1. 2 新建工程

工程名设为stm32_demo,选择芯片型号为STM32F103B,如图,

因为下载的stm32库中有启动代码,所以这里选择"否",不拷贝启动代码。

在工程文件下,新建Startup 、Headers、User、Libraries、CMSIS、Lists、Output文件夹。

文件夹

用途

Startup

启动文件,Flash在16~32Kb小容量,64~128Kb中容量,256~512Kb大容量

CMSIS

Cortex微控制器软件接口标准文件,该目录下文件适用所有Cortex系列

Libraries

存放stm32的驱动库文件

Headers

自定义的全局头文件

User

用户文件,我们把main.c放在该目录下

Lists

编译过程中产生的文件

Output

编译后输出文件,hex/bin等可执行属性的文件将保存在该目录下

至此,stm32的工程文件结构如下

  1. 3 库文件拷贝

把下载stm32库中文件拷贝到新建工程中

stm32F10x的官方库

工程

Libraries\STM32F10x_StdPeriph_Driver\inc 库头文件

Libraries\STM32F10x_StdPeriph_Driver\src 库源文件

Libraries

Project\STM32F10x_StdPeriph_Template\main.c

Project\STM32F10x_StdPeriph_Template\stm32f10x_it.c 中断函数文件

User

Project\STM32F10x_StdPeriph_Template\stm32f10x_it.h 中断函数头文件

Project\STM32F10x_StdPeriph_Template\stm32f10x_conf.h 配置文件

Headers

Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\* 启动文件

Startup

Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h

Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\ system_stm32f10x.c

Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.h

CMSIS

Libraries\CMSIS\CM3\CoreSupport\core_cm3.c Cortex-M3系统文件

Libraries\CMSIS\CM3\CoreSupport\core_cm3.h

CMSIS

文件拷贝完成后的工程文件目录结构如下:

  1. 4 将文件添加到工程

点击Keil右上角的工程分组按钮,在Group一列添加分组,分组和工程的文件名可以一一对应。

  1. 5 工程配置

点击右上角的工程配置按钮,弹出对话框,有多个选项卡,按照下面截图逐一配置。

  1. 6 编译链接

原来的main.c从库文件中拷贝过来的,把其中的内容都删除,添加最简单的main函数:

  1. #include "stm32f10x.h"
  2. int main(void)
  3. {
  4. while(1) {
  5. }
  6. }

修改配置文件stm32f10x_conf.h,通过注释添加或取消注释删除需要的功能模块,这里根据自己需要配置。

编译

  1. 7 Jlink调试配置

接上Jlink及开发板,

至此,STM32的工程搭建和Jlink调试配置都设置好了。为了方便,在工程成中添加了includes.h、types.h、gpio_bits.h等提供基本功能。

  1. 8 测试程序——LED流水灯程序

在工程文件目录下新建Drivers与Devices文件夹,

Drivers

存放stm32相关的驱动,比如:延时函数等

Devices

存放开发板上涉及的硬件设备相关代码

工程中File->New,新建下面的一些文件。

Drivers/delay.h

延时函数头文件

Drivers/delay.c

延时函数源文件

Devices/led.h

LED流水灯头文件

Devices/led.c

LED流水灯源文件

注:作为一种好的习惯,每个.c文件都应该有一个对应的.h文件。

添加代码:

led.c

  1. /*
  2. * LED example
  3. * Author : xiahouzuoxin
  4. * Date : 2013.08
  5. */
  6. #include "LED.h"
  7. GPIO_InitTypeDef LED_InitStructure;
  8. /********************************************************************
  9. Function Name: Init_LED
  10. Author : 夏侯佐鑫
  11. Date : 2011-09-28
  12. Description :
  13. Inputs : None
  14. Outputs : None
  15. Notes :
  16. Revision :
  17. ********************************************************************/
  18. void InitLED(void)
  19. {
  20. //使能PA端口时钟
  21. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  22. //端口配置推挽输出
  23. LED_InitStructure.GPIO_Pin = LED1 | LED2 | LED3 | LED4;
  24. LED_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  25. LED_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  26. GPIO_Init(GPIOA, &LED_InitStructure);
  27. //初始输出高电平
  28. GPIO_SetBits(GPIOA, LED1 | LED2 | LED3 | LED4);
  29. }
  30. /********************************************************************
  31. Function Name: Flash_LED
  32. Author : xiahouzuoxin
  33. Date : 2011-09-28
  34. Description :
  35. Inputs : None
  36. Outputs : None
  37. Notes :
  38. Revision :
  39. ********************************************************************/
  40. void FlashLED(void)
  41. {
  42. GPIO_SetBits(GPIOA, LED2 | LED3 | LED4);
  43. GPIO_ResetBits(GPIOA, LED1);
  44. delay_ms(500);
  45. GPIO_SetBits(GPIOA, LED1 | LED3 | LED4);
  46. GPIO_ResetBits(GPIOA, LED2);
  47. delay_ms(500);
  48. GPIO_SetBits(GPIOA, LED1 | LED2 | LED4);
  49. GPIO_ResetBits(GPIOA, LED3);
  50. delay_ms(500);
  51. GPIO_SetBits(GPIOA, LED1 | LED2 | LED3);
  52. GPIO_ResetBits(GPIOA, LED4);
  53. delay_ms(500);
  54. }

led.h

  1. /*
  2. * LED example
  3. * Author : xiahouzuoxin
  4. * Date : 2013.08
  5. */
  6. #ifndef __LED_H__
  7. #define __LED_H__
  8. #include "../Headers/includes.h"
  9. #define LED1                      GPIO_Pin_4
  10. #define LED2                      GPIO_Pin_5
  11. #define LED3                      GPIO_Pin_6
  12. #define LED4                      GPIO_Pin_7
  13. extern void InitLED(void);
  14. extern void FlashLED(void);
  15. #endif

delay.h

  1. #ifndef _DELAY_H
  2. #define _DELAY_H
  3. #include "includes.h"
  4. extern void delay_ms(UINT32 ms);
  5. #endif

delay.c

  1. #include "delay.h"
  2. /********************************************************************* DELAY_MS
  3. * Discription : delay for 1 ms if ms=1, not accurate
  4. * Author : xiahouzuoxin
  5. * data : 2012-08-01
  6. * inputs :    ms -- ms number
  7. * outputs :
  8. * Modified :
  9. ********************************************************************/
  10. void delay_ms(UINT32 ms)
  11. {
  12. int i = 0;
  13. int j = 0;
  14. for(i = 0; i < ms; i++)
  15. {
  16. for(j = 0; j < 8040; j++)
  17. {
  18. // Delay n ms
  19. }
  20. }
  21. }

includes.h

  1. #include "../Devices/LED.h"

main.c

  1. #include "includes.h"
  2. int main(void)
  3. {
  4. InitLED();
  5. while(1) {
  6. FlashLED();
  7. }
  8. }

编译下载,运行,OK!

stm32之keil开发环境搭建的更多相关文章

  1. Eclipse + CDT + YAGARTO + J-Link,STM32开源开发环境搭建与调试

    Eclipse+CDT+YAGARTO+J-Li:开源开发环境搭建与调试:作者:Chongqing:邮箱:ycq.no1@163.com:文档版本:V1.0:发布日期:2014-08-04:前言:此文 ...

  2. 【STM32H7教程】第2章 STM32H7的开发环境搭建

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第2章    STM32H7的开发环境搭建 本章主要为大 ...

  3. Nordic nRF51/nRF52开发环境搭建

    本文将详述Nordic nRF51系列(包括nRF51822/nRF51802/nRF51422等)和nRF52系列(包括nRF52832/nRF52810/nRF52840)开发环境搭建. 1. 强 ...

  4. SLAM+语音机器人DIY系列:(五)树莓派3开发环境搭建——1.安装系统ubuntu_mate_16.04

    摘要 通过前面一系列的铺垫,相信大家对整个miiboo机器人的DIY有了一个清晰整体的认识.接下来就正式进入机器人大脑(嵌入式主板:树莓派3)的开发.本章将从树莓派3的开发环境搭建入手,为后续ros开 ...

  5. 痞子衡嵌入式:把玩i.MXRT1062 TencentOS Tiny EVB_AIoT开发板(1) - 开发环境搭建与点灯

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1062 TencentOS Tiny EVB_AIoT开发板环境搭建与点灯. 腾讯 TencentOS 团队于2021年1 ...

  6. python开发环境搭建

    虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...

  7. IntelliJ IDEA安装及jsp开发环境搭建

    一.前言 现在.net国内市场不怎么好,公司整个.net组技术转型,就个人来说还是更喜欢.net,毕竟不是什么公司都像微软一样财大气粗开发出VS这样的宇宙级IDE供开发者使用,双击sln即可打开项目, ...

  8. Qt for Android开发环境搭建及测试过程记录

    最近学习了Qt的QML编程技术,感觉相较于以前的QtGUI来说更方便一些,使用QML可以将界面与业务逻辑解耦,便于开发. QML支持跨平台,包括支持Android平台,因此可以使用Qt的QML进行An ...

  9. node.js之开发环境搭建

    一.安装linux系统 (已安装linux可跳此步骤) 虚拟机推荐选择:VirtualBox 或者 Vmware (专业版永久激活码:5A02H-AU243-TZJ49-GTC7K-3C61N) 我这 ...

随机推荐

  1. UOJ #274. 【清华集训2016】温暖会指引我们前行 [lct]

    #274. [清华集训2016]温暖会指引我们前行 题意比较巧妙 裸lct维护最大生成树 #include <iostream> #include <cstdio> #incl ...

  2. ThinkPHP删除栏目(单)

    当我们做一些网站项目的时候,都会遇到这样一类问题,删除一个栏目,而这个栏目又不是最底层栏目,也就是说,被删除的栏目拥有子栏目,这时,我们执行删除该栏目的命令,就需要将该栏目及其子栏目一并删除,因为我们 ...

  3. Python中Template使用的一个小技巧

    Python中Template是string中的一个类,可以将字符串的格式固定下来,重复利用. from string import Template s = Template("there ...

  4. 小甲鱼OD学习第13-14讲

    这次我们的任务是破解这个需要注册码的软件,如下图所示 我们搜索上图相应的提示字符串,看看能找到什么线索,我们搜索  invalid  code  试试看,如下图 然后下断点,如下图所示 我们来到断点处 ...

  5. 测试人员如何使用Git部署测试环境

    Git是分布式的版本控制系统. 作为一名Git的小白使用者,一开始接触很懵逼,因为总担心自己一不小心误操作影响代码仓库的代码,网络上关于Git的使用多从开发的角度,很少有人从测试的角度来介绍Git的使 ...

  6. [Python Study Notes] python面试题总结

    python语法以及其他基础部分 可变与不可变类型: 浅拷贝与深拷贝的实现方式.区别:deepcopy如果你来设计,如何实现: __new__() 与 __init__()的区别: 你知道几种设计模式 ...

  7. SmokePing 部署实践

    1 通过 yum 安装依赖的库以及环境 yum install rrdtool wqy* fping curl bind-utils httpd httpd-devel \ perl perl-FCG ...

  8. composer引用本地git做为源库

    PHP使用者大多对composer是又爱又恨,爱的是composer require后,很多类库不用去下载了,恨的是网速卡成翔,虽然国内有很多道友做了镜象,但对于bower库这些都还是整体更新. 那么 ...

  9. 洛谷P2891 Dining P1402 酒店之王【类二分图匹配】题解+代码

    洛谷P2891 Dining P1402 酒店之王[类二分图匹配]题解+代码 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的 ...

  10. 隱藏在素數規律中的Pi -- BZOJ1041解題報告

    退役狗在刷程書的過程中看到了一個有趣的視頻, 講解了一個有趣的問題. 在網上隨便搜索了一下居然還真的找到了一道以它爲背景的OI題目, BZOJ1041. 下面的內容會首先回顧一下視頻所討論的知識, 有 ...