实验3 EXPERIMENT 3 C语言实验 3.1实验目的 熟悉在Keil 工具中编写C语言程序; 熟悉C语言程序的调试。 3.2实验设备 1. 硬件 PC一台。 2. 软件 (1) Windows 7/8/10系统; (2) Keil μVision5集成开发环境。 3.3实验内容 在Keil 工具中通过C语言完成sum=1+2+…+10的程序编写,并在仿真模式下进行调试。 3.4实验预习 复习C语言编程; 学习在Keil 工具下如何建立工程及配置。 3.5实验原理 在调试该C语言程序时,配置本实验教材所使用的开发板,或以仿真模式运行。 3.6实验步骤 3.6.1创建工程 在Keil工具中创建一个新工程,在实验2创建工程的基础上在USR中添加main函数。 3.6.2修改配置 单击如图3.1所示方框中的按钮,打开配置界面。 图3.1打开配置界面按钮 切换到Debug选项卡,如图3.2所示。 图3.2Debug选项卡 将选项卡中的内容改为如图3.3所示,注意粗黑框标注的内容,具体修改见下文。 图3.3需要修改Debug选项卡的内容 其中: Use Simulator代表要使用软件模拟仿真。 Dialog DLL的内容是DARMSTM.DLL,表示使用STM系列。 Parameter的内容是“pSTM32F429IGT6”,这里匹配的是当前开发板的型号。 Initialization File,该选项可以配置映射一些地址,从而实现对STM32开发板不同功能的模拟仿真。一个典型的Initialization File内容如下: map 0x40000000,0x4000ffff read write map 0x40010000,0x4001ffff read write map 0x40020000,0x4002ffff read write map 0x48000000,0x4800ffff read write 在工程文件夹下新建init.ini文件,将上述4行内容添加到这个文件中,在Debug选项卡的Initialization File选项下添加该文件。 在该文件中,我们设置了4段地址映射,使得可以实现模拟某些功能。一个大致的地址功能映射表如图3.4所示。 图3.4部分存储器的映射 上面只是截取了部分存储器的映射情况,这是AHB1的地址。例如,如果需要使用RCC功能,那么可以看到0x40021000至0x400213FF这部分地址需要有读写属性,可以在Initialization File中添加相应映射地址的字段来启用读写。注意: 该地址对于不同型号的开发板会有变化。 Debug选项卡中的内容修改完毕后,单击OK按钮完成配置。 3.6.3跟踪变量 配置完成后,就可以通过Debug进行仿真了。本次实验中,我们通过一个简单的累加来仿真,验证程序的正确性。main.c文件内容如下: #include "stm32f4xx.h" static int x=0; //需要跟踪的变量x,设置为全局变量,局部变量无法用分析器跟踪 int main(void) { while(1){ int i; x=0; for(i=0; i < 10; ++i){ x ++; //每次加1直至加到10 } } } 在编写好程序后,单击Keil左上角的Build或Rebuild按钮进行编译,如图3.5所示。 图3.5重新编译 在如图3.6所示的Output框中看到无错误(0 Error(s))提示后即编译成功。 图3.6重新编译成功的Output框 编译完成后,单击Debug按钮,然后单击分析器按钮,如图3.7所示。 图3.7打开Debug窗口并启用分析器 单击分析器左上角的Setup按钮,如图3.8所示。 图3.8单击Setup按钮 在如图3.9所示界面中单击右上角标识处添加变量x(如果已经有则不用添加,关闭此框即可),添加完毕后单击Close按钮。 图3.9添加变量 在分析器中左侧看到变量x,即添加成功,如图3.10所示。请注意,需要在分析器中跟踪的变量必须为全局变量,若设置为局部变量,则可能无法添加到分析器中。 图3.10添加变量成功 图3.11设置仿真变量的最大/最小值 因为分析器展示的默认范围非常广(和变量类型上下限有关),因此需要设置自动调整范围以更好地展现值的变化。在分析器窗口中空白位置右击,选中Adaptive Min/Max选项,如图3.11所示。 单击Keil左上角的Run按钮,可以看到分析器中出现波形,如图3.12所示。 图3.12观察变量的波形 可以看到,波形从0~10以阶梯形式上升,符合程序设定,每次加1直到10的结果是一致的。 请注意,如果Initialization File没有被加载或者没有正确配置地址,那么在Command窗口会出现如图3.13所示的错误信息。此时需要重新配置Initialization File。 图3.13初始文件配置错误信息 此外,还有一种在设置变量时失败的情况,是在最新版Keil μVision5中,默认的ARM编译器会使用版本6的编译器,在该版本的编译器进行编译后,在Debug选项卡的Setup里无法设置变量,提示Unknown Signal。解决方案是在Target选项卡中将ARM Compiler切换到版本5或以下的版本,如图3.14所示。 图3.14切换ARM编译器版本 3.7实验参考程序 #include "stm32f4xx.h" static int x=0; //需要跟踪的变量x,设置为全局变量,局部变量无法用分析器跟踪 int main(void) { while(1){ int i; x=0; for(i=0; i < 10; ++i){ x ++; //每次加1直至加到10 } } } 3.8实验总结 本实验给出了如何使用Keil软件进行仿真的例子: 从Keil软件仿真器中模拟运行一个简单的累加计算。初学者经过本节的实验理解和体验STM32的仿真过程,熟练掌握Keil软件的STM32系列开发板的仿真器使用方法。 3.9思考题 (1) 尝试通过配置其他映射地址,启用GPIO引脚,观察GPIO引脚高低电平变化。 (2) 使用Debug模式下的Watch功能观察变量的变化,并比较和仿真分析器的相同和不同点。 (3) 查阅资料了解不同型号的STM32的地址映射配置。