STM32开发 -- Keil使用(1)

面已经把STM32开发环境搭建,keil的安装和工程新建讲完了。
参看:Keil uVision4使用总结
参看:STM32开发 – 开发环境搭建

 

接下来看一下 keil 软件的使用。
参看:ybhuangfugui 博客专家 
参看:zhzht19861011 博客专家

 

这位大神写的keil专栏,讲的已经很详细了。但如果我只是看看的话,是记不住的。
还是自己跟着来做一遍吧。

 

 

 

一、keil主界面详解

 

打开一个工程文件,可以看到如下的界面:
 
下面我们就一一来介绍下。为了讲解专门找到一个keil汉化补丁。也是够够的了。
这里的汉化为了方便讲解,实际工作中建议还是用英文版本。
下载:keil 4汉化包

 

 

 

1、菜单栏

 

 

 

文件

 

 
其中需要注意的是 License Management,破解时需要在这里输入。

 

 

 

编辑

 

 

 

 

 

视图

 

 

 

 

 

工程

 

 

 

 

 

闪存

 

 

 

 

 

调试

 

 

 

 

 


外围设备(仿真)

 

 

 

 

 

工具

 

 

 

 

 

2、工具栏

 

 

 

文件操作

 

 
新建文件夹                     Ctrl + N
打开文件                         Ctrl + O
保存当前文件                 Ctrl + S
保存所有文件                 无
剪切                                 Ctrl + X
复制                                 Ctrl + C
粘贴                                 Ctrl + V

 

 

 

文件编辑跳转

 

 
撤销编辑                           Ctrl + Z
恢复编辑                           Ctrl + Y
跳转到上一步                   Ctrl + -
跳转到下一步                   Ctrl + Shift + -

 

 

 

书签

 

 
添加书签                            Ctrl + F2
跳转到上一个书签             Shift + F2
跳转到下一个书签             F2
清空所有书签                    Ctrl + Shift + F2

 

 

 

选中行操作

 

 
插入缩进(Tab)                 Tab
取消缩进(Tab)                 Shift + Tab
确定注释                           无
取消注释                           无

 

 

 

查找文本

 

 
查找所有文本                   Ctrl + Shift + F
查找文本输入框               无
查找单个文本                  Ctrl + F
增加搜索                         Ctrl + I

 

 

 

调试

 

 
打开/关闭调试        Ctrl + F5
插入断点                           F9
失能单个断点                   Ctrl + F9
失能所有断点                   无
取消所有断点                   Ctrl + Shift + F9

 

 

 

窗口配置

 

 
窗口                         无
配置                         无
 
有时会遇到,复制到keil编辑器中的汉字出现乱码。
解决方法:
configuration 选项对话框中将 ENCODING 框中设置成 Chinese GB2312

 

 

 


编译

 

 
编译当前文件(单个)                  Ctrl + F7
编译目标文件(修改过的)            F7
编译所有目标文件(重新编译)    无
编译多个工程文件(多工程)        无
停止编译                                     无
下载软件                                    F8

 

 

 

工程选项

 

 
工程目标选择框                   无
工程目标选项(配置)            Alt + F7

 

 

 


工程项目管理

 

 
单工程管理                       无
多工程管理                       无
管理运行时环境                无
选择软件包                       无
安装软件支持包                无

 

 

 


二、工程配置

 

在上一篇 STM32开发 – 开发环境搭建  里,有进行过配置。但是并没有讲为什么要如此配置,那么接下来讲一下。

 

 

 

1、首先打开目标选项

 

 

 

 

 

2、目标选项介绍

 

如下的界面,我们来逐一介绍一下各个选项。

 

 

 


Device (设备)

 

选择你所使用的芯片类型

 

 

 


Target (项目)

 

 
第1处:晶振频率。
这个值主要用于仿真调试用,一般我们使用硬件调试可以不用管这个值。
第2处:操作系统。
很好理解,是否选择Keil自带的RTX操作系统,一般我们都不选。
第3处:系统预览文件。
这里我们一般是默认使用系统自带,不选择自己定义的。
第4处:使用交叉模块优化、使用微库。
交叉模块一般我们不使用,微库这个功能常用与printf函数。
第5处:ROM存储地址。
这里的ROM存储指的是程序储存的地址,分片外和片内两种。
程序存储在片内好理解(初学者一般下载程序都是下载到片内FLASH),片外存储程序对于初学者来说比较少见,一般都是项目做大了,或有特殊要求时,片内不够使用了才将程序存储在片外。常见使用片外的例子“外部NorFlash存储程序代码”就会用到片外的存储地址。

 

