历史上的今天
返回首页

历史上的今天

今天是:2025年12月09日(星期二)

正在发生

2022年12月09日 | 【STM32】keil软件常用使用技巧

2022-12-09 来源:zhihu

01. 文本美化

文本美化,主要是设置一些关键字、注释、数字等的颜色和字体。前面我们在介绍 MDK5新建工程的时候看到界面,这是 MDK 默认的设置,可以看到其中的关键字和注释等字体的颜色不是很漂亮,而 MDK 提供了我们自定义字体颜色的功能。我们可以在工具条上点击 (配置对话框)或者Edit->Configuration。

在该对话框中,先设置 Encoding 为:Chinese GB2312(Simplified),然后设置 Tab size 为:4。以更好的支持简体中文(否则,拷贝到其他地方的时候,中文可能是一堆的问号),同时 TAB间隔设置为 4 个单位。然后,选择:Colors&Fonts 选项卡,在该选项卡内,我们就可以设置自己的代码的子体和颜色了。由于我们使用的是C语言,故在Window下面选择:C/C++ Editor Files在右边就可以看到相应的元素了。

字体大小,则可以直接按住:ctrl+鼠标滚轮,进行放大或者缩小,或者也可以在刚刚的配置界面设置字体大小。


用户自定义关键字没有高亮显示,解决办法是同样选择:C/C++Editor Files,在右边的 User Keywords 对话框下面输入你自己定义的关键字。

02. 语法检测和代码提示

MDK5.30的版本,有代码提示与动态语法检测功能,使得 MDK 的编辑器越来越好用了,这里我们简单说一下如何设置,同样,点击 ,打开配置对话框,选择 Text Completion选项卡。

Strut/Class Members,用于开启结构体/类成员提示功能。

Function Parameters,用于开启函数参数提示功能。

Symbols after xx characters,用于开启代码提示功能,即在输入多少个字符以后,提示匹配的内容(比如函数名字、结构体名字、变量名字等),这里默认设置 3 个字符以后,就开始提示。


Dynamic Syntax Checking,则用于开启动态语法检测,比如编写的代码存在语法错误的时候,会在对应行前面出现X图标,如出现警告,则会出现!图标,将鼠标光标放图标上面,则会提示产生的错误/警告的原因。


03. 代码编辑技巧

3.1 TAB键的妙用

首先要介绍的就是 TAB 键的使用,这个键在很多编译器里面都是用来空位的,每按一下移空几个位。如果你是经常编写程序的对这个键一定再熟悉不过了。但是 MDK 的 TAB 键和一般编译器的 TAB 键有不同的地方,和 C++的 TAB 键差不多。MDK 的 TAB 键支持块操作。也就是可以让一片代码整体右移固定的几个位,也可以通过 SHIFT+TAB 键整体左移固定的几个位。


选中一块然后按 TAB 键,你可以看到整块代码都跟着右移了一定距离

3.2 快速定位函数和变量的定义

大家在调试代码或编写代码的时候,一定有想看看某个函数是在那个地方定义的,具体里面的内容是怎么样的,也可能想看看某个变量或数组是在哪个地方定义的等。尤其在调试代码或者看别人代码的时候,如果编译器没有快速定位的功能的时候,你只能慢慢的自己找,代码量比较少还好,如果代码量一大,那就郁闷了,有时候要花很久的时间来找这个函数到底在哪里。型号 MDK 提供了这样的快速定位的功能。只要你把光标放到这个函数/变量(xxx)的上面(xxx 为你想要查看的函数或变量的名字),然后右键,弹出如图所示的菜单栏 :

温馨提示

要先在 Options for Target 的 Output选项卡里面勾选 Browse Information 选项,再编译,再定位,否则无法定位!


很多时候,我们利用 Go to Definition/ Reference 看完函数/变量的定义/申明后,又想返回之前的代码继续看,此时我们可以通过 IDE 的 按钮(Back to previous position)快速的返回之前的位置,这个按钮非常好用!


3.3 快速注释和快速取消注释

在调试代码的时候,你可能会想注释某一片的代码,来看看执行的情况,MDK 提供了这样的快速注释/消注释块代码的功能。也是通过右键实现的。这个操作比较简单,就是先选中你要注释的代码区,然后右键,选择Advanced→Comment Selection 就可以了。


这样就快速的注释掉了一片代码,而在某些时候,我们又希望这段注释的代码能快速的取消注释,MDK 也提供了这个功能。与注释类似,先选中被注释掉的地方,然后通过右键→Advanced,不过这里选择的是 Uncomment Selection。


04. 其它小技巧

4.1 快速打开头文件

在将光标放到要打开的引用头文件上,然后右键选择 Open Document“XXX”,就可以快速打开这个文件了(XXX 是你要打开的头文件名字)。


4.2 查找替换

这个和 WORD 等很多文档操作的替换功能是差不多的,在 MDK 里面查找替换的快捷键是“CTRL+H”。


4.3 跨文件查找功能

先双击你要找的函数/变量名(这里我们还是以系统时钟初始化函数:Stm32_Clock_Init 为例),然后再点击 IDE 上面的 Find in Files。

点击 Find All,MDK 就会帮你找出所有含有GPIO_Init字段的文件并列出其所在位置

该方法可以很方便的查找各种函数/变量,而且可以限定搜索范围(比如只查找.c 文件和.h文件等),是非常实用的一个技巧。


推荐阅读

史海拾趣

Emerson Embedded Power公司的发展小趣事

作为一家具有社会责任感的企业,Emerson Embedded Power积极参与公益事业和社会活动。该公司通过捐赠资金、物资和技术支持等方式,帮助贫困地区的学校和社区改善基础设施和教育条件。同时,公司还积极倡导员工参与志愿服务活动,为社会贡献爱心和力量。

请注意,以上故事是基于Emerson Embedded Power在电子行业中的一般发展情况和特点而编写的概述性故事框架,并非具体的、详细的发展故事。如果需要更详细的信息或故事,建议直接查阅该公司的官方资料或相关新闻报道。

锋鸣电子(Fengming)公司的发展小趣事

福斯特集团(FIRST SEMI)作为另一家以“FIRST”为品牌的企业,在半导体芯片领域也取得了显著成绩。该集团成立于2010年,总部位于中国深圳,是一家集半导体芯片研发、方案设计、封装制造、测试编带、产品销售为一体的国家级高新技术企业。公司产品广泛应用于无人机、机器人、笔记本电脑、液晶电视等多个领域。通过在全球设立代理销售公司,福斯特集团的销售网络覆盖全球多个国家和地区,服务合作客户超过3000家。

爱浦电子(AIPULNION)公司的发展小趣事

面对日益激烈的市场竞争,爱浦电子始终坚持创新驱动的发展战略。公司不断投入研发资金,引进先进技术和设备,推动产品创新和技术升级。同时,爱浦电子还积极探索新的应用领域和市场机会,拓展产品的应用范围。这些创新举措为公司未来的发展奠定了坚实的基础,也为整个电子行业的发展注入了新的活力。

Electro-Mech Components Inc公司的发展小趣事

随着公司业务的不断发展壮大,EMC开始积极实施全球化战略。公司在全球范围内寻找合适的合作伙伴和销售渠道,努力将其产品推向更广阔的市场。通过与国际知名品牌的合作和交流,EMC不断提升自身的品牌形象和市场影响力。同时,公司还加强了对海外市场的调研和分析工作,以便更好地满足不同地区客户的需求和期望。

请注意,以上故事是基于已知信息构建的框架性内容,具体细节和情节需要根据实际情况进行填充和完善。

DIOTEC公司的发展小趣事

