搜档网
当前位置:搜档网 › STM32工程文件建立的方法

STM32工程文件建立的方法

STM32工程文件建立的方法
STM32工程文件建立的方法

STM32根据库建立自己的工程

■利用STM32的官方库在Keil uVision 4中新建一个工程的步骤:

一. 新建工程时的软件操作,工程配置方法:

1. 点击菜单栏的Project → New uVision Project,新建一个工程文件,取名,设置好保存路径后,点击“保存”即可。

2. 接着弹出一个对话框,选择芯片型号,我们用的是ST公司的STM 32F103VE,选择该芯片,点击“OK”即可。

3. 接着弹出的对话框,如下,问我们是否要拷贝STM 32的启动代码到工程文件中,这份启动代码在M 3系列中都是适用的,我们可以点击“是”。但是,这里用ST的固件库创建工程,库里面也有启动代码文件,为了保持库的完整性,我们就不需要开发环境自带的启动代码了,稍后,我们手动添加,所以这里,我们点击“否”。

4. 此时,已经新建了一个工程,但是,里面还没有我们所需的文件,接下来,就该添加所需文件了。在工程的根目录( 即,保存工程的文件夹下) 新建以下3个文件夹,User,FWlib,CMSIS。User用来存放工程文件和用户代码,包括主函数main.c。FWlib用来存放固件库里面的inc和src这两个文件夹以及它们里面的所有文件,这里面包含了芯片上的所有外设的驱动。CMSIS用来存放固件库的启动文件,和,M 3系列通用的文件。CMSIS里面的文件适合所有M 3内核的单片机。CMSIS的缩写为,Cortex Microcontroller Software Interface Standard,是ARM Cortex 微控制器软件接口标准,是ARM公司为芯片厂商提供的一套通用的且独立于芯片厂商的处理器软件接口。

5. 把固件库的Libraries \ STM32F10x_StdPeriph_Driver目录下的inc和src这两个文件夹复制到刚才新建的FWlib文件夹中。

6. 把固件库的Project \ STM32F10x_StdPeriph_Template目录下的main.c,stm32f10x_conf.h,stm32f10x_it.h,stm32f10x_it.c复制到User文件夹下。main.c也可以不复制,稍后,自己新建一个main.c文件在User文件夹下,也可以。stm32f10x_it.h,stm32f10x_it.c这两个文件里面是中断函数,里面为空,用户需要时,可以自己添加中断服务程序。stm32f10x_conf.h 是需要用户配置的头文件,当我们需要用到芯片中某部分外设的驱动时,只需要在该文件中把相应注释标记去掉,即可,这样就可以把相应头文件包含进来了。片上外设的驱动在Libraries \ STM32F10x_StdPeriph_Driver目录下的src文件夹中,它们的头文件在inc文件夹中。

7. 将固件库的Libraries \ CMSIS \ Core \ CM3文件夹下的全部文件和文件夹复制到刚才新建的CMSIS文件夹中,Startup / arm目录下一般有三个启动文件,分别为,startup_stm32f10x_ld.s,startup_stm32f10x_md.s,startup_stm32f10x_hd.s,按顺序是小,中,大容量Flash单片机的启动文件。我们这里用的是STM32F103VE有512 K Flash,属于大容量的。所以,稍后,把startup_stm32f10x_hd.s添加到我们的工程中。不同大小的Flash对应的启动文件不同,这点要注意。

8. 最后,可以把我们的工程文件,和,其它一些编译产生的文件都放在User文件夹下,这样,看起来比较整洁。

9. 回到Keil软件的工程中,鼠标右击“Target”,在弹出的菜单中选择“Add Group”选项,新建4个分组。分别命名为,STARTCODE,USER,FWlib,CMSIS。STARTCODE管理启动代码,USER

管理用户自定义的应用程序,FWlib管理库文件,CMSIS管理M 3系列单片机通用的文件。

10. 下面,往这些新建的组里面添加文件。双击哪个组,就可以往哪个组里面添加文件。( 往组里面添加文件,和刚才在工程保存目录下面建立的文件夹没有任何关系,它们是独立的,互不影响。设置组,只是为了方便工程管理。)在STARTCODE里面添加Startup / arm目录下的startup_stm32f10x_hd.s文件,

在USER组里添加main.c,stm32f10x_it.c这两个文件。在FWlib组里面添加src里面的全部驱动文件。当然,src里面的驱动文件,也可以需要哪个就添加哪个,这里全部添加,是为了后续开发的方便。并且,我们可以通过配置stm32f10x_conf.h文件来选择性添加,只有在stm32f10x_conf.h中被配置的文件才会被编译。

在CMSIS里面添加cor_cm3.c和system_stm32f10x.c文件(cor_cm3.c在CMSIS\CoreSupport 里)(system_stm32f10x.c在CMSIS\DeviceSupport\ST\STM32F10x里)

X

●注意,在组里面添加的,都是汇编文件和C文件( 即,以.s和.c为后缀的文件),即,都是源程序文件( 可能还有其它类型的文件,但是,都必须是源程序文件),并且,一般地,所有源程序文件都必须添加到组里面才行。但是,头文件是不需要添加到组里面的。●注意:往组里面添加源程序文件很重要。如果,少添加一个源程序文件,编译器就找不到该源程序文件了,很有可能编译会出错。

11. 接下来,需要对工程进行一些设置。点击工具栏中的魔术棒按钮,在弹出的“Options for Target”窗口中,选择“Target”选项卡,在“Xtal ( MHz )”处,可以设置外部时钟频率,即,外部晶振频率。这个频率是仿真时使用的频率,如果要使用Keil uVision 4软件仿真,就应该把它设置成,和实际硬件的外接晶振频率一样。如果,不需要仿真,或者,仿真时,外部时钟频率因素不重要,也可以不修改,使用默认值8 MHz。如下图。