Read/Only MemoryAreas:填写的是程序的存放地址。起始地址:0x800,0000,这款芯片的flash大小为512K,也就是有0x80000个地址空间。 
Read/Write Memory/Areas: 填写的是程序运行起来的内存空间。 
起始地址:0x2000,0000,大小为64K,也就是0x1000个地址空间。 
Flash和Sram的大小是从器件手册上查见的。 
 
第6处:RAM存储地址。
RAM存储地址和ROM道理一样,可以分片内和片外。常见例子“外部SRAM作为运行内存”。

 

 

 

Output(输出)

 

 
第1处:输出路径。
输出路径就是在工程编译的过程中,输出这些文件保存的文件夹。Keil V5一般默认是保存在Objects文件夹下面,我建立工程一般也使用这个默认的路径。【其内容可以全部删除,最好配置在单独一个文件夹下面,代码备份时方便删除】
第2处:输出可执行文件名。
输出的可执行文件和库的名称就是在这里定义。比如我们常见输出Hex文件,其名称就是这里定义的。
第3处:输出可执行文件(重点)。
这里和输出库是二选一,选择了输出可执行文件就不能选择输出库。重要一点:输出这些信息都很费时间,如果都不勾选这些选项,编译速度会很快。

 


Debug Infomation:输出调试信息。勾选上这个选项,我们才可以进行调试。
Create HEX File:输出可执行Hex文件,很多初学的朋友问:“在哪里设置生成Hex?”,这里勾选上就行了。
Browse Information:输出浏览信息。勾选上这个我们才能使用go to definition of这个功能。很多人问:“为什么我不能跟踪代码了”,原因就在这里。
第4处:输出库。
拓展一点:这里输出(生成)的是静态库,并非动态库。初学者可以不用去理解。

 

 

 


Listing(清单)

 

 
第1处:输出路径、宽高。
选择列表文件输出的文件夹。可设置文件页面的宽度,长宽。
第2处:输出汇编列表。
勾选上会输出汇编列表信息(产生后缀为 .lst的文件)。如果工程中没汇编文件,则不会输出信息。
第3处:C编译列表。
C编译程序列表选项,勾选上可生成.txt, .i文件。
第4处:链接列表。
可选择生成或禁止生成.map文件。可设置生成代码的详细信息。可选择性的选取输出MAP文件。

 

 

 

User(用户)

 

 
第1处:编辑之前运行用户程序。
第2处:编译之前运行用户程序。
第3处:编译之后运行用户程序。
如果想生成*.bin格式的文件: 
选中 Run #1,在后边的文本框中输入fromelf.exe –bin -o ./bin/test.bin ./test.axf 
第4处:编译之后执行条件。
Beep When Complete:编译完成发出声音;
Start Debugging:启动调试程序。

 

 

 

C/C++选项

 

 
第1处:预处理(Preprocessor Symbols)
这里主要就是预定义功能,相当于在程序中的#define xxxx。
我上面预定义STM32F10X_HD,在stm32f10x.h文件中就不用定义了。
第2处:语言代码生成(Language / Code Generation)
Language/code Generation语言代码生成,可以理解成编译、链接到最后生成代码。这部分功能对于代码优化比较重要,初学者可以不用过多理解,对代码大小、运行速度等性能要求较高的人就需要深入理解

 


