完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一。建立目录:
@-》 在任意位置新建一个文件夹,取名为“STM32F10x_Temp_Lib3.5”,目录下新建“Solution”(工程文件、目标文件),“Libraries”(STM32库),“User”(用户代码)三个文件夹。 @-》 在“Solution”下新建“LIST”,“OBJ”,“MDK”,“VS”,“ECL”五个文件夹。 @-》在“User”下新建“inc”,“scr”两个文件夹。至此文件目录建立完成,如下图所示:↓ 二。拷贝STM32库: @-》将下载后的库文件解压,观察目录结构。其中根目录下有一个chm的用户手册,那是个用Doxygen生成的文档。反正我看着挺纠结的,关于库文件的结构,园子里的这篇文章有比较详细的分析,这里就不重复了。 @-》右击这个文件夹,将其属性中的“只读”去掉。STM32库下载下来默认是只读的,若不去掉将无法修改文件。去掉只读,点击应用,选中“将更改应用于该文件夹、子文件夹和文件”确定。↓ @-》在固件库根目录“STM32F10x_StdPeriph_Lib_V3.5.0Libraries”下全部文件拷贝到我们建立的工程目录“STM32F10x_Temp_Lib3.5Libraries”中。 @-》将“STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Template”下的“stm32f10x_it.c”拷贝到我们的工程目录“STM32F10x_Temp_Lib3.5Userscr”中。另外src文件夹中再新建一个“main.c”文件,以后可将用户代码添加到这里。 @-》将“STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Template”下的“stm32f10x_it.h”和“stm32f10x_conf.h”拷贝“STM32F10x_Temp_Lib3.5Userinc”中。以后自定义的头文件也可以放在这个文件夹下。至此,所有工程文件拷贝完毕。 三。建立MDK模板: @-》打开Keil 4.60,点击Project-》New uVision Project,保存工程路径为“STM32F10x_Temp_Lib3.5SolutionMDK”,取名为“STM32F10x_MDK”,也可以另取名字。在CPU中选择STMicroelectronics-》STM32F103RB。接下来出现的“Copy STM32 Startup Code to Project Folder and ADD File to Project ?”对话框汇中选择No,因为之后我们需要自己添加STM32库中的启动文件。 @-》在左侧Project窗口中右击Target1,选择Manage Components:↓ 将Project Targets中的Target 1改为一个有意义的名字,比如这里改成“STMF10x_Tar”,在之后的Groups里面新建“USER”,“STM32_LIB”,“STM32_STARTUP”,“CMSIS” 四组。↓ @-》选中USER,点击右侧Add Files,添加工程目录“Userscr”下的“main.c”和“stm32f10x_it.c”两个文件。↓ @-》选中STM32_LIB,点击右侧Add Files,添加工程目录“LibrariesSTM32F10x_StdPeriph_Driversrc”下的“misc.c”,“stm32f10x_rcc.c”,“stm32f10x_gpio.c”,“stm32f10x_usart.c”四个文件。其中这里“misc.c”和“stm32f10x_rcc.c”根据我查阅的资料说一定得加(*有待验证),剩下的文件用到那个功能添加那个。↓ @-》选中STM32_STARTUP,点击右侧Add Files,添加工程目录“LibrariesCMSISCM3DeviceSupportSTSTM32F10xstartuparm”下的“startup_stm32f10x_md.s”文件即为需要的启动代码。这里后缀的md表示中等容量大小,因为我们的芯片是STM32F103RB所以要选这个。↓ 关于STM32的这个分类,可以在“stm32f10x.h”这个入口头文件(现在还没添加到包含路径中)中找到描述注释,当然也可以在网上搜索到具体怎么分类的,但我这里故意黏贴了这个函数里面的描述。要学会利用好手头的资源,很多头文件里的注释很清楚的只是我们不愿意读罢了。读一读就知道我们这个芯片为什么选择后缀为md的启动代码了。↓ /*!《 STM32F10X_LD: STM32 Low density devices *//*!《 STM32F10X_LD_VL: STM32 Low density Value Line devices */ /*!《 STM32F10X_MD: STM32 Medium density devices *//*!《 STM32F10X_MD_VL: STM32 Medium density Value Line devices */ /*!《 STM32F10X_HD: STM32 High density devices *//*!《 STM32F10X_HD_VL: STM32 High density value line devices */ /*!《 STM32F10X_XL: STM32 XL-density devices *//*!《 STM32F10X_CL: STM32 Connectivity line devices *//* - Low-density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers where the Flash memory density ranges between 16 and 32 Kbytes. - Low-density value line devices are STM32F100xx microcontrollers where the Flash memory density ranges between 16 and 32 Kbytes. - Medium-density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers where the Flash memory density ranges between 64 and 128 Kbytes. - Medium-density value line devices are STM32F100xx microcontrollers where the Flash memory density ranges between 64 and 128 Kbytes. - High-density devices are STM32F101xx and STM32F103xx microcontrollers where the Flash memory density ranges between 256 and 512 Kbytes. - High-density value line devices are STM32F100xx microcontrollers where the Flash memory density ranges between 256 and 512 Kbytes. - XL-density devices are STM32F101xx and STM32F103xx microcontrollers where the Flash memory density ranges between 512 and 1024 Kbytes. - Connectivity line devices are STM32F105xx and STM32F107xx microcontrollers. */ @-》最后,选中STM32_STARTUP,点击右侧Add Files,添加工程目录“LibrariesCMSISCM3CoreSupport”下的“core_cm3.c”,和工程目录“LibrariesCMSISCM3DeviceSupportSTSTM32F10x”下的“system_stm32f10x.c”文件。↓ 于是最终Project下可看到工程目录呈现如图状:↓ *.MDK工程文件结构说明 @-》USER文件夹下面其中main.c是自己添加的,用于添加用户代码。stm32f10x_it.c是从下载的库文件中的模板里拷贝出来的,这也说明这个文件并不属于标准库中的函数。打开这个文件就可以知道这里定义的是所有中断的服务函数(以‘_Handler’)结尾,文件里面的所有函数都是空的,用户需要向这里添加自己的中断服务代码,并打开中断,即可使用中断了。STM32中的所有中断服务函数的名字都是在启动代码‘startup_stm32f10x_xx.s’中定义过了的,比如‘EXTI0_IRQHandler’(外部中断0)、‘CAN1_RX1_IRQHandler’(CAN1的接受中断),‘所以最好不要自己随便改名字。注意到stm32f10x_it.c并没有将所有中断函数的名字都写出来,只写出了系统内部的中断,所有外设的中断函数名都没有写,需要用户自己添加。 @-》STM32_LIB文件夹下放置的是stm32外设的库函数文件,均位于工程目录’LibrariesSTM32F10x_StdPeriph_Driversrc‘中。若要添加新的外设只需从此目录中添加对应的c文件即可 @-》STM32_STARTUP文件夹下放置的是启动代码。注意这里的启动代码并不是从Keil里面拷贝出来的,而是从下载的库文件中拷贝的。 @-》CMSIS中放置的是CMSIS标准给出的一个核心文件’core_cm3.c‘,定义了大量内嵌汇编函数用于连接核心与上层函数;系统配置文件’system_stm32f10x.c‘中定义了初始化函数、系统时钟设定等。 四。配置MDK模板: @-》右击STM32F10x_Tar,选择第一个Options for Target ‘STM32F10x_Tar’即可进入设置↓ 选中Output选项卡,修改“Name of Excutable”为“ExcSTM32”,改其他名也可以,但关键是不能包含下划线,否则JLink仿真会报错(*这也有待验证为什么)。选中“Create Hex File”框将生成最终的.hex文件,否则编译最后仅仅到.axf就结束了。其他设置保留默认:↓ 之后还是在这一页,点击“Select Folder for Objects.。.”按钮,将其设置为工程目录“SolutionOBJ”即为目标文件生成的目录。 @-》选中Listing选项卡,点击“Select Folder for Listings.。.”,将其设置为工程目录“SolutionLIST”即为list文件生成的目录。 这里默认没有选中“C Compiler Listing: 。.*txt”。也可以选上,在编译时将以txt的形式多输出一份列表文件。 @-》选中C/C++选项卡,点击“Include Paths”,添加四条包含路径如下图,这里就包含了所有头文件的目录↓ 之后在“Preprocessor Symbols”中添加Define“STM32F10X_MD,USE_STDPERIPH_DRIVER”,这是两个预定义,中间用逗号隔开的。其中“STM32F10X_MD“表明使用的是中等容量的CPU,在入口头文件中有很多地方用到了宏判断来进行定义分类,有兴趣可以翻翻头文件”stm32f10x.h“内的宏定义就明白了。”USE_STDPERIPH_DRIVER“的道理也是一样。 选中”One ELF Section per Function“。若选中了这一项,则在编译时有很多没有被用到的函数将不会被编译。对于库函数来说,实际上我们最终不可能所有函数都会用到,全部编译后的目标文件将会很大,很费资源。所以这里选中项,最终编译时将会达到很大的优化作用,有兴趣可以自己试试选中这项或不选中看看最终生成的文件大小,保准比你调整优化等级”Optimization“来的差别大。 最终的设置见图↓ 至此全部MDK的设置完毕。 @-》打开最开始的那个main.c文件,添加如下代码这里的主函数什么都不写↓ /** ************************************************************************** * @file main.c * @author apollius * @version V0.1 * @date Nov.20 2012 * @brief 用于STM32lib3.5的工程模板,已配置为STM32F103RB芯片 ************************************************************************** */ #include ”stm32f10x.h“ /*位于当前工程目录下的头文件,即STM32库V3.5中的stm32f10x.h*推荐*///#include 《stm32f10x.h》 /*位于MDK安装目录下的头文件stm32f10x.h*/int main(void){ return 0;}/************************** END OF FILE **************************/ 点击Build(F7),若一切设置正常,编译将不报错。当然到这一步完全可以就开始着手自己的项目的编写了,不过这并不是本次教程的初衷。为了有更好的代码编写体验,接下来将进行一些扩展设置,进一步设置我们的工程模板以适用于Visual Studio或Eclipse编程。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
554浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 11:07 , Processed in 0.992823 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号