12. 点击“Output”选项卡,点击“Select Folder for Objects”按钮,可以为编译时产生的输出文件,设置一个文件夹,把这些输出文件都输出到该文件夹下。还可以把“Creat HEX File”选项

框勾上,这样,就可以在编译时,输出16进制的可执行文件了。

13. 点击“Listing”选项卡,点击“Select Folder for Listings”按钮,可以为编译时产生的链接文件,设置一个文件夹,把这些链接文件都输出到该文件夹下。

14. 点击“C / C++”选项卡,这里有两个设置很重要(“Define”和“Include Paths”,如下图),设置不对,编译会出很多错误。另外,下图中的“One ELF Section per function”一般要选上。(1). Define是设置,预定义符号,在这里定义符号,相当于在程序文件中使用#define 语句定义符号。这里一般要填入以下内容:USE_STDPERIPH_DRIVER, STM32F10X_HD, USE_STM3210E_EVAL其中,定义了USE_STDPERIPH_DRIVER就可以使用,标准外设驱动。定义了STM32F10X_HD,就可以对固件库进行条件编译。定义了USE_STM3210E_EVAL,就可以使用ST公司的官方评估板作为硬件来下载,调试程序,这个宏,一般可以不定义,因为我们很少使用ST公司的官方评估板。Define中要填的内容,也可以从例子工程,或者,工程模板里面复制,粘贴到这里。

●注意:Define栏里面,填的内容对STM32F10x系列的芯片是通用的,引脚数目不同也可以通用。

●注意:定义STM32F10X_HD,是因为我们用的芯片是大容量的。添加了STM32F10X_HD这个宏以后,库文件里面为大容量芯片定义的寄存器,我们都可以使用了。芯片是小容量,或者,中容量时,宏要换成,STM32F10X_LD或者STM32F10X_MD。其实,不管什么容量,我们只要添加STM32F10X_HD这个宏即可。当我们用小,或者,中容量的芯片时,那些为大容量定义的寄存器,不去访问就是了,反正,也访问不了。

(2). Include Paths是设置,头文件的搜索路径的。我们的工程中,用到的头文件在哪个路径,就把该路径添加进来,即可。有时,也可以根据编译错误,发现哪些头文件,编译器找不到,再把这些头文件的路径添加进来。一般要填入的路径有以下一些,每个不同的路径以分号间隔:..\; ..\..\..\Libraries\CMSIS\CM3\CoreSupport; ..\..\..\Libraries\CMSIS\CM3\DeviceSupport\S T\STM32F10x; ..\..\..\Libraries\STM32F10x_StdPeriph_Driver\inc; “ ..\ ”表示工程根目录。

●在添加目录时要注意,在下图界面下,必须把蓝色条移到最后的空白处,再点击“OK”,最后一个路径才能被添加成功,否则,最后一个路径会丢失。

●注意:因为编译器不会自动搜索指定目录的子文件夹,所以每个路径都要添加,就算,路径1是路径2的子目录,路径1和路径2都必须同时添加,才行。

15. 点击“Debug”选项卡,选中左边的Use Simulator,就是使用软件仿真模式调试,选中右边的Use,就是使用硬件仿真,调试。由于我们多使用开发板加J-Link调试,所以选中“Cortex–M / R J-LINK / J-Trace”项,其它选项,默认即可。如下图。

在上图的界面中,点击“Settings”按钮,进行J-Link的一些接口进行设置。“Max Clock”项一般设置成2MHz,如果设置太高,可能J-Link会不支持,这样就会出错。有时,如果硬件调试出错了,把这里设置低一些,可能就会消除错误。其它设置,默认即可。如下图。

16. 点击“Utilities”,选中“Use Target Driver for Flash Programming”,在它下面选择“Cortex–M / R J-LINK / J-Trace”项。其它设置,默认即可。如下图。

在上图的界面中,点击“Settings”按钮,弹出下面的对话框,添加Flash。如果,已经有Flash 了,就不用添加了,如果没有的话,就一定要添加Flash,否则,无法下载程序到开发板。在上图的界面中点击“Add”按钮,弹出选择框,如下图所示。由于我们用的是大容量的芯片,所以,选择“STM 32 F 10x High-density Flash On-chip Flash 512k”项,然后,点击“Add”按钮,又退回到上面的界面,再点击“OK”即可。

二. 工程新建,配置完成后,自己从零开始写程序的一些编程,配置文件的知识点:

1. 唯一需要包含在用户自己的应用程序中的文件是stm32f10x_lib.h ( 比较新的固件库已经把此文件改名为stm32f10x.h )。

2. 需要用户修改的文件有以下3个:stm32f10x_conf.h ,main.c ,stm32f10x_it.c ,其中,stm32f10x_conf.h和main.c 一般必须修改,而,stm32f10x_it.c有时,可能不需要修改。

3. 一般地,若要进入DEBUG ( 调试) 模式,必须在stm32f10x_conf.h 中定义标签DEBUG。可以用这个语句定义:#define DEBUG 1 但是,现在,有的固件库,不定义标签DEBUG,也可以进入DEBUG ( 调试) 模式了。进入DEBUG模式会增大代码的尺寸,降低代码的运行效率。因此,我们强烈建议仅仅在除错的时候使用相应的DEBUG代码,在最终的应用程序中,不定义DEBUG标签,以便删除DEBUG代码。

4. stm32f10x_conf.h 文件的修改方法:

该文件中,所有的#define _PPP ,和,#define _PPPx 这类对外设的宏定义前面都有“//”,都是被注释掉的。所以,对于我们要用到的外设,其宏定义前面的“//”必须去掉。

5. 为了访问GPIO寄存器,类似于_GPIO, _AFIO, _GPIOA, _GPIOB, _GPIOC, _GPIOD和_GPIOE 的标签必须在文件“stm32f10x_conf.h”中定义。有时,对于有的固件库,不定义也可以。

