STM32根据库建立自己的工程

发布者:声慢慢最新更新时间:2015-09-18 来源: eefocus关键字: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中被配置的文件才会被编译。

[转载]STM32根据库建立自己的工程
 

● 注意,在组里面添加的,都是汇编文件和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是设置,头文件的搜索路径的。我们的工程中,用到的头文件在哪个路径,就把该路径添加进来,即可。有时,也可以根据编译错误,发现哪些头文件,编译器找不到,再把这些头文件的路径添加进来。一般要填入的路径有以下一些,每个不同的路径以分号间隔:..;  ......LibrariesCMSISCM3CoreSupport;  ......LibrariesCMSISCM3DeviceSupportSTSTM32F10x;  ......LibrariesSTM32F10x_StdPeriph_Driverinc;  “ .. ”表示工程根目录。

● 在添加目录时要注意,在下图界面下,必须把蓝色条移到最后的空白处,再点击“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”项。其它设置,默认即可。如下图。

[page]

在上图的界面中,点击“Settings”按钮,弹出下面的对话框,添加Flash。如果,已经有Flash了,就不用添加了,如果没有的话,就一定要添加Flash,否则,无法下载程序到开发板。

 

            

 [转载]STM32根据库建立自己的工程

[转载]STM32根据库建立自己的工程

[转载]STM32根据库建立自己的工程

[转载]STM32根据库建立自己的工程

[转载]STM32根据库建立自己的工程 

[转载]STM32根据库建立自己的工程

[转载]STM32根据库建立自己的工程

[转载]STM32根据库建立自己的工程
 

在上图的界面中点击“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  工程 引用地址:STM32根据库建立自己的工程

上一篇:基于ARM9的UDP协议栈的设计与实现
下一篇:STM32 V3.5固件库下SysTick的使用

推荐阅读最新更新时间:2024-03-16 14:32

51单片机C语言教程(一) 建立第一个工程
  学习单片机实在不是件易事,一来要购买高价格的编程器,仿真器,二来要学习编程语言,还有众多种类的单片机选择真是件让人头疼的事。在众多单片机中51架构的芯片风行很久,学习资料也相对很多,是初学的较好的选择之一。51的编程语言常用的有二种,一种是汇编语言,一种是C语言。汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且C语言还可以嵌入汇编来解决高时效性的代码编写问题。对于开发 周期 来说,中大型的软件编写用C语言的开发周期通常要小于汇编语言很多。综合以上C语言的优点,我在学习时选择了C语言。以后的教程也只是我在
[单片机]
51单片机C语言教程(一) 建立第一个<font color='red'>工程</font>
什么是Bootloader 浅谈STM32中bootloader的内存分配
1. 什么是Bootlo ad er Bootloader是 硬件 启动的引导程序,是运行 操作系统 的前提。在操作系统内核或用户应用程序运行之前运行的一段小代码。对硬件进行相应的初始化和设定,最终为操作系统准备好环境。 2. Bootloader的特点 Bootloader不属于操作系统,一般采用 汇编 语言和 C语言 开发。需要针对特定的硬件平台编写。在移植过程时,首先为开发板移植Bootloader。Bootloader不但依赖于 CPU 的体系架构,而且依赖于 嵌入式系统 板级设备的配置。 3. STM32 中bootloader的内存分配 stm32默认的是从0x08000000开始启动程序,所以bootloader
[单片机]
什么是Bootloader 浅谈<font color='red'>STM32</font>中bootloader的内存分配
优傲协作机器人UR10执行码垛任务,减少欧莱雅工厂人体工程学风险
包装码垛是协作机器人的重要应用场景之一。在传统工业中,拆跺码垛属于重复性较高的任务,容易造成劳动损伤。使用协作机器人,可以代替人工交替进行包装盒的拆垛和码垛,不仅有利于提高物品堆放的有序性和生产效率,而且也大大降低了人体工程学风险。 优傲机器人可用于大多数包装及堆垛应用,节省空间,而且还能快速重新编程,与多种不同的机器一同使用。这是很多工厂青睐于优傲机器人的原因。欧莱雅在印度浦那的工厂便是其中一家。 面临人体工程学挑战 欧莱雅是全球最大的化妆品公司之一,在其印度浦那的工厂正面临着诸多问题,因为工人们都以手动方式进行生产线末端操作,这给工人们带来了严重的人体工程学风险。 经过内部人体工程学风险分析后,欧莱雅印度私人有限公司位于浦
[机器人]
STM32几种操作的寄存器版本和库函数版本对比
1、USART1接收完成标志检测 USART1- SR&0X40 == 0 USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET 2、USART1发送数据 USART1- DR = (u8) ch; USART_SendData(USART1,(u8)ch);
[单片机]
新款STM32U5:让便携产品拥有惊艳图效
凝聚ST超低功耗微控制器技术精华的STM32U5于2021年问世,是一款堪称可改变游戏规则的低功耗MCU。 作为STM32高性能低功耗系列旗舰产品, STM32U5延续STM32F2/F4/F7的应用范围,同时又有更低的能耗,具有更高的性价比。 在工业控制系统中,U5可以承担主控器、系统监控以及图形显示等核心职能。 高性能,低功耗,丰富的数字外设和更高性能的模拟接口,强大的安全特性,以及支持图形加速,让STM32U5在工业控制、工业表计和医疗健康,个人穿戴设备等应用领域取得良好的表现,为泛工业系统创新赋能。在这个视觉统治一切的时代,人们对图形效果的追求永远没有止境,同时也希望实现起来更简单快速,性价比更高。“如果只
[单片机]
新款STM32U5:让便携产品拥有惊艳图效
使用STVD+COSMIX编译STM8S工程问题汇总
1)#error cpstm8 main.c:231(10) missing prototype 解决方案:所有函数声明和定义都要带形参。 例: void SysInit(void);void SysInit(void){} 2) warning: Toolset rootpaths have not been specified for at least one of supported toolsets.confirm that the root path for the toolset that you are using have been specified STVD中COSMIX编译器默认路径设置。
[单片机]
使用STVD+COSMIX编译STM8S<font color='red'>工程</font>问题汇总
FPGA电源设计适合并行工程吗?
  如果设计师可以在开发过程早期就满足基于 FPGA 的设计,提出的功耗要求和约束条件,那么在系统的最终实现阶段就能形成极具竞争力的优势。然而,根据整个技术文献中这种自我暗示式的反复祷告,今天基于 FPGA 的系统中还有什么会使得完全遵循这个建议变得不切实际或过于困难呢?尽管能够使用各种开发工具,如专门针对 FPGA 项目开发的早期功耗预估器和功耗分析器,但对 电源设计 师来说,在设计过程早期就考虑最坏情况而不是最佳情况的电源系统是有好处的,因为在许多方面仍有太多的不确定性,比如在硬件设计完成和功耗可以测量之前,静态小电流状态与全速工作状态之间的动态负载要求将如何波动。   采用并行工程(CE)技术,可以为在项
[电源管理]
FPGA电源设计适合并行<font color='red'>工程</font>吗?
STM32速成笔记(10)—IWDG
一、IWDG简介 独立看门狗 (Independent Watchdog, IWDG ),什么是看门狗?字面意思——看门的,有陌生人来,就会叫。实际在嵌入式领域里,看门狗也是这种作用,当软件程序发生故障或者程序跑飞时,看门狗会产生复位信号,复位系统。 二、STM32的IWDG 2.1 STM32的IWDG简介 STM32内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。 独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。窗
[单片机]
<font color='red'>STM32</font>速成笔记(10)—IWDG
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved