资讯详情

在 keil 建立基于STM32开发的工程模板--详细步骤

手把手教你keil建立STM32的工程模板

  • 1 先说几句
    • 1.1 什么是STM32?
    • 1.2 什么是cortex?
    • 1.3 什么是ARM?
    • 1.4 意法半导体是什么?
  • 2 硬件平台
    • 2.1 STM32103C8T6最小系统板
    • 2.2 电源供电
    • 2.3 时钟电路
    • 2.4 复位电路
    • 2.5 调试和下载电路
  • 3 建立工程模板
    • 3.0 什么是开发模式?
    • 3.1 下载固件库
    • 3.2 复制固件库文件
    • 3.2 step-by-step
      • (1)新建KEIL工程
      • (2)为工程添加分组(Group)
      • (3)每组添加相关文件
            • 1)User组-自己写的程序
            • 2)Driver组-外设驱动程序
            • 3)CM3组-管理内核驱动程序
            • 4)Startup组--启动程序
            • 5)Doc组
      • (4)对KEIL必要设置开发环境
      • (5)简单配置工程模板中的相关文件

1 先说几句

1.1 什么是STM32?

??是**意法半导体(STMicroelectronics)**早期推向市场的基础Cortex-M该系列产品具有成本低、功耗优良、性能高、功能多等优点,并以系列方式推出,方便用户选择,在市场上得到广泛好评。

??STM32目前常用STM32F103~107系列,简称1系列。 又推出了高端系列STM32F4xx以4系列为基础的系列。Cortex-M3基于内核架构的后者Cortex-M4内核架构。 芯片实拍图:STM32103实拍图

1.2 什么是cortex?

??Cortex 是 ARM 新一代处理器内核本质上是 ARM V7 与架构的实现完全不同ARM其开发的其他核心。按照3类 典型的嵌入式系统应用,即高性能、微控制器和实时类,分为 3 个 系 列 , 即 Cortex-A 、 Cortex-M 、 Cortex-R 。 而 STM32 就 属 于Cortex-M系列。

1.3 什么是ARM?

??苹果于1990年来到英国,与另外两家科技公司成立了一家名为Advanced RISC Machines简称公司ARM。

??点击此处查看详情:ARM公司简介-百科介绍

??ARM 公司本身并不生产和销售芯片,而是销售芯片 ARM 内核知识产 权为主要模式。全球顶尖的半导体公司,例如 Actel、TI、ST、 Fujitsu、NXP 等均通过购买 ARM 核心结合各自的技术优势 生产和销售

??ARM 典型的精简指令系统设计(RISC)风格。ARM 的体系 已经经历了架构 6个版本,版本号分别是 V1~V6.每个版本都有自己的特点 颜色和定位也不同,不能简单地相互替代。

??后来,设计了新的结构:Cortex,也就是ARM V7

1.4 意法半导体是什么?

??意法半导体(英语:STMicroelectronics)总部位于瑞士日内瓦的国际半导体制造商。 点击此处查看详细信息法半导体-百科介绍

2 硬件平台

2.1 STM32103C8T6最小系统板

?? 这个小板是最小的系统, ??微控制器的最小系统是指微控制器正常工作所需的最小部件,通常由微控制器芯片、电源电路、时钟电路、复位电路、调试和下载电路组成。

?? STM32103C8T6芯片 ?? 其他元器件:电源电路、时钟电路、复位电路、调试和 ???下载电路

芯片名:STM32103C8T6的含义 这里就不多说具体细节了。感兴趣的同学可以参考野火开发手册

其他元器件 ??要说清楚这一部分,我们需要从系统的角度分析最小系统板的组成原理。 ??从常识上讲,要知道一件事,必须先外后内。先看颜值,再看修养。 芯片采用贴片式包装,四边各有12个引脚,共48个引脚。 如何定义引脚? 以后再看每个引脚的具体功能,这里提供功能定义表:STM32F103C8T6引脚定义表可自行下载,作为参考。

2.2 电源供电

??任何电子产品都是正确的 经常工作,电源是必不可少的。因此,首先要给芯片供电。