6. 几个头文件,例如以map.h,lib.h,type.h 结尾的三个头文件,必须包含在用户工程的搜索目录(一般在,用户工作目录的project目录下面)下面。

7. 所有用到的外设库函数的.c,.h (即,stm32f10x_ppp.c,stm32f10x_ppp.h)文件必须包含到用户工程目录(一般是,用户工作目录的project目录)下面

STM32建工程详细方法步骤

1、首先找到ST官方最新版本的固件库:STM32F10x_StdPeriph_Lib_V3.5.0 STM32F10x_StdPenph_Ub_V3.5. 0 文件实 2、新建一个工程文件夹:比如led工程文件夹 3、在led工程文件夹中新建 5个文件夹:COREHARDWARESTM32F10x_FWL、 SYSTEM USER COR用来存放启动文件等 HARDWARE来存放各种硬件驱动代码 STM32F10x FWLi文件夹顾名思义用来存放ST官方提供的库函数源码文件 SYSTEM文件夹下包含了delay、sys、usart等三个文件夹。分别包含了delay.c、sys.c、usart.c 及其头文件 delay.h、sys.h、usart.h

USER用来存放我们主函数文件 main.c ,以及其他包括system_stm32f10x.c 等 4、将固件库包里面相关的启动文件复制到我们的工程目录COR之下 打开固件库STM32F10x_StdPeriph_Lib_V3.5.0文件夹,定位到目录 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 下面,将文件core_cm3.c和文件core_cm3.h复制到COR下面去。然后定位到目录 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\S TM32F10x\startup\arm 下面,将里面 startup_stm32f10x_md.s、 startup_stm32f10x_ld.s 、startup_stm32f10x_hd 复制到 COREF面。这里我们解释一下,其实我们只用到 arm目录下面的startup_stm32f10x_md.s 文件,这个文件是针对中等容量芯片的启动文件。其他两个主要的为 startup_stm32f10x_ld.s 为小容量,startup_stm32f10x_hd.s 为大容量芯片的 启动文件。这里copy进来是方便其他开发者使用小容量或者大容量芯片的用户。现在看看我们的CORE文件夹下面的文件:

STM32启动文件详解

STM32启动文件详解 (2012-07-28 11:22:34) 转载▼ 分类:STM32 标签: stm32 启动 在<>,用的是STM32F103RBT6,所有的例程都采用了一个叫STM32F10x.s的启动文件,里面定义了STM32的堆栈大小以及各种中断的名字及入口函数名称,还有启动相关的汇编代码。STM32F10x.s是MDK提供的启动代码,从其里面的内容看来,它只定义了3个串口,4个定时器。实际上STM32的系列产品有5个串口的型号,也只有有2个串口的型号,定时器也是,做多的有8个定时器。比如,如果你用的 STM32F103ZET6,而启动文件用的是STM32F10x.s的话,你可以正常使用串口1~3的中断,而串口4和5的中断,则无**常使用。又比如,你TIM1~4的中断可以正常使用,而5~8的,则无法使用。 而在固件库里出现3个文件 startup_stm32f10x_ld.s startup_stm32f10x_md.s startup_stm32f10x_hd.s 其中,ld.s适用于小容量产品;md.s适用于中等容量产品;hd适用于大容量产品; 这里的容量是指FLASH的大小.判断方法如下: 小容量:FLASH≤32K 中容量:64K≤FLASH≤128K 大容量:256K≤FLASH ;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** ;* File Name : startup_stm32f10x_hd.s ;* Author : MCD Application Team ;* Version : V3.5.0 ;* Date : 11-March-2011 ;* Description : STM32F10x High Density Devices vector table for MDK-ARM ;* toolchain. ;* This module performs: ;* - Set the initial SP ;* - Set the initial PC == Reset_Handler ;* - Set the vector table entries with the exceptions ISR address ;* - Configure the clock system and also configure the external ;* SRAM mounted on STM3210E-EVAL board to be used as data ;* memory (optional, to be enabled by user) ;* - Branches to __main in the C library (which eventually ;* calls main()). ;* After Reset the CortexM3 processor is in Thread mode,

一步步建立 STM32 UCOS 模板

uCOS学习随笔 StepbyStep‐1 ——构建模板(基于STM32控制的第四代圆梦小车) 一、序 基于第四代圆梦小车 —— FIRA 设计了一个使用STM32的控制板(详细介绍见项目中的说明: Introduction B ‐ Hardware of the Smart Car.pdf )。 既然硬件从51升级到ARM,软件也应该相应升级,似乎不能再编写那种简单的轮询调度程序,也应该相应升级到基于操作系统编程。 按STM32的规模和性能,以及小车的控制需求,实时多任务操作系统 uCOSII 应该是不二的选择,不论从其性能和功能考虑,还是从学习角度考虑,uCOSII 都很适合。 首先,它是开源的,有丰富的资源。 其次,它是可靠的,符合正式的工业控制、产品设计需求。 小车所面对的是那些学习相关专业的大学生,作为他们学习的辅助工具,趣味性只是为了降低学习的枯燥性,不是目的。他们借助这个平台是为了积攒应付未来工作的能力,所以,学习内容的实用性是必须考虑的。 本人从未基于操作系统编写嵌入式程序。 开始使用 MCU的时候,MCU的内存太小,256字节 RAM ,2K字节 ROM,能勉强把程序装入就不错了,连 C语言都不敢选择。 而且,那时好像也没有 RTOS(Real Time Operation System),或者是由于信息交流渠道匮乏,不知道有 RTOS。 既然我提供了这个平台,也借此机会尝试一下,和大家一起学习使用 uCOSII。(从单片机应用升级为嵌入式应用 ^_^)