Optimization:优化选择项,有Level0 - Level3四个选项。
【设置编译器命令行:-Onum】
初学者、在线调试建议使用Level0,也就是不优化,这样执行的效果才和代码一样。如果配置成Level3,在线调试可能有些地方优化而不能打断点。
Optimize for Time:优化时间,即优化代码中费时的地方。
【设置编译器命令行:-Otime】 –split_sections
比如有些算法,本身代码量就比较大,运行需要很长时间(假如需要2秒),这个时候勾选上该功能,会发现运行时间有比较明显的减少(或许不到1秒时间)。
Split Load and Store Multiple:加载和存储多个分裂。
【设置编译器命令行:–split_ldm】
非对齐数据采用多次访问方式。当 LMD/STM 指令有 4 个以上产生时,列分裂LMD 和 STM 指令,以减不中断延迟。
One ELF Section per Function:优化每一个函数 ELF 段(建议都勾选上)。
【设置编译器命令行:–split_sections】
每个函数都会产生一个 ELF 段,勾选上,允许优化每一个 ELF 段。这个选项可以减少潜在的共享地址、数据和函数之间的字符串。
直白的意思:可以减少代码量ROM的大小(内存RAM不会减小)。
举一个例子,勾选之前和勾选之后,编译后存储大小对比:
勾选之前:
Program Size: Code=2540 RO-data=336 RW-data=40 ZI-data=1024
勾选之后:
Program Size: Code=908 RO-data=320 RW-data=40 ZI-data=1024
Strict ANSI C:标准(严格)的ANSC。
【设置编译器命令行:–strict】
也就是说:编译时严格按照标准的ANSI C进行检查。
Enum Container always int:枚举总是int型
【设置编译器命令行:–enum_is_int】
很容易理解,我们枚举时成员变量类型为int型。
Plain Char is Signed:纯字符标记为字符。
【设置编译器命令行:–signed_chars】
代码举例:char a[] = “abcd”; 也就是说将“abcd”标记为字符型。
Read-Only Position Independent:为常量生成独立的代码空间。
【设置编译器命令行:–apcs=/ropi】
比如:我们定义字库变量为常量,勾选该选项,会将这些字库变量放在独立的代码空间。
Read-Write Position Independent:为可读写代码生成独立的代码空间。
【设置编译器命令行:–apcs=/rwpi】
Warnings:警告
【No Warnings设置编译器命令行:-W】
No Warnings:不会有警告提示和输出;
All Warnings:所有警告提示和输出。
Thumb Mode:Thumb模式。
指定设置文件或文件夹(组)为Thumb模式。
【注意:在工程中该模式为默认,也就是不能选择】
No Auto Includes:不自动添加头文件(一般不勾选)。
不勾选该选项,编译器就会在Keil安装路径寻找你工程中.h文件。
举例:我们定义uint8_t是定义在stdint.h文件里面的,但是我们工程目录下一般是没有stdint.h文件。这时候,编译器就会在Keil路径下去寻找stdint.h文件。
C99 Mode:C99标准模式。
【设置编译器命令行:–c99】
C语音有标准有多个版本,如C89、C90、C99等。

 


第3处:包含路径(Include Paths)
包含路径是使用Keil(及类似)软件必须掌握的一项。包含路径就是指定我们工程中使用文件所在的位置,让编译器找到相应的文件。是初学者、高级软件工程师都必须掌握的一项。

 


第4处:多功能控件(Misc Controls)
指定没有单独的对话框控件。例如:错误消息用日本语言来显示消息。【不常用】

 

第5处:编译器控制字符串(Compiler control string)
这里是针对编译器执行的命名,显示当前在编译器命令行指令。
在上面“第2处:语言代码生成”中有一个中括号【设置编译器命令行:】
里面的命名就显示在这里。

 

Asm

 

 
第1处:有条件的装配控制符号(Conditional Assembly Control Symbols)
指定汇编条件,这里类似上一章节C/C++选项中的预处理。
第2处:语言代码生成(Language / Code Generation)
- Read-Only Position Independent:为常量生成独立的代码空间。
- Read-Write Position Independent:为可读写代码生成独立的代码空间。
- Thumb Mode:Thumb模式。
- Split Load and Store Multiple:加载和存储多个分裂。
- Execute only Code:只生成执行代码;
- No Auto Includes:不自动添加头文件(一般不勾选)。
第3、4处同上

 

 

 

Linker(连接器)

 

 
第1处:使用分散文件加载对话框Target页面(Use Memory Layout from Target Dialog)

 


