STM32开发 -- Keil使用(1)

发布者:影子猎人最新更新时间:2019-07-26 来源: eefocus关键字:STM32开发  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:打开伦廓。


关键字:STM32开发  Keil使用  工程调试 引用地址:STM32开发 -- Keil使用(1)

上一篇:使用gcc工具链进行Linux环境下的stm32开发
下一篇:STM32L4开发笔记(1):开发环境搭建

推荐阅读最新更新时间:2024-11-09 16:53

讲讲开发STM32的四种库
1.我是选择寄存器开发STM32,还是标准外设库呢? 2.你有STM32L0标准外设库吗? 3.HAL库和LL库有什么差异? 下面就来讲讲开发STM32的四种库: STM32Snippets Standard Peripheral Library STM32Cube LL STM32CubeHAL 1、STM32Snippets 什么是STM32Snippets? STM32Snippets可翻译为“代码片段”、“裁剪”,其实他就是我们常说的“寄存器”开发STM32的底层驱动代码。 比如配置ADC引脚的代码片段: __INLINE void ConfigureGPIOforADC(void) { /* (1) Enable
[单片机]
讲讲<font color='red'>开发</font><font color='red'>STM32</font>的四种库
如何使用Keil3开发51单片机程序
1.双击图标打开Keil软件 2.单击菜单栏 - 3.将新工程保存到一个文件夹 4.选择一款 CPU 芯片,这里STC89C52RC对应着Philips的P89V51RD2 5.提示是否复制8051的启动代码到文件夹,这里选择“否” 6.完成后,在Project Workspace中可以看到Source Group1 7.新建一个代码文件 8.以“*.c”作为后缀名保存 9.将刚刚保存的文件 led .c添加到工程中来 10.选中源代码文件,添加 11.可以看到led.c已经在Source Group1中 12.添加代码如下 13.单击 工具 栏上的“Op
[单片机]
如何<font color='red'>使用</font><font color='red'>Keil</font>3<font color='red'>开发</font>51单片机程序
基于STM32的USB程序开发笔记(四)——USB设备的枚举(上)
USB设备能否工作,枚举步骤,用“乡村爱情”里的话说,“必须的!”,网上也有很多资料,圈圈就提供了一份详细的枚举过程,但对STM32是怎么响应的没有说明,一会详细道来,先上圈圈的提供的那个枚举图示,希望圈圈支持,如果不妥,请与我联系,谢谢。 我将此转换成了PDF文件,方便查看。 首先说明一个变量,定义在usb_core.c中: volatile DEVICE_INFO vsDeviceInfo; 看意思就知道他的作用了,DEVICE_INFO是个结构,定义在usb_type.h中: // ********************************************************************
[单片机]
使用LLVM-embedded-toolchain-for-Arm-17.0.1开发STM32
LLVM-embedded-toolchain-for-Arm 是一个 ARM 公司开源的适用于 32 位ARM芯片的工具链,支持多种ARM指令集架构,包括最新的 CM85 内核。由于是基于 LLVM 和 picolibc构建出的工具链,因此在代码体积和执行效率上都很有竞争力,甚至可以和商用闭源的工具链进行 PK。 支持的架构 Armv6-M Armv7-M Armv7E-M Armv8-M Mainline Armv8.1-M Mainline Armv4T (experimental) Armv5TE (experimental) Armv6 (experimental, using the Armv5TE library v
[单片机]
一文搞懂STM32开发用的HAL库
前言   相比较早几年使用标准库开发来讲,最近几年HAL库的使用是越来越多,那么我们开发应当使用哪一种呢,本文着重介绍常用的几种开发方式及相互之间的区别,白猫也好、黑猫也好,抓到耗子就是好猫。 STM32三种开发方式   通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的。一般大多数都会选用标准库和HAL库,而极少部分人会通过直接配置寄存器进行开发。   网上关于标准库、HAL库的描述相信是数不胜数。可是一个对于很多刚入门的朋友还是没法很直观的去真正了解这些不同开发发方式彼此之间的区别,所以笔者想以一种非常直白的方式,用自己的理解去将这些东西表述出来,
[单片机]
一文搞懂<font color='red'>STM32</font><font color='red'>开发</font>用的HAL库
STM32开发板JLINK调试步骤
STM32调试步骤 调试前,首先跳线J9的2-3脚短接,跳线J4的右边两个脚短接,跳线J5短接,J8短接,J2的1-2短接,3-4短接。 将Jlink与学习板,USB延长线与学习板,串口延长线与学习板(或者USB转串口线与学习板)连接起来, 这时LED灯LED5,LED6都应该点亮,如果不亮,说明板子有问题。 打开串口助手,按照如下设置: 1、从桌面打开J-Flash ARM V4.02如图所示。 也可以按照如下顺序打开J-Flash ARM 。 “开始à程序àSEGGERàJ-Link ARM V4.02àJ-Flash ARM”,如下图所示。 2、打开J-Flash ARM后,先进行芯片选项设置,打开Optio
[单片机]
STM32开发笔记19: STM32CubeMX中定时器的配置方法
本文介绍在STM32CubeMX进行定时器的配置,产生固定时间中断的方法,以TIM2为例,步骤如下: 1、使能TIM2,指定时钟源。 2、查看数据手册,确定该定时器的内部数据总线,本文所引用的定时器内部数据总线为APB1。 3、在时钟配置中确认所选定时器的内部数据总线的时钟频率,我这里是32MHz。 4、在配置页中,选中相应的时钟,在Prescaler中输入预分频系数,在Counter Period中输入溢出系数。例如,本例中时钟为32MHz/32=1MHz,也就是一个周期为1us,我选择溢出系数为1000,则产生中断的时间为1ms。在Prescaler中输入总线频率的整数部分
[单片机]
<font color='red'>STM32</font><font color='red'>开发</font>笔记19: STM32CubeMX中定时器的配置方法
stm32使用MDK开发中的一些常见问题
1. 解决:keil报错invalid redeclaration of type name s32 答案:一般在Target Options C/C++选项卡里的Include Paths 里要添加几个固定的头文件路径, ..CMSISCM3CoreSupport ..CMSISCM3DeviceSupportSTSTM32F10x ..STM32F10x_StdPeriph_Driverinc ..userinc 是头文件路径问题,KEIL只要有一个头文件找不到,就会自已从本身的INC文件夹找头文件,结果就会出现以上错提示。把老版的头文件改为STM32F10X.H. 新的库已经把.CONF.MAP.TYPE
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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