资讯详情

【正点原子MP157连载】第四章 STM32初体验-摘自【正点原子】STM32MP1 M4裸机CubeIDE开发指南

1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码 手册 视频下载地址:http://www.openedv.com/thread-318813-1-1.html 4)正点原子官方B站:https://space.bilibili.com/394620890 5)正点原子STM32MP157技术交流群:691905614 在这里插入图片描述

第四章 STM32初体验

本章,我们不介绍如何编写代码,而是介绍如何编译、串口下载、模拟器下载、模拟调试开发板例程,体验STM并介绍了32的开发过程MDK通过本章的学习,5的一些使用技巧将是正确的STM开发过程和32MDK使用有一个大致的了解,为后续深入学习打下良好的基础。 本章将分为以下几个部分: 4.1、使用MDK5编译例程; 4.2、使用ST LINK下载调试程序; 4.3、MDK5使用技巧; 4.4、DAP仿真器和无线调试器的使用; 4.1 使用MDK5编译例程 编写代码后,我们需要编译代码。编译成功后,我们可以在开发板上进行模拟验证和调试。STM32MP157开发板M裸机例程源码路径:开发板光盘1,程序源码3M4裸机驱动例程MP157-M4 HAL库V1.1.zip,如图4.1.1所示:

图4.1.1 STM32MP157开发板M4裸机例程源码 对图4.1.1中的“MP157-M4 HAL库V1.1压缩包解压,得到HAL如图4所示.1.2所示:

图4.1.2 M4裸机HAL库例程 STM32MP157 M裸机例程有40个,部分实验有多个例程,如通用定时器实验、高级定时器实验、ADC实验等。本着简单易懂的原则,我们选择了实验3 HAL作为库跑马灯实验STM32入门体验,例程目录如图4所示.1.3所示:

图4.1.3 跑马灯例程目录结构 项目目录下有5个文件夹,我们将在后续工作中HAL库跑马灯实验这一章详细介绍了它的功能(其实看文件夹名字的字面意思基本就知道用什么了),这里就不多说了。MDK工程文件的路径如下:ProjectsMDK-ARM atk_mp1_m4.uvprojx,如图4.1.4所示:

图4.1.4 跑马灯实验例程MDK工程 注意:一定要先安装MDK5(详见第三章),否则工程文件无法打开! 双击atk_mp1_m4.uvprojx打开工程文件,进入MDK IDE界面,如图4.1.5所示:

图4.1.5 MDK打开跑马灯实验例程 ①、它是一个编译按钮,表示当前项目文件的编译。如果以前已经编译过,则只会编译更改的文件。因此,第一次通常需要更多的时间,随后只编译更改文件,这大大缩短了编译时间。按钮可以通过F7快捷键操作。 ②、重新编译当前工程的所有文件按钮。当工程代码较多时,重新编译需要更多的时间。建议少用。 按①编译当前项目后,可以看到图4.1.6.编译提示信息:

图4.1.6 编译提示信息 图4.1.6中: Code:代码大小,占1984字节。 RO-Data:表示只读数据占用的空间大小一般是指const修改的数据大小。 RW-Data:表示有初值(且非0)的可读写数据所占的空间大小,它同时占用FLASH(存放其初始值)和RAM空间。 ZI-Data:它只占读写数据初始化为0的空间大小,只占用RAM空间。 因此图4.1.6提示信息显示:代码总大小(Porgram Size)为:FLASH(对于STM32MP157 M4来说都是在RAM中,因为M4没有可用的FLASH)占用2988字节(Code RO RW),RAM占用33920字节(RW ZI)。编译成功后,会创建相应的Hex文件(可执行文件)Output编译过程中有0个错误,0个警告;编译需要50秒。 编译完成后,将生成.hex和.axf默认输出这两个文件Output文件夹,如图4所示.1.7所示:

图4.1.7 hex和axf可执行文件 注:必须成功编译才能生成.hex和.axf这两个文件! .hex:这个格式是一个带有地址信息的可执行文件,里面有Flash的STM32单片机,通过MDK下载到单片机的程序是.hex文件。对于STM32MP157的M就4内核而言,因为内部没有Flash,因此atk_mp1_m4.hex这个文件没用! .axf:此格式是带有调试信息的文件,点击MDK本文件使用调试按钮,STM32MP157的M4内核只能用于调试atk_mp1_m4.axf。 .bin:图4.1.7中并没有此格式的文件,因为MDK配置后才能使用.axf来生成.bin文件。.bin是最原始的代码镜像文件,STM32MP157的A7内核启动M使用4内核时,需要使用4内核.bin文件。 Output除了文件夹.hex和.axf除了这两个文件,还有许多其他文件(.axf、.htm、.dep、.lnp、.o、.d、.lst等),这些文件是编译过程中产生的中间文件,我们将在后续工作.map文件分析详细介绍了这些文件的作用。到目前为止,例程编译已经完成。你可以用同样的方法编译其他实验例程。 4.2 使用ST LINK下载和调试程序 本节我们将介绍如何使用仿真器STM32下载代码并调试代码。我们在这里ST LINK例如,如果你使用其他模拟器,它基本上是相同的,只是在选择模拟器时,选择相应的型号。 ST LINK如图4所示.2.1所示:

图4.2.1 ST LINK连接开发板 ①、ST LINK通过USB电缆连接到计算机,模拟器的红灯经常亮(如果红灯闪烁,则表示没有安装驱动器,请参考3.三节安装模拟器驱动)。然后用10P灰线连接到开发板JTAG座上。 ②、确保开发板正常供电,蓝色电源灯亮起。 ③、BOOT设置为001,设置为001MCU启动,即M4内核启动。BOOT拨码开关拨1,拨0。 4.2.1 MDK工程调试设置 在模拟之前,通常需要MDK项目设置,虽然正点原子的所有例程都设置好了,用户不需要再设置,可以直接调试,但这里还是需要解释如何设置调试MDK工程。 在4.一节跑马灯例程MDK IDE点击界面下的按钮打开Options for Target选项卡,在Debug栏选择仿真工具use:ST-Link Debugger,如图4.2.1.1所示:

图4.2.1.1 Debug选项卡设置 ①、选择使用ST-Link Debugger仿真器仿真调试代码。如果使用其他仿真器,如DAP、JLINK、ULINK请在这里选择相应的模拟器型号。 ②、选择选项后,只需点击仿真即可直接运行main函数如果没选择这个选项,则会先执行startup_stm32mp15xx.s文件的Reset_Handler,再跳到main函数。 然后我们点击图4.2.1.1中Settings按钮,设置ST LINK的一些参数,如图4.2.1.2所示:

图4.2.1.2 ST LINK模式设置 ①、表示MDK找到了ST-LINK/V2仿真器,如果这里显示为空,则表示没有仿真器被找到,请检查你的电脑是否接了仿真器?并安装了对应的驱动? ②、设置接口方式,这里选择SW(比JTAG省IO),通信速度设置为4Mhz(MDK会自动匹配)。 ③、表示MDK通过仿真器的SW接口找到了目标芯片,ID为:0x6BA02477。如果这里显示:No target connected,则表示没找到任何器件,请检查仿真器和开发板连接是否正常?开发板是否供电了?如果一切都正常,但还是提示No target connected,点击图4.2.1.2中的“Pack”标签,如图4.2.1.3所示:

图4.2.1.3 Pack设置 勾选图4.2.1.3中的“Enable”,然后重新点击“Debug”标签,查看图4.2.1.2中③的芯片ID有没有识别出来。如果识别出来以后就重新点击“Pack”,然后取消图4.2.1.3中刚刚勾选的 “Enable”,否则无法仿真,如图4.2.1.4所示。

图4.2.1.4 Pack设置 其他部分使用默认设置,设置完成以后单击“确定”按钮,完成此部分设置,接下来我们还需要在Utilities选项卡里面设置下载时的目标编程器,如图4.2.1.5所示:

图4.2.1.5 编程器选择 ①、勾选“Use Debug Driver”,选择ST LINK来调试、下载。 ②、“Update Target before Debuggin”顾名思义,就是在调试之前先将代码下载到目标器件中,由于STM32MP157 M4没有内部Flash,因此绝对不能勾选此选项!否则仿真就会失败,对于那些内置Flash的STM32单片机需要勾选此选项。 ③、对于内置Flash的STM32单片机,还需要设置烧写算法,STM32MP157 M4内核不需要设置这一步。 这里要注意的是,如果有将ST LINK放在STM32CubeIDE上使用的话,再将ST LINK放到MDK下使用时,这个时候要更新ST LINK的固件后才可以进行仿真调试,否则可能存在进入仿真界面时报如下的错:

图4.2.1.6进入仿真界面提示的信息 解决办法就是按照前面第3.4 更新ST LINK固件 小节部分的操作步骤进行更新固件。 至此,调试之前的工程设置就完成了,下面我们开始进入仿真界面。 4.2.2 使用ST LINK仿真调试程序 在正常编译完例程以后(0错误,0警告),点击: (开始/停止仿真按钮)开始仿真,此时MDK会将代码加载芯片的指定存储区域,对于内置Flash的STM32单片机而言,就是代码下载到内部Flash中。对于STM3MP157而言就是将代码加载到STM32MP157内部指定的SRAM内存空间,注意的是,不要点击keil的下载按钮,因为M4没有Flash,所以是无法将程序下载到Flash的,点击下载按钮后会报错Error:Flash Download failed -“Cortex-M4”。 点击:以后,如图4.2.2.1所示:

图4.2.2.1 开始仿真 ①、Register:寄存器窗口,显示了Cortex-M4内核寄存器R0R15的值,还显示了内部的线程模式(处理者模式、线程模式)及特权级别(用户级、特权级),并且还显示了当前程序的运行时间(Sec),该选项卡一般用于查看程序运行时间,或者比较高级的bug查找(涉及到分析R0R14数据是否异常了)。 ②、Disassembly:反汇编窗口,将C语言代码和汇编对比显示(指令存放地址,指令代码,指令,具体操作),方便从汇编级别查看程序运行状态,同样也属于比较高级别的bug查找。 ③、代码窗口,在左侧有黄绿色三角形,黄色的三角形表示将要执行的代码,绿色的三角形表示当前光标所在代码(C代码 或 当前汇编行代码对应的C代码)。一般情况下,这两个三角形是同步的,只有在点击光标查看代码的时候,才可能不同步。 ④、Call Stack + Locals:调用关系&局部变量窗口,通过该窗口可以查看函数调用关系,以及函数的局部变量,在仿真调试的时候,是非常有用的。 开始仿真的默认窗口就给大家介绍这几个,实际上还有一些其他的窗口,比如Watch、Memory、外设寄存器等也是很常用的,可以根据实际使用选择调用合适的窗口来查看对应的数据。 图4.2.2.1中,还有一个很重要的工具条:Debug工具条,其内容和作用如图4.2.2.2所示