??STM32的工作电压 V D D V_{DD} VDD 为 。通过提供所需的 1.8 V 1.8V 1.8V电源。

  一般芯片不止一个供电引脚,STM32F103C8T6,这款芯片,有三个接地引脚 V S S V_{SS} VSS​,和三个电源引脚 V D D V_{DD} VDD​, V D D V_{DD} VDD​一般就供电 3.3 V 3.3V 3.3V,至于为什么在 ** 2.0 ~ 3.6 V 2.0~3.6V 2.0~3.6V**中选择 3.3 V 3.3V 3.3V,以后再说。 可见,在电源端并联了两个电容, C 10 C_{10} C10​和 C 11 C_{11} C11​,这个电容的作用是“去耦”,原理分析见空间里的另一篇文章。

2.3 时钟电路

  我们知道,对千时序电路来说,除了电源外 ,还需要有才能正常工作。作为数字系统,微控制器 是一种复杂的时序逻辑电路,需要专门的时钟源为其提供脉冲信号。   STM32Fl03微控制器也不例外。 对于STM32Fl03 来说,尽管它内置了内部RC 振 荡 器 , 可 以为内部相环(Phase Locked Loop, PLL)提供时钟, 这样STM32Fl03依靠内部振荡器就可以在 72MHz的满速状态下运行。   但是, ,因此在条件允许的情况下,尽最使用外部主时钟源。   外部主时钟源主要作为Cortex-M3内核和 STM32外设的驱动时钟,一般称为高速外部时钟信号(HSE)。    这里就是一个晶体串联两个电容,有时,还会并联一个电阻,如下: 至于原理分析,我们暂且搁置,将会单独写一篇文章进行说明。

2.4 复位电路

  就像一台完整的 PC 必须具备 Reset 系统一样,一个强壮的微控制器最小系统也需要具备复位电路。 当微控制器上电时,电压不是直接跳变到微控制器可工作的范围(如3. 3V) 而是一个逐步上升的过程。   此时,微控制器无法正常工作,会引起芯片内程序的无序执行。 同样的情况也会发生在微控制器的供电电压波动不稳定时。   因此,需要复位电路给它延时,使微控制器保待复位,暂不进入工作状态,防止 CPU 执行错误指令,确保CPU 及各部件处千确定的初始状态,直至电压稳定。

  微控制器复位电路的设计直接影响到整个系统工作的稳定性和可靠性。 许多用户在设计完基于微控制器的嵌入式系统并在实验室调试成功后,在现场却出现“ 死机”“程序跑飞”等现象,这主要是未添加复位电路或复位电路设计不可靠引起的。

  最简单的复位电路是手动复位电路。 按下外部复位键并延时很短 一段时间后释放,即可完成微控制器的一 次外部手动复位。

STM32Fl03C8T6的复位引脚是,第七个,,当给它接通低电平时,芯片就知道,你想让它复位。 假设我们采用手动复位,即弄一个按键,按下时,接通的是低电平,可以实现这个功能的是下面这个简单电路: 让我们眯上眼,感受一下,它是怎么工作的:当按下按键时, R E S E T RESET RESET接通地端,变为低电平,松开后,电容瞬间充满电,达到了断路的效果,瞬间, R E S E T RESET RESET的电平变成了。这就完成了复位功能。

2.5 调试和下载电路

  为了让微控制器按照程序员的设想真正跑起来,要事先将实现指定功能的程序烧写到微控制器片内ROM或RAM中进行反复调试。   这就需要调试和下载电路。   微控制器通过 相连,并借助仿真器与主机上嵌入式开发工具中的调试器通信,根据调试器的指令控制 程序的运行,同时向主机的调试器提供程序以及微控制器的相关信息(如程序中的变量、微控制器的寄存器和存储器信息等)供程序员 调试时使用,从而实现程序 从宿主机到微控制器 ROM或RAM的下载和调试。

3 建立工程模板

3.0 开发模式有哪些?

  基于操作系统的开发模式,对于初学者不是很合适,因为它对操 作系统、多任务等理论把握的要求较高。建议学习者在对嵌入式系统的开发达到一定的阶段后,再开始尝试这种开发模式。   从学习的角度,可以从基于寄存器的开发模式入手,这样可以更 加清晰地了解和掌握STM32的架构、原理。从高效开发的角度,从学习容易上手的角度,建议使用基于固件 库函数的开发模式,毕竟这种模式把底层比较复杂的一些原理和概念 封装起来了,更容易理解。这种模式开发的程序更容易维护、移植,开发周期更短,程序出错的概率更小。   当然,也可以采用基于寄存器和基于固件库混合的方式。   