二、Step1想要得到什么?(需求分析) 第一步我想得到的是: 1)如何建立一个基于 uCOSII 的编程环境(目录、文件组织); 2)如何基于IDE(IAR或RvMDK)建立一个工程,能够产生可以运行的程序; 3)得到一个“干净的”、可以作为模板的uCOSII程序组(Project); 4)通过上述过程初步理解在 uCOSII 下如何编写应用程序。 之所以要把“如何建立……”作为需求,而不是找一个现成的模板或示例程序修改、添加自己的功能,是因为看了许多这种程序,感觉“极不可靠”!因为程序中有太多的东西不知道为何而存在?不知道为何而被注释掉?似乎这些东西都像“定时炸弹”,早晚会给你的程序带来麻烦。 同时,也给自己理解程序的构成和运行机制带来困扰,既然是学习,就应该知其然、知其所以然,否则也谈不上“掌握”,更不敢在日后的工作中应用(如果是打工,也许还敢试试,如果是用自己的钱做产品、项目,我想你一定不敢用),如此则和做此事的初衷相悖了。 三、如何入手? uCOS的书有很多,也看了许多,但多数都是解析操作系统本身的,或者是如何移植,鲜有书籍、资料教你如何在操作系统下编程。 实际上,对于学习者,特别是初学者,更多需要的是学会如何在一个移植好的系统下编程,等到能基于操作系统实现自己的功能后,才会有心思去探究操作系统是如何在自己的 MCU上运行的(移植),以及那些神秘的系统功能是如何实现的(了解系统函数及运行机制)。 而且这种探究也是有选择性的,首先是自己用到的功能才有兴趣去研究,否则如坠云雾。其次,取决于自己所扮演的角色,如果只是学习一下,那只需泛泛了解,有个定性的认识即

STM32固件库的学习(重要,要常看)

1. stm32的编程中,在stdperiph_drive中添加的misc.c文件是干什么用的啊? 因为STM32 V3.5版本的库函数中没有原来版本中单独对于NVIC(中断向量嵌套)的外设驱动,把NVIC的外设驱动放在了misc.c中,实际上是代替原来的stm32f10x_nvic.c。 2. STM32F10XXX V 3.5标准外设库文件夹描述 标准外设库的第一部分是CMSIS 和STM32F10x_StdPeriph_Driver,CMSIS 是独立于供应商的Cortex-M处理器系列硬件抽象层,为芯片厂商和中间件供应商提供了简单的处理器软件接口,简化了软件复用工作,降低了Cortex-M上操作系统的移植难度,并减少了新入门的微控制器开发者的学习曲线和新产品的上市时间。 STM32F10x_StdPeriph_Driver则包括了分别对应包括了所有外设对应驱动函数,这些驱动函数均使用C语言编写,并提供了统一的易于调用的函数接口,供开发者使用。Project 文件夹中则包括了ST官方的所有例程和基于不同编译器的项目模板,这些例程是学习和使用STM32的重要参考。Utilities包含了相关评估板的示例程序和驱动函数,供使用官方评估板的开发者使用,很多驱动函数同样可以作为学习的重要参考。 3.文件功能说明

4.CMSIS文件夹结构

在实际开发过程中,根据应用程序的需要,可以采取2种方法使用标准外设库

(StdPeriph_Lib): (1)使用外设驱动:这时应用程序开发基于外设驱动的API(应用编程接口)。用户只需要配置文件”stm32f10x_conf.h”,并使用相应的文件”stm32f10x_ppp.h/.c”即可。 (2) 不使用外设驱动:这时应用程序开发基于外设的寄存器结构和位定义文件。 5. STM32F10XXX标准外设库的使用 标准外设库中包含了众多的变量定义和功能函数,如果不能了解他们的命名规范和使用规律将会给编程带来很大的麻烦,本节将主要叙述标准外设库中的相关规范,通过这些规范的学习可以更加灵活的使用固件库,同时也将极大增强程序的规范性和易读性,同时标准外设库中的这种规范也值得我们在进行其他相关的开发时使用和借鉴。 a.缩写定义 标准外设库中的主要外设均采用了缩写的形式,通过这些缩写可以很容易的辨认对应的外设。

STM32的Keil工程文件建立过程

固件库采用3.5.0版本 USE_STDPERIPH_DRIVER,STM32F10X_CL 1.首先建立工程文件,将固件库中的文件复制过来 建立工程文件夹project,包含文件夹 user:用户可自己修改的文件 CMSIS:Cortex-M3内核相关文件 startup:启动单片机的汇编文件 driver:外设操作的驱动文件 具体向工程文件夹中添加的文件为: 将路径:固件库文件夹\Project\STM32F10x_StdPeriph_Template中的stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h文件添加到user文件夹,再在其中建立一个main.c主文件 将路径:固件库文件夹\Libraries\CMSIS\CM3\CoreSupport中的core_cm3.c、core_cm3.h 文件,以及固件库文件夹\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x中的stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h文件添加到CMSIS文件夹 将路径:固件库文件夹\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 中的startup_stm32f10x_cl.s(互联型启动文件)文件添加到startup文件夹 将路径:固件库文件夹\Libraries\STM32F10x_StdPeriph_Driver中的src和inc文件夹全部复制到driver文件夹

2.在Keil中建立工程并管理工程文件

Keil4 建立STM32工程详解

Keil4 建立STM32工程详解 1:安装mdk412,用注册机注册,这个过程不详细叙述了。 2:在本地某个路径下建立STM32工程文件夹,命名:my_STM32,并在my_STM32下建立rvmdk文件夹,并在rvmdk文件夹内建立 obj,list两个文件夹。 3: 打开Keil4. 4: 选择Project菜单->New uVision Project...,选择.../my_STM32/rvmdk文件夹的路径,并命名工程文件:my_STM32,回车 5:选择器件名称,见图1

图1 单击OK。 6:如图2所示:选择否,不添加Startup.s,以后自己添加。 图2 7:如图3,建立几个Group:startup(即将装入启动文件等),usr(即将装入应用程序文件),FWlib(即将装入库文件的.c文件),doc(即将装入说明文档)