图4.2.2.2 Debug工具条 复位:其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。按下该按钮之后,代码会重新从头开始执行。 执行到断点处:该按钮用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的,而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是你在查看的地方设置了断点。 停止运行:此按钮在程序一直执行的时候会变为有效,通过按该按钮,就可以使程序停止下来,进入到单步调试状态。 执行进去:该按钮用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的。 执行过去:在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行。 执行出去:该按钮是在进入了函数单步调试的时候,有时候可能不必再执行该函数的剩余部分了,通过该按钮就可以一步执行完该函数的余部分,并跳出函数,回到函数被调用的位置。 执行到光标处:该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个。 反汇编窗口:通过该按钮,就可以查看汇编代码,这对分析程序很有用。 Call STACK窗口:通过该按钮,显示调用关系&局部变量窗口,显示当前函数的调用关系和局部变量,方便查看,对分析程序非常有用。 观察窗口:MDK5提供2个观察窗口(下拉选择),该按钮按下,会弹出一个显示变量的窗口,输入你所想要观察的变量/表达式,即可查看其值,是很常用的一个调试窗口。 内存查看窗口:MDK5提供4个内存查看窗口(下拉选择),该按钮按下,会弹出一个内存查看窗口,可以在里面输入你要查看的内存地址,然后观察这一片内存的变化情况。是很常用的一个调试窗口 串口打印窗口:MDK5提供4个串口打印窗口(下拉选择),该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容。 系统分析窗口:该图标下面有6个选项(下拉选择),我们一般用第一个,也就是逻辑分析窗口(Logic Analyzer),点击即可调出该窗口,通过SETUP按钮新建一些IO口,就可以观察这些IO口的电平变化情况,以多种形式显示出来,比较直观。 系统查看窗口:该按钮可以提供各种外设寄存器的查看窗口(通过下拉选择),选择对应外设,即可调出该外设的相关寄存器表,并显示这些寄存器的值,方便查看设置的是否正确。 Debug工具条上的其他几个按钮用的比较少,我们这里就不介绍了。以上介绍的是比较常用的,当然也不是每次都用得着这么多,具体看你程序调试的时候有没有必要观看这些东西,来决定要不要看。 我们在图4.2.2.1的基础上:关闭反汇编窗口(Disassembly)、添加观察窗口1(Watch1)。然后调节一下窗口位置,然后将全局变量:SystemCoreClock(HAL库提供的,记录内核时钟频率)加入Watch1窗口(方法:双击Enter expression,然后将变量名字填写进去即可),如图4.2.2.3所示:

图4.2.2.3 开始仿真 此时可以看到Watch1窗口的SystemCoreClock值为0X03D09000=64000000,说明此时STM32MP157 M4内核频率为64MHz。我们把鼠标光标放在第13行左侧的灰色区域,然后按下鼠标左键,即可放置一个断点(红色的实心点,也可以通过鼠标右键弹出菜单来加入),这样就在led_init函数处放置一个断点,然后点击:,执行到该断点处,然后再点击:,执行进入led_init函数,如图4.2.2.4所示:

图4.2.2.4 执行进入led_init函数 然后我们再回到main.c,在第一个LED0(0)处放置一个断点,运行到断点处,如图4.2.2.5所示:

图4.3.2.5 运行到LED0(0)代码处 此时,我们点击:,执行过这一行代码,就可以看到开发板上的DS0(红灯)亮起来了,以此继续点击,依次可以看到:DS0灭DS1亮DS0亮DS1灭DS0灭DS1亮……,一直循环。这样如果全速运行,就可以看到DS0,DS1交替亮灭,不过全速运行的时候,一般是看不出DS0和DS1全亮的情况的,而通过仿真,我们就可以很容易知道有DS0和DS1同时亮的情况! 最后,我们在delay.c文件中delay_short函数的第二行处设置一个断点,然后运行到断点处,如图4.2.2.6所示:

图4.3.2.6 查看函数调用关系及局部变量 此时,我们可以从Call Stack + Locals窗口看到函数的调用关系,其原则是:从下往上看,即下一个函数调用了上一个函数,因此,其关系为:main函数调用了delay函数,然后delay函数调用了delay_short函数。这样在一些复杂的代码里面(尤其是第三方代码),可以很容易捋出函数调用关系并查看其局部变量的值,有助于我们分析代码解决问题。 关于ST LINK的仿真调试,我们暂时就讲这么多。 4.2.3 仿真调试注意事项 1、由于MDK5.23以后对中文支持不是很好,具体现象是:在仿真的时候,当有断点未清除时点击结束仿真,会出现如图4.2.3.1所示的报错:

图4.2.3.1 仿真结束时报错! 此时我们点击确定,是无法关闭MDK的,只能到电脑的任务管理器里面强制结束MDK,才可以将其关闭,比较麻烦。 该错误就是由于MDK5.23以后的版本对中文支持不太好导致的,这里提供2个解决办法: (1)、仿真结束前将所有设置的断点都清除掉,可以使用File工具栏的:按钮,快速清除当前工程的所有断点,然后再结束仿真,就不会报错; (2)、将工程路径改浅,并改成全英文路径(比如,将源码拷贝到:E盘Source Code文件夹下。注意:例程名字一般可以不用改英文,因为只要整个路径不超过10个汉字,一般就不会报错了,如果还报错就再减少汉字数量)。通过这两个方法,可以避免仿真结束报错的问题。我们推荐大家使用第二种方法,因为这样就不用每次都全部清除所有断点,下回仿真又得重设的麻烦。 2、关于STM32软件仿真,老版本的教程,我们给大家介绍过如何使用MDK进行STM32软件仿真,由于其限制较多(只支持部分F1型号),而且仿真器越来越便宜,硬件仿真更符合实际调试需求,调试效果更好。所以后续我们只介绍硬件仿真,不再推荐大家使用软件仿真了! 3、仿真调试找bug是一个软件工程师必备的基本技能。MDK提供了很多工具和窗口来辅助我们找问题,只要多使用,多练习,肯定就可以把仿真调试学好。这对我们后续的独立开发项目,非常有帮助。因此极力推荐大家多练习使用仿真器查找代码bug,学会这个基本技能。 4、调试代码不要浅尝辄止,要想尽办法找问题,具体的思路:先根据代码运行的实际现象分析问题,确定最可能出问题的地方,然后在相应的位置放置断点,查看变量,查看寄存器,分析运行状态和预期结果是否一致?从而找到问题原因,解决bug。特别提醒:一定不要浅尝辄止,很多朋友只跟踪到最上一级函数,就说死机了,不会跟踪进去找问题!所以一定要一层层进入各种函数,越是底层(甚至汇编级别),越好找到问题原因。 4.3 MDK5使用技巧 本节,我们将向大家介绍MDK5软件的一些使用技巧,这些技巧在代码编辑和编写方面会非常有用,希望大家好好掌握,最好实际操作一下,加深印象。 4.3.1 文本美化 文本美化,主要是设置一些关键字、注释、数字等的颜色和字体。如果你刚装MDK,没进行字体颜色配置,以跑马灯例程为例,你的界面效果如图4.3.1.1所示:

图4.3.1.1 MDK默认配色效果 上图是MDK默认的设置,可以看到其中的关键字和注释等字体的颜色不是很漂亮,而MDK提供了我们自定义字体颜色的功能。我们可以在工具条上点击 (配置对话框)弹出如图4.3.1.2所示界面:

图4.3.1.2置对话框 ①、设置代码编辑器字体使用:Chinese GB2312(Simplified),以更好的支持中文。 ②、设置编辑器的空格可见:View White Space,所有空格使用“.”替代,TAB使用“”替代,这样可以方便我们对代码进行对齐操作。同时,我们推荐所有的对齐都用空格来替代,这样在不同软件之间查看源代码,就不会引起由于TAB键大小不一样导致代码不对齐的问题,方便使用不同软件查看和编辑代码。 ③、设置C/C++文件,TAB键的大小为4个字符,且字符使用空格替代(Insert spaces for tabs)。这样我们在使用TAB键进行代码对齐操作的时候,都会用空格替代,保证不同软件使用代码都可以对齐。 然后,选择:Colors & Fonts选项卡,在该选项卡内,我们就可以设置自己的代码的字体和颜色了。由于我们使用的是C语言,故在Window下面选择:C/C++ Editor Files在右边就可以看到相应的元素了。如图4.3.1.3示:

图4.3.1.3 Colors & Fonts选项卡 然后点击各个元素(Element)修改为你喜欢的颜色(注意双击,且有时候可能需要设置多次才生效,MDK的bug),当然也可以在Font栏设置你字体的类型,以及字体的大小等。 然后,点击User Keywords选项卡,设置用户定义关键字,以便用户自定义关键字也显示对应的颜色(对应图4.4.1.3中的User Keyword/Lable颜色)。在User Keywords选项卡对话框下面输入你自己定义的关键字,如图4.3.1.4示:

图4.3.1.4 用户自定义关键字 这里我们设置了uint8_t、uint16_t和uint32_t等三个用户自定义关键字,相当于unsigned char、unsigned short和unsigned int。如果你还有其他自定义关键字,在这里添加即可。设置成之后,点击OK,就可以在主界面看到你所修改后的结果,例如我修改后的代码显示效果如图4.3.1.5示:

图4.3.1.5设置完后显示效果 这就比开始的效果好看一些了。字体大小,则可以直接按住:ctrl+鼠标滚轮,进行放大或者缩小,或者也可以在刚刚的配置界面设置字体大小。 同时,上图中可以看到空白处有很淡的一些“……”显示,这就是我们勾选了View White Space选项后体现出来的效果,可以方便我们对代码进行规范对齐整理。一开始看的时候可能有点不习惯,看多了就习惯了,大家慢慢适应就好了。 其实在这个编辑配置对话框里,还可以对其他很多功能进行设置,比如动态语法检测等,我们将4.3.2节介绍。 4.3.2 语法检测&代码提示 MDK4.70以上的版本,新增了代码提示与动态语法检测功能,使得MDK的编辑器越来越好用了,这里我们简单说一下如何设置,同样,点击,打开配置对话框,选择Text Completion选项卡,如图4.3.2.1所示:

图4.3.2.1 Text Completion选项卡设置 图4.3.2.1中的“Show Code Completion List For”标签中有4个选项: Strut / Class Members:用于开启结构体/类成员提示功能。 Function Parameters:用于开启函数参数提示功能。 Symbols after xx characters:用于开启代码提示功能,即在输入多少个字符以后,提示匹配的内容(比如函数名字、结构体名字、变量名字等),这里默认设置3个字符以后,就开始提示。如图4.3.2.2所示:

图4.3.2.2 代码提示 ENTER/TAB as fill-up character:使用回车和TAB键填充字符。 图4.3.2.1中左侧下面的“Dynamic Syntax Checking”则用于开启动态语法检测,比如编写的代码存在语法错误的时候,会在对应行前面出现图标,如出现警告,则会出现图标,将鼠标光标放图标上面,则会提示产生的错误/警告的原因,如图4.3.2.3所示:

图4.3.2.3 语法动态检测功能 这几个功能,对我们编写代码很有帮助,可以加快代码编写速度,并且及时发现各种问题。不过这里要提醒大家,语法动态检测这个功能,有的时候会误报(比如sys.c里面,就有误报),大家可以不用理会,只要能编译通过(0错误,0警告),这样的语法误报,一般直接忽略即可。 4.3.3 代码编辑技巧 这里给大家介绍几个我常用的技巧,这些小技巧能给我们的代码编辑带来很大的方便,相信对你的代码编写一定会有所帮助。 1、TAB键的妙用 首先要介绍的就是TAB键的使用,这个键在很多编译器里面都是用来空位的,每按一下移空几个位。如果你是经常编写程序的对这个键一定再熟悉不过了。但是MDK的TAB键和一般编译器的TAB键有不同的地方,和C++的TAB键差不多。MDK的TAB键支持块操作。也就是可以让一片代码整体右移固定的几个位,也可以通过SHIFT+TAB键整体左移固定的几个位。 假设现在有一段代码如图4.3.3.1所示:

图4.3.3.1 头大的代码 上图的代码很不规范,这还只是短短25来行代码,如果你的代码有几千行,全部是这个样子,不头大才怪。这时我们就可以通过TAB键的妙用来快速修改为比较规范的代码格式。 选中一块然后按TAB键,你可以看到整块代码都跟着右移了一定距离,如图4.3.3.2所示:

图4.3.3.2 代码整体偏移 接下来我们就是要多选几次,然后多按几次TAB键就可以达到迅速使代码规范化的目的,最终效果如图4.3.3.3所示