3.1 去下载固件库

  STM32 的固件库是一个或一个以上的完整的(称为固件 包),包括,其本质是一个固件函数 包(库),它由组成,包括了微控制器所有 外设的性能特征。   该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间 API(Application Programming Interface,应用编程接口)。   通过使用固件函数库,无须深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。   每个外设驱动都由一组函数组成,这组函数覆盖了该外设的所有功能。每个器件的开发都由一个通用API驱动,API对该驱动程序的结构、函数和参数名称都进行了标准化。   ST 公司 2007 年 10 月发布了 V1.0 版本的固件库,2008 年 6 月发布了 V2.0 版的固件库。V3.0 以后的版本相对之前的版本改动较大,本教材使用目前最为通用的 V3.5 版本,该版本固件库支持所有的STM32F10X系列。   同学们可以去ST的官网下载,查找教程很多,这里不再多说。这里可以直接下载:STM32F10x固件库   文件解压后,有四个文件夹和一个后缀为chm的文件。 stm32f10x_stdperiph_lib_um.chm 为已经编译的帮助系统,也就是该固件库的使用手册和应用举例。            

  

  既然 ST 官方给我们提供了使用范例,因此其代码的规范性和正 确性是毋庸置疑的,学习者可以将范例作为快捷地掌握固件库使用方法的重要资料。学习者通过 ST 公司官方提供的范例学习STM32的原理、应用,是一种非常值得推荐的学习方法。

  打开Libraries后,呈现这样的画面:   文件夹 CMSIS 包含的是 Cortex-M3 内核自带的外设驱动代码和 启动代码(通常是汇编语言编写的)。双击打开 CMSIS 后,是这样的:   核心是CM3文件夹,其余可忽略。双击打开CM3后,是这样的:   再双击打开CoreSupport 后,是下面这样的,这是 Cortex-M3 内核自带的外设的驱动程序,十分重要。   双击打开DeviceSupport 后,是这样的:   再打开ST,   打开STM32F10x,      启动文件夹startup 下又分别包含 arm 等四个对应不同开发环境的启动代码文件夹,如图 2.8所示,其中。   这些文件夹下的代码文件均由汇编语言开发,以 arm 文件夹下的 文件为例,其下包含如下图所示的文件,它们实际上是对应不同容量芯片的启动代码。    初始化堆栈指针SP; 初始化程序计数器指针PC; 设置异常向量表的入口地址; 配置外部SRAM作为数据存储器(但一般的开发板没有外部 SRAM); 设置C程序的分支入口_main(最终用来调用main函数)。   这些文件分别对应于不同存储器容量(Flash容量)和功能的不同 版本的STM32系列芯片,主要是 容量Flash等不同性能的STM32单片机。

  再回到,打开libraries时的画面:   文件夹 STM32F10x_StdPeriph_Driver 包含的是芯片制造商在Cortex-M3 内核上外加的外设的驱动程序,包含 inc(include 的缩 写)与 src(source 的简写)这两个文件夹,如下所示。   文件夹inc的内容如下,它包含的是每个驱动文件对应的头文件。当应用程序需要用到某个外设的驱动程序的时候,将它的头文件包含至应用程序即可。   文件夹src的内容如下所示,它包含的是每个驱动文件对应的C源代码文件。 再回到固件库文件夹的初始画面:   

3.2 复制固件库文件

  我们新建一个文件夹,名字随便起,我这里是“7 工程模板示例”,在此文件夹下新建三个空文件夹和一个txt文件。    这是 STM32单片机及其外设的驱动程序(包括启动代码),不能缺少。

   例如,最后编译和链接 生成的机器码文件(HEX 文件),也包括其他文件的中间文件。该文 件夹内容可手工定期清理。模板建立后,该文件下无任何文件。只有 编译和链接后,才会出现很多文件。

  ,例如,工程文件,main.c,stm32f10x_conf.h (外设头文件配置 文件),stm32f10x_it.c (中断函数文件),stm32f10x_it.h(中断 函数头文件)。当然,如果程序不涉及中断,不需要上述这两个中断 函数相关的文件。但是,作为通用模板,建议保留这两个文件。上述 文件中,除工程文件外,   (4)readme.txt 用于说明本程序的使用要求、注意事项、使用方法等。

3.2 step-by-step

(1)新建KEIL工程

(2)为工程添加分组(Group)

  本例添加了 5 个分组,分别 为:    User—用于管理自行开发的程序代码;    Driver—用于管理STM32外设的相关驱动程序代码;    CM3—用于管理CMSIS内核的驱动程序代码;    Startup—用于管理MDK开发环境下与具体芯片相对应          的启动代码;    Doc—用于管理程序的说明文档,例如readme.txt等。