图3 8:右键单击FWlib,Add Files to Group 'FWlib',选择库文件的路径下的src 文件内的所有文件,并点击Add,如图4所示:

图4 9:将cortexm3_macro.s,stm32f10x_vector.s,stm32f10x_it.c, stm32f10x_it.h,stm32f10x_conf.h,main.c,readme.txt拷贝到my_STM32文件夹内。 10:右键单击usr,Add Files to Group 'usr',选择main.c,stm32f10x_it.c,stm32f10x_it.h,stm32f10x_conf.h,并Add,如图5所示

STM32工程模板

你是问有官方固件库创建工程吧?我这里给你说说MDK的创建方法,如果你用的时IAR环境也差不多。 1.解压stm32f10x_stdperiph_lib.zip 可以从ST官方网站免费下载。最新标准库版本为3.5.0 2.创建一个Demo文件夹 2.1 新建子文件夹User,用于存放用户源程序 2.2 新建子文件夹Project,用户KEIL工程文件 2.3 在Project下依次创建Obj和List子文件夹,存放编译过程中产生的中间文件。 3. 复制源代码到Demo文件夹 3.1 将stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.1.2Li braries文件整体复制到Demo文件夹下。这就是ST的标准库,是以源代码形式提供的。 3.2 将库中的演示代码IOToggle中的文件复制到Demo\User文件夹. 4. 新建一个Keil MDK工程 4.1 启动Keil MDK,点击菜单New uVision Project,然后按向导进行操作 4.2 选择CPU类型为STM32F103ZE (这是安富莱STM32开发板采用CPU类型) 4.3 当提示是否复制启动代码时,请选择否。(我们用最新的库中的启动代码,不用Keil软件自带的旧版本启动文件) 4.4 根据自己的需要修改Target名字。(名字任意) 4.5 为了便于代码管理,在这个Project下创建几个Group (名字可以任意) User : 存放用户自己写的源代码 RVMDK : 存放启动文件(汇编文件) StdPeriph_Driver : 存放ST标准库文件 CMSIS : 存放CMSIS接口文件(这也是库的一部分) 4.6 创建好Group后,我们开始依次添加文件。 5. 修改源代码。我们将修改main.c 文件,换成我们自己跑马灯程序。 6. 配置工程, 点击“Options”按钮 6.1 切换到Output。 选择Object文件夹。

stm32入门C语言详解

阅读flash:芯片内部存储器flash操作函数我的理解——对芯片内部flash进行操作的函数,包括读取,状态,擦除,写入等等,可以允许程序去操作flash上的数据。 基础应用1,FLASH时序延迟几个周期,等待总线同步操作。推荐按照单片机系统运行频率,0—24MHz时,取Latency=0;24—48MHz时,取Latency=1;48~72MHz时,取Latency=2。所有程序中必须的 用法:FLASH_SetLatency(FLASH_Latency_2); 位置:RCC初始化子函数里面,时钟起振之后。 基础应用2,开启FLASH预读缓冲功能,加速FLASH的读取。所有程序中必须的 用法:FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); 位置:RCC初始化子函数里面,时钟起振之后。 3、阅读lib:调试所有外设初始化的函数。 我的理解——不理解,也不需要理解。只要知道所有外设在调试的时候,EWRAM需要从这个函数里面获得调试所需信息的地址或者指针之类的信息。 基础应用1,只有一个函数debug。所有程序中必须的。 用法:#ifdef DEBUG debug(); #endif 位置:main函数开头,声明变量之后。 4、阅读nvic:系统中断管理。 我的理解——管理系统内部的中断,负责打开和关闭中断。 基础应用1,中断的初始化函数,包括设置中断向量表位置,和开启所需的中断两部分。所有程序中必须的。 用法:void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; //中断管理恢复默认参数 #ifdef VECT_TAB_RAM //如果C/C++ Compiler\Preprocessor\Defined symbols中的定义了 VECT_TAB_RAM(见程序库更改内容的表格) NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); //则在RAM调试 #else //如果没有定义VECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);//则在Flash里调试 #endif //结束判断语句 //以下为中断的开启过程,不是所有程序必须的。 //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC优先级分组,方式。 //注:一共16个优先级,分为抢占式和响应式。两种优先级所占的数量由此代码确定, NVIC_PriorityGroup_x可以是0、1、2、3、4,分别代表抢占优先级有1、2、4、8、16个和响应优先级有16、8、4、2、1个。规定两种优先级的数量后,所有的中断级别必须在其中选择,抢占级别高的会打断其他中断优先执行,而响应级别高的会在其他中断执行完优先执行。 //NVIC_InitStructure.NVIC_IRQChannel = 中断通道名; //开中断,中断名称见函数库 //NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级 //NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级 //NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //启动此通道的中断 //NVIC_Init(&NVIC_InitStructure); 中断初始化

STM32工程建立(F4系列)

使用MDK(Keil)建立一个STM32工程模板的流程如图所示: 一.获取ST库源码。到ST公司的官网进行查找并下载,如图所示: 1.新建工程文件夹——《STM32工程模板》。首先,新建工程文件夹《STM32工程模板》,然后再在该文件夹下新建6个文件夹,分 别:《Doc》、《BSP 》、《Listing》、《Output》、《Project》和《User》。其中, 2.《Doc》用于存放各种说明文档; 《BSP 》用于存放各种库文件; 《Listing》用于存放编译时产生的中间文件; 《Output》用于存放生成的下载所需的文件; 《Project》用于存放工程文件; 《User》用于存放用户文件,即我们自己编写的各种源文件。具体情况如下图所示: 具体步骤,以KEIL5 MDK5.18中建立STM32F417工程为例: 二.STM32工程建立(F4系列) 2016年4月13日16:57