图4.3.3.3 修改后的代码 图4.3.3.3中的代码相对于图4.3.3.1中的要好看多了,经过这样的整理之后,整个代码一下就变得有条理多了,看起来很舒服。 2、快速定位函数/变量被定义的地方 上一节,我们介绍了TAB键的功能,接下来我们介绍一下如何快速查看一个函数或者变量所定义的地方。 大家在调试代码或编写代码的时候,一定有想看看某个函数是在那个地方定义的,具体里面的内容是怎么样的,也可能想看看某个变量或数组是在哪个地方定义的等。尤其在调试代码或者看别人代码的时候,如果编译器没有快速定位的功能的时候,你只能慢慢的自己找,代码量比较少还好,如果代码量一大,那就郁闷了,有时候要花很久的时间来找这个函数到底在哪里。型号MDK提供了这样的快速定位的功能。只要你把光标放到这个函数/变量(xxx)的上面(xxx为你想要查看的函数或变量的名字),然后右键,弹出如图4.3.3.4所示的菜单栏 :

图4.3.3.4 快速定位 在图4.3.3.4中,我们找到Go to Definition Of‘led_init’,然后单击左键就可以快速跳到led_init函数的定义处(注意要先在Options for Target的Output选项卡里面勾选Browse Information选项,再编译,再定位,否则无法定位!)。如图4.3.3.5所示:

图4.3.3.5 定位结果 对于变量,我们也可以按这样的操作快速来定位这个变量被定义的地方,大大缩短了你查找代码的时间。 很多时候,我们利用Go to Definition看完函数/变量的定义后,又想返回之前的代码继续看,此时我们可以通过IDE上的按钮(Back to previous position)快速的返回之前的位置,这个按钮非常好用! 3、快速注释与快速消注释 接下来,我们介绍一下快速注释与快速消注释的方法。在调试代码的时候,你可能会想注释某一片的代码,来看看执行的情况,MDK提供了这样的快速注释/消注释块代码的功能。也是通过右键实现的。这个操作比较简单,就是先选中你要注释的代码区,然后右键,选择AdvancedComment Selection就可以了。 以led_init函数为例,比如我要注释掉下图中所选中区域的代码,如图4.3.3.6所示:

图4.3.3.6 选中要注释的区域 我们只要在选中了之后,选择右键,再选择AdvancedComment Selection就可以把这段代码注释掉了。执行这个操作以后的结果如图4.3.3.7所示:

图4.3.3.7 注释完毕 这样就快速的注释掉了一片代码,而在某些时候,我们又希望这段注释的代码能快速的取消注释,MDK也提供了这个功能。与注释类似,先选中被注释掉的地方,然后通过右键Advanced,不过这里选择的是Uncomment Selection。 4.3.4 其他小技巧 除了前面介绍的几个比较常用的技巧,这里还介绍几个其他的小技巧,希望能让你的代码编写如虎添翼。 第一个是快速打开头文件。在将光标放到要打开的引用头文件上,然后右键选择Open Document“XXX”,就可以快速打开这个文件了(XXX是你要打开的头文件名字)。如图4.3.4.1所示:

			         图4.3.4.1 快速打开头文件

第二个小技巧是查找替换功能。这个和WORD等很多文档操作的替换功能是差不多的,在MDK里面查找替换的快捷键是“CTRL+H”,只要你按下该按钮就会调出如图4.3.4.2所示界面:

图4.3.4.2 替换文本 这个替换的功能在有的时候是很有用的,它的用法与其他编辑工具或编译器的差不多,相信各位都不陌生了,这里就不啰嗦了。 第三个小技巧是跨文件查找功能,先双击你要找的函数/变量名(这里以系统时钟初始化函数:led_init为例),然后再点击IDE上面的,弹出如图4.3.4.3所示对话框:

图4.3.4.3 跨文件查找 点击Find All,MDK就会帮你找出所有含有Stm32_Clock_Init字段的文件并列出其所在位置,如图4.3.4.4所示:

图4.3.4.4 查找结果 该方法可以很方便的查找各种函数/变量,而且可以限定搜索范围(比如只查找.c文件和.h文件等),是非常实用的一个技巧。 4.5 DAP仿真器和无线调试器的使用 由于M4没有可以用的Flash,所以一般在M4代码调试阶段我们会采用在线仿真的方式,即将代码下载到M4可用的SRAM中,对STM32MP1的M4进行仿真,我们可以使用ST-Link、Jlink、正点原子的DAP仿真器或者无线调试器来进行仿真调试。 本节主要讲解如何使用正点原子的DAP仿真器以及无线调试器在STM32MP1上进行仿真,正点原子的DAP仿真器和无线调试器分为高速版和普速版,关于以上仿真器的用户手册等相关资料,大家可以到正点原子资料下载中心进行下载。注意,使用仿真器前一定要先认真阅读用户手册!用户手册中讲解了仿真器的基本使用方法。 资料链接:http://www.openedv.com/docs/tool/dap/index.html

4.5.1仿真器和调试器资料下载 4.5.1 DAP仿真器的使用

  1. 开发板连接

图4.5.1.1开发板连接 正常的情况是:开发板上电以后,开发板核心板和底板的电源指示灯(蓝灯)正常亮,DAP仿真器的灯显示为蓝色,如果DAP仿真器的灯始终是红色或者不亮的话,说明仿真器没正常连接,请检查USB线是否已经接好,可以重新接好USB线。请注意,如果此前自己更新过DAP仿真器的固件的话,如果没有配置好,也可能会导致DAP仿真器的灯不亮,那么请参考正点原子的DAP用户使用手册进行操作。 2. MDK工程调试设置 本节实验使用了后面第十六章 蜂鸣器实验 为例子来进行仿真(实验前请打开此实验的代码,先成功编译,再进行以下操作),当然,大家可以直接使用本章节 的实验来进行仿真,都是可以的。 打开MDK工程的蜂鸣器实验,先进行编译,编译成功后我们点击魔术棒打开Options for Target选项卡,在Debug栏选择仿真工具CMSIS-DAP Debugger,选项同时注意勾选Load Application at Startup 和 Run to main选项:

图4.5.1.2 选择仿真器 点击Utilities选项,按照如下步骤进行设置,注意,下图②步骤的Use Debug Driver要勾选,切记不要勾选Update Target before Debugging此项,然后再点击③处的Settings:

图4.5.1.3 配置Utilities 进入CMSIS-DAP Cortex-M配置界面后,按照如下配置:

图4.5.1.4 Flash Download配置 勾选Pack的Enable选项,我们勾选此项的目的是为了识别出开发板的芯片,如果后面没有识别开发板的芯片,请注意此项是否已经选了。

图4.5.1.5 勾选Pack 如下图,按照步骤设置后,SW Device处会识别出设备号,如果没有识别的话,请注意仿真器是否接触良好,仿真器的灯是否是蓝色的,开发板的拨码开关是否是MCU(001)启动方式,开发板是否已经上电,以及上图中Pack的Enable是否已经勾选了。

图4.5.1.6 配置Debug 点击OK以后,返回MDK界面,然后点击Start/Stop Debug Session按钮,进入仿真页面,如下:

图4.5.1.7 进入仿真界面 点击运行按钮可以直接进行仿真,当然,也可以点击单步调试按钮进行单步调试,接下来的操作与使用ST-LInk没有什么差别,调试方法可以参考《【正点原子】STM32MP1 M4裸机HAL库开发指南V1.2》。

图4.5.1.8 开始仿真 成功运行后,蜂鸣器会间隔“嘀 嘀 嘀……”发声,说明程序运行成功。 4.5.2 无线调试器的使用 无线调试器的使用步骤大部分和DAP仿真器的使用类似,只不过硬件连接方式不一样。 1.开发板连接 如下图,无线调试器的发送端和接收端通过USB线和电脑进行通信,无线调试器的接收端通过JTAG接口和开发板连接,两个调试器的灯显示蓝色,说明连接正常。如调试器的灯是红色的或者灯不亮,说明连接不正常,请检查USB线是否接好,可以重新接好试试。请注意,如果此前自己更新过DAP仿真器的固件的话,如果没有配置好,也可能会导致DAP仿真器的灯不亮,那么请参考正点原子的DAP用户使用手册进行操作。

图4.5.2.1 无线调试器链接 2.MDK工程调试设置 连接好硬件以后,剩下的操作和前面的4.5.1小节一样。

标签: 502100alf连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台