多年来,DIOTEC一直致力于半导体技术的研发和创新。公司不断推出具有竞争力的新产品,以满足市场的不断变化。同时,DIOTEC还积极关注行业发展趋势,及时调整产品战略和市场布局。正是这种持续的创新和进取精神,使得DIOTEC能够在竞争激烈的电子行业中保持领先地位。

AnalogicTech公司的发展小趣事

为了进一步扩大市场份额,AnalogicTech积极寻求与全球范围内的合作伙伴建立战略合作关系。公司通过参加国际电子展会、建立海外销售网络等方式,成功将产品推向全球市场。同时,AnalogicTech还加大了对亚洲市场的投入,在香港等地设立了分支机构,进一步提升了公司在全球市场的竞争力。

问答坊 | AI 解惑

这段是在运算什么?

有哪位高手能看懂下边程序在做什么? MOV   A,4AH                        MOV   R0,A           &n ...…

查看全部问答>

C++ 设备驱动 交互

在做C++编程的时候,常常要用到和摄像头什么的做信息采集 这时候常常会需要得到系统设备驱动,这是如何做到的,设备驱动号是什么东西,怎么用啊? 系统的设备是不是都是统一编号的? 设备驱动是如何在系统中存储和使用的啊?…

查看全部问答>

无法卸载驱动模块

把驱动装到开发板上后无法卸载,执行rmmod my_bdri.ko后提示: rmmod: chdir(2.6.29.4-FriendlyARM): No such file or directory 执行lsmod: [root@FriendlyARM /]# lsmod my_bdri 3348 0 - Live 0xbf000000 该怎么办啊????…

查看全部问答>

研华PCL 816

第一次调试板卡,我想了解一下板卡是怎么初始化的,还有通道的选择以及AD转化的触发,数据的读取等。 为什么每次读取AD数据后,BASE+13的DRDY位仍为0啊?…

查看全部问答>

关于电源问题

隔离变压器:额定功率50W,3个绕组变比n1:n2:n3=20:10:1,电流依次为I1=1.5A、I2=3A、I3=0.1A 电阻器: 30Ω/30W,36Ω/30W   这是09年电子竞赛中的元件,大家帮猜猜会出什么样的电源题 …

查看全部问答>

winCE能否生成类似DLL的第三方程序供他人调用?

如题 因为我是初学者 但公司的新项目是做一个外包 而这个外包是在手机平台上运行的 所以来问问是否有相关参考文档 多谢达人指点~~~~~~…

查看全部问答>

阻塞与非阻塞语句的区别

module DataBusOfBus(DataBus,link_bus,write); inout[11:0] DataBus; input link_bus; reg [11:0] outsigs;   assign DataBus=(link_bus)?outsigs:12\'hzzz;   always @(posedge write)       &n ...…

查看全部问答>

想要多少个跑马灯?用74hc595来扩展输出口

  先用两片扩出16个输出,不够还可以再增加     grace生成的USI初始化,还用翻译么?   /* *  ======== USI_init ======== *  Initialize Universal Serial Interface */void USI_init(void){& ...…

查看全部问答>

【lauchpad_g2231】关于OUTMOD1置位后复位问题?

g2231资源有限,只有一个timer_A2,用过的都知道,只有两个比较器。但是我想生成两路pwm波,必然用OUTMOD7的话只能产生一路,所以我用想用OUTMOD1自动置位的方法,taccr0,taccr1控制占空比产生两路,通过看门狗定时做pwm周期控制(在定时中断 ...…

查看全部问答>

关于Xilinx调用IPcore 与 原语的区别

Xilinx FPGA中有的可以通过原语(Primitives)调用来例化一些特殊功能,比如: ODDR2、IOBUF、ISERDES2、OSERDES2等。   有的可以用IP core来例化一些特殊功能,比如: DCM、加法/减法器 等。   有两个问题想跟各位高手讨论: &nb ...…

查看全部问答>