将下载的stm32f4_dsp_stdperiph_lib_zip 压缩包中的文件复制到工程模板文件 夹下的STM32F4XX_StdPeriph_Driver 文件夹。如下图: 1)将stm32f4_dsp_stdperiph_lib\STM32F4xx_DSP_StdPeriph_Lib_V1.6.1 \Libraries\CMSIS\Include 文件夹中对应的core_cm 文件复制到工程模板文件夹下的CMSIS文件夹。具体操作情况如下图: 2)向建立的工程文件夹中添加库文件。 3.

将stm32f4_dsp_stdperiph_lib\STM32F4xx_DSP_StdPeriph_Lib_V1.6.1 \Libraries\CMSIS\Device\ST\STM32F4xx\Include 文件夹中文件复制到工程模板文件夹下的CMSIS 文件夹。具体操作情况如下图: 3)将stm32f4_dsp_stdperiph_lib\STM32F4xx_DSP_StdPeriph_Lib_V1.6.1 \Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm 文件夹中对应芯片的startup 文件复制到工程模板文件夹下的CMSIS 文件夹。具体操作情况如下图: 4)将库文件中Project文件夹下的相关文件复制到工程模板文件夹下的User文件 夹中。具体操作情况如下图: 5)

STM32固件库详解42324

STM32固件库详解 最近考试较多,教材编写暂停了一下,之前写了很多,只是每一章都感觉不是特别完整,最近把其中的部分内容贴出来一下,欢迎指正。本文内容基于我对固件库的理解,按照便于理解的顺序进行整理介绍,部分参考了固件库的说明,但是也基本上重新表述并按照我理解的顺序进行重新编写。我的目的很简单,很多人写教程只是告诉你怎么做,不会告诉你为什么这么做,我就尽量吧前因后果都说清楚,这是我的出发点,水平所限,难免有很大的局限性,具体不足欢迎指正。基于标准外设库的软件开发 STM32标准外设库概述 STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。

ST公司2007年10月发布了版本的固件库,MDK 之前的版本均支持该库。2008年6月发布了版的固件库,从2008年9月推出的MDK 版本至今均使用版本的固件库。以后的版本相对之前的版本改动较大,本书使用目前较新的版本。 使用标准外设库开发的优势 简单的说,使用标准外设库进行开发最大的优势就在于可以使开发者不用深入了解底层硬件细节就可以灵活规范的使用每一个外设。标准外设库覆盖了从GPIO到定时器,再到CAN、I2C、SPI、UART和ADC 等等的所有标准外设。对应的C源代码只是用了最基本的C编程的知识,所有代码经过严格测试,易于理解和使用,并且配有完整的文档,非常方便进行二次开发和应用。 STM32F10XXX标准外设库结构与文件描述 1. 标准外设库的文件结构 在上一小节中已经介绍了使用标准外设库的开发的优势,因此对标准外设库的熟悉程度直接影响到程序的编写,下面让我们来认识一下STM32F10XXX的标准外设库。STM32F10XXX的标准外设库经历众多的更新目前已经更新到最新的版本,开发环境中自带的标准外设库为版本,本书中以比较稳定而且较新的版本为基础介绍标准外设库的结构。

stm32工程模板建立

STM32工程建立步骤 Stm32的工程建立稍微有点复杂,所以写一个教程也是为了防止自己以后忘记了步骤而再次繁琐办事。 首先新建一个工程文件夹 改名字 打开Domo新建文件夹 打开Libraries文件夹新建如下文件夹 其实你会发现这都是官方库里面的文件夹,事实上就是拷贝过来的啦。 这是官方3.5版本库 首先我们凑齐Libraries 文件夹里的四个子文件夹 从官方库这个位置STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\Core Support\找到下面两个放到core文件夹内 从官方库这个位置STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ ST\ STM32F10x

把startup文件夹直接复制过来放在Libraries里,另外三个文件放在刚刚建的Devices文件夹里 然后把startup打开再把arm文件夹里的文件都剪切出来放在startup文件夹里,其余文件删除。 从官方库的这个位置STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\ STM32F10x_StdPeriph_Driver拷贝inc、src这两个文件夹 到这里我们新建的Libraries文件夹里的四个子文件夹就凑齐了,可见都是官方的库。 然后我们往Devices文件夹里添加一些文件 从官方库的这个位置STM32F10x_StdPeriph_Lib_V3.5.0\ Project\ STM32F10x_StdPeriph_Template 复制这五个文件放到Devices文件夹里 你会发现这个文件重复了,是因为我们刚才已经放了三个文件其中一个就是它,一模一样随便处理了。 这个时候我们就可以打开Keil了

stm32库函数解释

部分库函数简介 一、通用输入/输出(GPIO)--------------------------------------------------------------------------------------------3 二、外部中断/事件控制器(EXTI)-----------------------------------------------------------------------------------7 三、通用定时器(TIM)-------------------------------------------------------------------------------------------------9四:ADC寄存器------------------------------------------------------------------------25 五:备份寄存器(BKP)-------------------------------------------------------------------------------------------------33 六、DMA控制器(DMA)---------------------------------------------------------------37 七、复位和时钟设置(RCC)------------------------------------------------------------------------------------------41 八、嵌套向量中断控制器(NVIC)-----------------------------------------------------------------------------------49

用KEIL5新建工程模版

第1章用KEIL5新建工程模版 版本说明:MDK5.15 1.1新建工程 1.1.1新建本地工程文件夹 为了工程目录更加清晰,我们在本地电脑上新建6个文件夹,具体如下: 表格1工程目录文件夹清单 名称作用 Doc用来放对程序说明的文件,由写程序的人添加 Libraries存放是库文件 Listing存放编译器编译时候产生的c/汇编/链接的列表清单Output存放编译产生的调试信息、hex文件、预览信息、封装库等Project用来存放工程 User用户编写的驱动文件 图10工程文件夹目录 在本地新建好文件夹后,把准备好的库文件添加到相应的文件夹下: 表格2工程目录文件夹内容清单 名称作用 Doc readme.txt Libraries CMSIS:里面放着跟CM3内核有关的库文件