Make RW Sections Position Independent:使RW段独立。
【设置编译器命令行:–rwpi】
启用时:变量区域(包含RW和ZI)具有独立地址。
禁用时:变量区域(包含RW和ZI)位于绝对的内存地址。
Make RO Sections Position Independent:使RO段独立。
【设置编译器命令行:–ropi】
启用时:常量和代码区域(RO)具有独立地址。
禁用时:常量和代码区域(RO)位于绝对的内存地址。
Don’t Search Standard Libraries:不搜索标准库。
【设置编译器命令行:–noscanlib】
禁用默认编译器运行时库的扫描。
Report ‘might fail’ Conditions as Errors:报告’might fail’条件认为是错误。
【设置编译器命令行:–strict】
报告的条件可能导致失败的错误,而不是警告。
X/O Base:X/O基地址。
【设置编译器命令行:–xo_base=address】
R/O Base:R/O基地址。
【设置编译器命令行:–ro_base=address】
R/W Base:R/W基地址。
【设置编译器命令行:–rw_base=address】
disable Warnings:警用警告。
【设置编译器命令行:–diag_suppress】
第2处:分散文件(Scatter File)
这里可以加载、查看和编辑分散文件。点击后面就的三点“…”可以加载文件;点击“Edit…”查看和编辑对应的文件。

 

 

 


Debug(调试)

 

 
第1处:选择硬件在线调试
下载调试器的选择不用多说,主要说一下后面“Setting”。
 
很多人常用J-Link下载调试器,而调试STM32时,可以使用四线SWD模式。如果使用J-Link进行SWD调试。这个时候就需要在“Setting”里面选择“SW”模式,如下如:
 
第2处:选择硬件在线调试

 


Load Application at Startup:启动时加载应用程序。
Run to main():程序执行到main()函数。
进入调试模式时,程序自动运行到main函数处。
Initialization File:加载、编辑初始化文件。
第3处:复位调试会话设置(Restore Debug Session Settings)
这里复位设置就是恢复设置的意思,如果勾选上,点击一下“复位”就会恢复到之前的状态。包括:断点Breakpoints、窗口Watch Windows、性能分析器 Performance Analyzer、内存窗口Memory Window、工具箱Toolbox、系统查阅器System Viewer等。
第4处:DLL文件(最好默认)
这里的配置属于Keil自身的配置,最好不要修改。
CPU/Driver DLL - Parameter:CPU驱动文件和参数。
Dialog DLL - Parameter:会话框DLL文件和参数。

 

 

 


Utilities(功能)

 

 
第1处:配置FLASH菜单命名(Configure Flash Menu Command)
这里是二选一选项,一般我们使用上面的“Update Target Driver for Flash Programming”。

 


Use Debug Driver:使用调试驱动。
Update Target Before Debugging:调试之前更新目标。
一般都勾选上,因为我们下载程序之前检测到代码修改了,就会重新编译程序(也就是更新目标)
Setting:设置。
很多人下载程序之后,需要复位一下程序才运行,原因在于没有勾选“Reset and Run”,如下图:
 
再有这里需要注意,选择好自己属于自己的芯片。
我的是STM32F103RC,根据命名规则可知 Flash大小 256K,如果不是还需 add
 

 

 

 

第2处:配置图像文件的处理(Configure Image File Processing)
这个选项我们不常用,感兴趣的朋友可以自行了解一下。

 

 

 

三、软件设置

 

上面这是提了一下,,复制到keil编辑器中的汉字出现乱码。 
接下来,详细看一下 Configuration
这里面,我能想到的地方:TAB首行缩进的、更改字体,其他默认。
所以接下来我们只看一个 Editor 就好了。
 
第1处:General Editor Settings


Encoding:编码方式选择。建议选择 Chinese GB2312
Keil提供十几种编码方式供大家选择,一般我们选择标准的:Dncode in ANSI.
Auto Indent:自动缩进。
 
也就是换行时自动缩进(对齐)功能,提供3个选项。
None:不对对齐,光标每次换行在第一列。
Smart:灵活对齐(常用)。包含大括号自动对齐。
Block:光标对齐于前一行。
Virtual Spaces:虚拟空间。
光标在上下移动时不管有没有“空间”都对齐。也就是说光标可以在任何位置。
View White Space:显示空白(空格)。
也就是显示一个点为空格。
View End of Line:显示结束行。
也就是在行结束位置显示换行符
第5处:C/C++ & ASM & Other File
Use syntax coloring:使用语法颜色。不使用语法就等于txt文本那种纯黑色
Insert spaces for tabs:符插入空格。
Tab Size:Tab符大小。一个Tab符占几个空格。
Show Line Numbers:显示行数。
Use monospaced Font:使用等宽字体。
Open with Outlining:打开伦廓。
---------------------
作者:聚优致成
来源:CSDN
原文:https://blog.csdn.net/qq_29350001/article/details/80396955
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值