(3)为各组添加相关文件

1)User组–自己写的程序

  添加 Project 文件夹下的 main.c、stm32f10x_it.c,如要调整 系 统 时 钟 设 置 , 还 必 须 添 加Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f1 0x.c。

2)Driver组–外设驱动程序

  添加Libraries\STM32F10x_StdPeriph_Driver\src文件夹下的所 有C代码文件。具体文件如图2.22所示。

3)CM3组–管理内核的驱动程序

  添加Libraries\CMSIS\CM3\CoreSupport\core_cm3.c,如图2.23 所示。

4)Startup组–启动程序

管理MDK开发环境下与具体芯片相对应的启动代码。

  添 加 Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 文 件夹下的所有ASM代码文件。   可以看到,该组包含了STM32F10x系列的所有8个启动 代码。

  但是,对某一个具体的项目而言,因为选用的 STM32 单片机是 固定的,所以只能使用其中一个启动代码,其余的都必须删除。只是 作为工程模板,为适应不同的型号,所以启动代码都添加进该组。

5)Doc组

  添加模板下的 readme.txt 等文本文件。该文件可对工程的具体环境和注意事项、使用操作等有关情况进行说明, 是一个文本文件。当然,学习者可以忽略该文件,但从开发的角度, 撰写该文档是一个很好的习惯,往往可以达到事半功倍的效果,它可以为后续的软件维护节省很多时间和精力。

(4)对KEIL开发环境进行必要的设置

   Target页面下的外部时钟:这里为8.0MHz,可根据实际晶振加以调整。 Output页面下的设置主要有两个:。必须勾选:Create HEX File, 然后设置Select Folder for Objects,选择Output文件夹为目标文件夹。

下主要设置的选项有两个: Define:为编译过程中的,   举例如下:   USE_STDPERIPH_DRIVER,STM32F10X_HD。   第一个宏定义符号表示 要使用固件库,在固件库开发模式下,该符号必须设置;后一个符号 表示选用的是高容量 STM32 芯片。如果是其他容量芯片,请自行调整,如中等容量的为STM32F10X_MD。   一般说STM32单片机的命名都是STM32F103XYZW这样的方式,其中X表示引脚数,Y表示ROM容量,Z表示封装方式,W表示工作温度范围,比如RBT6表示为64引脚、128KB和LQFP封装,工业温度范围。   针对ROM容量的字符,表示的容量是:

字符 ROM容量
6 32KB
8 64KB
B 128KB
C 256KB
D 384KB
E 512KB
F 768KB
G 1024KB

  其中:我们用LD表示16-32K, MD表示64K-128K,HD表示256~512K。我用的芯片是STM32F103C8T6,宏定义符号就是。   这里再多说一句,这两个宏定义符号都在头文件stm32f10x.h中。   我们的程序,是写在main.c中,在该文件中,我们要在首行写上,#include "stm32f10x.h",其中#include是一个命令,名为文件包含命令,stm32f10x.h是一个头文件的名字,这句话的意思就是将头文件stm32f10x.h的内容插入到该命令所在的位置,从而把头文件stm32f10x.h和当前源文件main.c连接成一个源文件,这与复制粘贴的效果相同。   头文件stm32f10x.h的作用解读,大家可以看这篇文章,点击这里

Include Paths: (Include Paths),单击该选项右侧的按钮,即可设置要包含的路 径。注意:必须把工程模板涉及的所有文件所在的文件夹作为路径设 置进来。 Debug 页面下主要设置所使用的仿真器的相关选项。 可以看到,仿真器有很多种。 STM32常用程序烧录方法 我这里用的是STLink,所以选择ST-Link Debugger,

勾选这一项之后,我们下载程序后会立马复位并执行程序。

(5)简单配置工程模板中的相关文件

  删除main.c中的内容,只保留下图所示的部分。

  其中,RCC_Configuration()函数为系统时钟配置函数,直接调 用固件库函数SystemInit(),使用默认值。如需更改,则可以调整 system_stm32f10x.c中的相关语句。

该文件是外设的头文件配置。默认是使用所有外设的头文件。在 实际应用中,根据程序的需要,使用相关的头文件。例如,要使用GPIO,则必须包含头文件stm32f10x_gpio.h。从该文件可以看出,头 文件命名非常有规律,所以非常容易使用。

好啦,配置完成啦。

标签: 25v1f电容ld电容封装

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台