FWlib:STM32外设库文件 Listing暂时为空 Output暂时为空 Project暂时为空 User stm32f10x_conf.h:用来配置库的头文件 stm32f10x_it.h stm32f10x_it.c:中断相关的函数都在这个文件编写,暂时为空 main.c:main函数文件 1.1.2新建工程 打开KEIL5,新建一个工程,工程名根据喜好命名,我这里取LED-LIB,保存在Project\RVMDK(uv4)文件夹下。 1.选择CPU型号 这个根据你开发板使用的CPU具体的型号来选择,MINI选STM32F103VE,ISO选STM32F103ZE。如果这里没有出现你想要的CPU型号,或者一个型号都没有,那么肯定是你的KEIL5没有添加device库,KEI5不像KEIL4那样自带了很多MCU的型号,KEIL5需要自己添加,关于如何添加请参考《如何安装KEIL5》这一章。

STM32单片机实习,第一课,工程模板建立篇

第一天学习笔记 序号:06 班级:232183 姓名:王猛一、实训项目 基于STM32的智能小车。 二、基本原理 1、嵌入式与STM32 A.什么是嵌入式? 简单的说,除了PC和服务器之外,所有的控制类设备都是嵌入式。 B.嵌入式的特点 硬件特点: ◆体积小、集成效率高; ◆面向特定的应用; ◆功耗低、电磁兼容性好; 如图:

软件特点: 嵌入式软件的开发和硬件紧密相连;

?软件代码效率高并且可靠性好; ?软件一般固化在FLASH和ROM中; ?软件系统要有高实时性; ?一般用c语言开发; 如图: C.主流嵌入式芯片的架构 ARM————英国的一家公司(只设计芯片的IP内核,授权给其他半导体公司)ARM————是一款功耗很低、性能很高的处理器芯片的架构; ARM以前的架构:ARM7、ARM9、ARM11(已经不用); ARM现在的架构:cortex A\R\M; Cortex A系列:开放式操作系统的高处理器(A8\A9\A53\A72); 应用产品:上网本、数字电视、家用网关等

Cortex R系列:面向实时应用; 应用产品:汽车制动系统、航空、动力传输系统等;

Cortex M系列:面向确定性的成本敏感的产品; 应用产品:门禁、扫地机器人、平衡车、无人机、手环等;

D.C51和STM32 51单片机是嵌入式学习中的一款入门级MCU,51单片机诞生于70年代,属于传统的8位单片机,51单片机不能满足市场需求,所以需要新的MCU,也就是STM32; ARM公司推出了基于ARMv7架构的32位的cortex M3\M4的微控制器内核,ST(意法半导体)公司就推出了基于cortex M3\M4内核的MCU,也就是STM32,性价比很高,成本低,简单易用的库函数开发。 E.STM32的应用领域 STM32属于微控制器,自带了很多常用的通信接口(UART\IIC\SPI),可以接非常多的传感器,可以控制很多的设备。 如:无人机、平衡车、智能水杯等

献给新手:解析STM32的库函数

意法半导体在推出STM32微控制器之初,也同时提供了一套完整细致的固件开发包,里面包含了在STM32开发过程中所涉及到的所有底层操作。通过在程序开发中引入这样的固件开发包,可以使开发人员从复杂冗余的底层寄存器操作中解放出来,将精力专注应用程序的开发上,这便是ST推出这样一个开发包的初衷。 但这对于许多从51/AVR这类单片机的开发转到STM32平台的开发人员来说,势必有一个不适应的过程。因为程序开发不再是从寄存器层次起始,而要首先去熟悉STM32所提供的固件库。那是否一定要使用固件库呢?当然不是。但STM32微控制器的寄存器规模可不是常见的8位单片机可以比拟,若自己细细琢磨各个寄存器的意义,必然会消耗相当的时间,并且对于程序后续的维护,升级来说也会增加资源的消耗。对于当前“时间就是金钱”的行业竞争环境,无疑使用库函数进行STM32的产品开发是更好的选择。本文将通过一个简单的例子对STM32的库函数做一个简单的剖析。 以最常用的GPIO设备的初始化函数为例,如下程序段一: GPIO_InitTypeDef GPIO_InitStructure; 1 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; 2 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 3 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 4 GPIO_Init(GPIOA , &GPIO_InitStructure 5 这是一个在STM32的程序开发中经常使用到的GPIO初始化程序段,其功能是将GPIOA.4口初始化为推挽输出状态,并最大翻转速率为50MHz。下面逐一分解: 首先是1,该语句显然定义了一个GPIO_InitTypeDef类型的变量,名为GPIO_InitStructure,则找出GPIO_InitTypeDef的原型位于“stm32f10x_gpio.h” 文件,原型如下: typedef struct { u16 GPIO_Pin; GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode; }GPIO_InitTypeDef; 由此可知GPIO_InitTypeDef是一个结构体类型同义字,其功能是定义一个结构体,该结构体有三个成员分别是u16类型的GPIO_Pin、 GPIOSpeed_TypeDef 类型的GPIO_Speed和GPIOMode_TypeDef 类型的 GPIO_Mode。继续探查GPIOSpeed_TypeDef和GPIOMode_TypeDef类型,在“stm32f10x_gpio.h”文件中找到对GPIOSpeed_TypeDef的定义: typedef enum { GPIO_Speed_10MHz = 1,

(仅供参考)STM32F105RBT6最小系统原理及工程的建立

市面上的许多stm32开发板都是使用ULINK2作为调试仿真工具,鉴于ULINK2所需引脚过多在学习时还可以,但应用于实际电路设计生产会造成许多硬件资源的浪费。鉴于此,本人经实验得出利用ST-LINK作为仿真下载工具的实验最小系统电路。希望给大家作为参考。 一、最小系统原理图 二、建立工程的步骤 1、先在一个文件夹内建6个子文件夹: DOC:放说明文件 Libraries:放库文件(CMSIS、FWlib) Listing:放编译器的中间文件 Output:放编译器的输出文件 Project:放项目工程 User:放自己编写的程序、main、stm32f10x_conf、stm32f10x_it.C、stm32f10x_it.h

2、双击桌面UV4图标启动软件,,---NWE uVision Project--选择保存地方----选择芯片型号------在左边处建立5个GOP(STARTUP放启动文件)、(CMSIS放内核文件)、(FWLIB放库里面的src的.C文件)、(USER 放自己写的程序文件及stm32f10x_conf.h、stm32f10x_it.h、stm32f10x_it.c、main.c)

3、将Output重置到一开始时所建的“Output”文件夹中。 4、将Listing重置到一开始时所建的“Listing”文件夹中。 5、在C、C++处的“Define”输入:STM32F10X_HD,USE_STDPERIPH_DRIVER。对于不同的芯片容量,可对HD进行更改(LD、MD、HD、XL、XC)。然后在“Include Paths”处指定相关的搜库位置。 6、Debug处选好下载器

STM32F10x 启动代码文件选择

startup_stm32f10x_xx.s 启动代码文件选择startup_stm32f10x_cl.s 互联型的器件,STM32F105xx,STM32F107xx startup_stm32f10x_hd.s 大容量的STM32F101xx,STM32F102xx,STM32F103xx startup_stm32f10x_hd_vl.s 大容量的STM32F100xx startup_stm32f10x_ld.s 小容量的STM32F101xx,STM32F102xx,STM32F103xx startup_stm32f10x_ld_vl.s 小容量的STM32F100xx startup_stm32f10x_md.s 中容量的STM32F101xx,STM32F102xx,STM32F103xx startup_stm32f10x_md_vl.s 中容量的STM32F100xx startup_stm32f10x_xl.s FLASH在512K到1024K字节的STM32F101xx,STM32F102xx,STM32F103xx 固件库中的Release_Notes_for_STM32F10x_CMSIS.html写到: STM32F10x CMSIS Startup files: startup_stm32f10x_xx.s Add new startup files for STM32 Low-density Value line devices: startup_stm32f10x_ld_vl.s Add new startup files for STM32 Medium-density Value line devices: startup_stm32f10x_md_vl.s SystemInit() function is called from startup file (startup_stm32f10x_xx.s) before to branch to applic ation main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f10x.c file GNU startup file for Low density devices (startup_stm32f10x_ld.s) is updated to fix compilation err ors. 例如我用STM32F103RB,那么选启动文件为startup_stm32f10x_md.s

STM32基于固件库V3.5版本的工程模板建立

STM32基于固件库V3.5版本的工程模板建立 1、建立工程文件夹 2、Project->New uVision Project…,目录定位至工程文件夹,在工程文件夹下新建USER文件 夹(存放代码工程文件),命名工程,点击保存。 3、出现选择芯片界面(Select Device for Target ’Target 1’),由于开发板使用的是 STM32F103RCT6,选择对应芯片。出现Manage Run-Time Environment对话框,在此可以添加自己需要的组件,从而方便构建开放环境,不过这里不用,直接点Cancel即可。 4、在工程文件夹下新建3个文件夹CORE,OBJ以及STM32F10x_FWLib。 CORE:存放核心文件和启动文件; OBJ:存放编译过程文件以及hex文件; STM32F10x_FWLib:存放ST官方提供的库函数源码文件。 USER:除用来放工程文件外,还用来存放主函数文件main.c,以及其他包括system_stm32f10x.c等等。 5、将官方的固件库包里的源码文件复制到工程目录文件夹下面。打开官方固件库包,定位 到STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver,将src,inc 文件夹复制到刚才建立的STM32F10x_FWLib文件夹下。

STM32F10x_StdPeriph_Driver:存放的是STM32固件库源码文件 inc:存放的是stm32f10x_xxx.h头文件 src:存放的是stm32f10x_xxx.c格式的固件库文件 每一个.c文件和一个相应的.h文件对应。这里的文件也是固件库的核心文件,每个外设对应一组文件。Libraries文件夹里面的文件在建立工程的时候都会使用到。 STM32F10x_FWLib里面的函数可以根据需要添加和删除,但是一定要注意在头文件stm32f10x_conf.h文件中注释掉删除的源文件对应的头文件,这里面的文件内容用户不需要修改。 src存放的是固件库的.c文件,inc存放的是对应的.h文件。 6、将官方的固件库包里相关的启动文件复制到工程目录CORE之下。打开官方固件库包, 定位到STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport,将core_cm3.c和core_cm3.h复制到CORE下面。然后定位到STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\star tup\arm,由于使用的芯片为大容量芯片,所以使用startup_stm32f10x_hd.s这个启动文件,将其复制到CORE下面。 Coresupport:core_cm3.c和core_cm3.h是CMSIS核心文件,提供进入Cortex-M3内核接口,这是ARM公司提供的,对所有Cortex-M3内核的芯片都一样。用户永远都不需要修改这个文件。 arm:存放启动文件 startup_stm32f10x_ld.s:适用于小容量产品 startup_stm32f10x_md.s:适用于中等容量产品 startup_stm32f10x_hd.s:适用于大容量产品 启动文件主要是进行堆栈之类的初始化、中断向量表以及中断函数定义。启动文件要引导进入main函数。 7、将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 下面的三个文件stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h复制到USER目录之下。然后将STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下面的四个文件main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h复制到USER 目录下。 STM32F10x:主要存放一些启动文件以及比较基础的寄存器定义以及中断向量定义的文件。 system_stm32f10x.c和system_stm32f10x.h:设置系统以及时钟总线,这里面有一

相关主题