单片机课程实验指导书.docx
- 文档编号:28644231
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:128
- 大小:2.27MB
单片机课程实验指导书.docx
《单片机课程实验指导书.docx》由会员分享,可在线阅读,更多相关《单片机课程实验指导书.docx(128页珍藏版)》请在冰豆网上搜索。
单片机课程实验指导书
嵌入式课程实验指导书
实验一、开发环境构建和GPIO控制实验
一、硬件环境
1.1STM32芯片介绍
STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARMCortex-M内核。
增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是32位产品用户的最佳选择。
两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。
时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。
STM32的特点:
内核:
ARM32位Cortex-M3CPU,最高工作频率72MHz,1.25DMIPS/MHz。
单周期乘法和硬件除法。
存储器:
片上集成32-512KB的Flash存储器。
6-64KB的SRAM存储器。
时钟、复位和电源管理:
2.0-3.6V的电源供电和I/O接口的驱动电压。
POR、PDR和可编程的电压探测器(PVD)。
4-16MHz的晶振。
内嵌出厂前调校的8MHzRC振荡电路。
内部40kHz的RC振荡电路。
用于CPU时钟的PLL。
带校准用于RTC的32kHz的晶振。
低功耗:
3种低功耗模式:
休眠,停止,待机模式。
为RTC和备份寄存器供电的VBAT。
调试模式:
串行调试(SWD)和JTAG接口。
DMA:
12通道DMA控制器。
支持的外设:
定时器,ADC,DAC,SPI,IIC和UART。
2个12位的us级的A/D转换器(16通道):
A/D测量范围:
0-3.6V。
双采样和保持能力。
片上集成一个温度传感器。
2通道12位D/A转换器:
STM32F103xC,STM32F103xD,STM32F103xE独有。
最多高达112个的快速I/O端口:
根据型号的不同,有26,37,51,80,和112的I/O端口,所有的端口都可以映射到16个外部中断向量。
除了模拟输入,所有的都可以接受5V以内的输入。
最多多达11个定时器:
4个16位定时器,每个定时器有4个IC/OC/PWM或者脉冲计数器。
2个16位的6通道高级控制定时器:
最多6个通道可用于PWM输出。
2个看门狗定时器(独立看门狗和窗口看门狗)。
Systick定时器:
24位倒计数器。
2个16位基本定时器用于驱动DAC。
最多多达13个通信接口:
2个IIC接口(SMBus/PMBus)。
5个USART接口(ISO7816接口,LIN,IrDA兼容,调试控制)。
3个SPI接口(18Mbit/s),两个和IIS复用。
CAN接口(2.0B)。
USB2.0全速接口。
SDIO接口。
ECOPACK封装:
STM32F103xx系列微控制器采用ECOPACK封装形式。
二、软件开发环境介绍及安装
2.1STM32固件库
STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。
该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。
因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。
每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。
每个器件的开发都由一个通用API(applicationprogramminginterface应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。
ST公司2007年10月发布了V1.0版本的固件库,MDKARM3.22之前的版本均支持该库。
2008年6月发布了V2.0版的固件库,从2008年9月推出的MDKARM3.23版本至今均使用V2.0版本的固件库。
V3.0以后的版本相对之前的版本改动较大,本书使用目前较新的V3.4版本。
2.2Keil
A.打开KeilMDK4.21的安装包,双击安装程序后,起始页面如下图所示,依次单击“Next”按钮完成安装;
B.安装完成后,以管理员身份打开uVision4,点击FileLicenseManagement打开LicenseManagement窗口,复制右上角的CID;
C.打开Keillic.exe注册机,在CID窗口里填上复制的CID,点击Generate生成许可号,复制许可号;
D.将许可号复制到LicenseManagement窗口下部的NewLicenseIDCode,点击右侧的AddLIC,若上方的Product显示RealViewMDK-ARM即表示注册成功
到此为止,表示MDK安装并注册完成。
2.3J-Link
J-link用于开发过程中的调试与仿真,是开发过程中必不可少的器件,使用J-link需要安装其驱动程序,具体安装步骤如下所示,首先打开光盘下的KeilMDK4.21的安装包,双击安装程序,逐步往下,直至完成。
在完成驱动的安装以后,将J-link的一端接至开发板的JTAG口,另一端接至PC,此时打开PC的设备管理器,如能找到J-link表示正常安装,此时J-link已经安装完成。
在后面的内容中,将详细介绍J-link的使用方法。
2.4FlashLoader
FlashLoader用于STM32可执行文件的下载,支持ISP的方式,把文件下载到指定的地址。
在安装KeilMDK4.21时已经按照了FlashLoader。
三、工程模板构建
UE-STM32F103的所有开发调试都在MDK4.21中完成的,为了后面更好的使用此环境,请熟悉以下MDK的窗口的示意图。
3.1创建工程
打开”KEIL4.21”,准备进行工程的创建
1)在创建一个工程之前,首先新建一个文件夹用于存放工程文件,此处文件夹名为uetest,放置路径可自行选择,在其下分别建立如下几个目录:
a.startup:
启动代码
解压../实验一/软件安装包/stm32f10x_stdperiph_lib_v3.5源代码.zip文件,该文件为stm32固件库。
解压后,
拷贝"STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\
STM32F10x\startup\arm"目录下的"startup_stm32f10x_hd.s"到该目录下
b.cmsis:
与Cortex-M3内核设备访问相关的代码
拷贝"../STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport"目录下的"core_cm3.c"、"core_cm3.h"以及"STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\
CM3\DeviceSupport\ST\STM32F10x"目录下的"stm32f10x.h"、"system_stm32f10x.c"、"system_stm32f10x.h"放到该目录下
c.libraray:
外设库文件
拷贝"STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver"目录下的"inc"和"src"文件夹放到该目录下
d.source:
用户应用开发文件
包含:
main.c、stm32f10x_conf.h文件(stm32f10x_conf.h可以在任意已有工程中复制,如:
..\stm32f10x_stdperiph_lib_v3.5源文件\STM32F10x_StdPeriph_Lib_V3.5.0\Project\
STM32F10x_StdPeriph_Examples\ADC\3ADCs_DMA\stm32f10x_conf.h)
e.run:
用来放置工程编译后最终执行的HEX文件
2)单击ProjectNewuVisionProject…菜单项目;
3)此时打开一个标准对话框,输入新建工程的名字uetest,新工程保存在文件夹uetest内,uVision4将会创建以uetest.uvproj为名字的新工程文件;
4)上图点击“保存”后,弹出处理器选择对话框,此处选择STM32F103VE;
5)出现一个提示框,是否复制STM32启动代码到工程文件夹,选择“是”,就可以看到工程区有一个名为startup_stm32f10x_hd.s的启动代码自动添加进来了;
6)右键单击“Target1”ManageComponents
在ProjectTarget中可以把Target1改成你想要的名字,然后在groups单击新建按钮,这些组对应工作目录内的文件夹,方便源文件的分类和管理,我们这里新建了cmsis、libraray、run、source和startup目录,并在Files栏加入工程目录中对应文件夹下的文件。
这几个目录在后面的历程中都会出现。
最后如下图所示:
3.2配置和编译工程
以上步骤,项目已经建立了,但是仍然需要进行配置工作,相关如下,首先打开工程;
首先用鼠标右击左边工程窗口的项目名“uetest”,会出现一个菜单,选择“OptionsforTarget'Project'”,即出现工程配置的对话框,如下图所示:
这个option相对繁琐,而且根所选择的芯片有关,这里共有10个选项卡,绝大多数选择默认配置即可,下面将对一些需要注意的配置简单介绍一下。
1)Device设置
在此选项卡中选择相关的芯片型号,此处为STM32F103VE;
2)Target设置
在此选项卡中需要输入开发板上所用的晶振的大小,此处为8.0MHz,如上图所示;
3)Output设置
SelectFolderforObjects:
选择编译之后的目标文件存储在哪个目录里,默认位置为工程文件的目录里。
此处选在目标文件存放在uetest/run中。
NameofExecutable:
生成的目标文件的名字,缺省是工程的名字。
CreateExecutable:
生成OMF以及HEX文件。
OMF文件名同工程文件名但没有带扩展名。
DebugInformation:
用于Debug版本,生成调试信息,否则的话无法进行单步调试。
CreateBatchFile:
生成用于实现整个编译过程的批处理文件,使用这个文件可以脱离IDE对省程序进行编译。
CreateHexFile:
这个选项默认情况下未被选中,如果要写片做硬件实验就必须选中该项。
这一点是初学者易疏忽的,在此特别提醒注意一定要要选中,否则编译之不生成Hex文件。
BigEndian:
编码格式,与CPU相关,如果CPU采用的是BigEndian编码则勾选上。
BrowseInformation:
产生用于在源文件快速定位的信息。
CreateLibrary:
生成lib库文件,默认不选。
4)C/C++设置
在Define宏中添加宏定义:
STM32F10X_HD,USE_STDPERIPH_DRIVER
IncludePaths:
指定头文件的查找路径,可以添加多个,这里我们将工程文件中的路径全部加入。
如下所示:
5)Debug设置
左边是对应uVision4的模拟环境,右边是针对仿真器,这里选择右边的Cortex-M/RJ-LINK/J-Trace,同时勾选Runtomain,这样在调试的时候,会从main函数开始。
如果已经将J-LINK仿真器连接到你的电脑,点击“Settings”你将进入ARMTargetDriverSetup界面;
J-Link/J-TraceAdapter:
--SerialNo:
列出了当前连接到主机的所有J-LINK适配器的串号,你可以通过列表选择要使用的J-LINK适配器。
--J-LINKVersion,DeviceFamily以及FirmwareVersion分别列出了当前选择的J-LINK适配器的版本,设备家族和固件版本。
--Port:
根据和开发板接口的类型选择端口,有JTAG和SW两种,勾选SWJ表示支持两种方式。
--MaxClock:
指定和开发板的最高通信时钟。
--JTAGDeviceChain:
显示当前通过适配器连接上的开发板。
--AutomaticDetection:
自动监测,选择系统将自动检测连接上的开发板,建议使用。
--ManualConfiguration:
手动配置,通过手动设置IDCODE,DeviceName和IRlen等属性来查找设备。
Debug:
--CacheCode:
通知调试器已经下载的程序代码不会改变,选中的话uVision将不会从目标系统读取程序代码。
--CacheMemory:
决定调试程序期间程序停止运行的时候,是否更新存储器显示。
--VerifyCodeDownload:
比较目标存储器和调试器上的应用程序的内容。
--DownloadtoFlash:
将代码下载到所有的存储器区域,如果不选中,调试器不会把代码下载到FlashDownloadSetup中制定的存储器地址范围。
6)Utilities标签页的设置
ConfigureFlashMenuCommand
UseTargetDriverforFlashProgramming:
列表选择和调试接口一致的驱动。
点击Settings按钮。
出现如下界面:
DownloadFunction:
定义了Flash烧写的时候进行的操作。
EraseFullChip:
前面三项要选一,烧写程序之前擦除整个Flash存储器。
EraseSectors:
烧写程序之前擦除程序要使用的扇区。
DonotErase:
不进行擦除操作
Program:
使用当前uVision工程的程序烧写ROM。
Verify:
验证FlashROM的内容和当前工程中的程序一致。
ResetandRun:
在烧写和验证完成之后复位开发板并且运行程序。
RAMforAlgorithm:
指定用于烧写程序的RAM区域,通常是微控制器上的一段片上空间。
Start:
起始地址。
Size:
大小。
此处可以通过点击Add添加,点击Add你将看到如下的选择列表,可以根据你选用的芯片选择合适的,也可以自己手动添加。
到此为止工程设置就结束了,接下来需要对工程进行编译。
单击编译所有文件的按钮,完成对软件工程的编译。
3.3调试程序
编译通过只是说明我们的代码没有语法错误,至于源程序中存在的其他错误,必须通过调试才能发现并解决,事实上,除了极简单的程序以外,绝大部分的程序都要通过反复调试才能得到正确的结果,因此,调试是软件开发接下来我们需要运行我们的程序来验证是否达到了预期的目的。
也就是程序调试,程序调试往往是程序开发过程中最难的阶段,尤其是对一些比较大型的程序。
下面我们就来看看uVision4对调试的支持。
在对工程成功进行汇编、连接之后,按Ctrl+F5或者使用菜Debug->Start/StopDebugSession即可进入调试状态。
进入调试状态后,界面与编辑状态相比有明显的变化,Debug才单项中原来不能用的命令现在已经可以使用了,工具栏会多出一个用于运行和调试的工具栏,如下图所示,Debug菜单上的大部分命令可以在此找到对应的快捷按钮。
常用的Debug菜单命令如下所示:
Start/StopDebugSession:
开始或者停止调试。
Run:
一直执行下一个活动的断点。
Step:
单步执行。
StepOver:
过程单步执行,即将一个函数作为一个语句来执行。
StepoutofcurrentFunction:
跳出当前的函数。
RuntoCursorline:
执行到光标所在的行。
StopRunning:
停止运行。
Breakpoints:
打开断点对话框。
Insert/RemoveBreakpoint:
在当前行插入/删除一个断点。
Enable/DisableBreakpoint:
激活当前行的断点或者使断点无效。
DisableAllBreakpoints:
使程序中所有的断点都无效。
KillallBreakpoints:
删除程序中所有的断点。
学习程序调试,必须明确两个重要的概念,即单步执行与全速执行。
全速执行是指一行程序执行完了以后紧接着执行下一行程序,中间不停止,这样程序执行的速度就很快,并可以看到该段程序执行的总体效果,即最终结果正确还是错误,但如果程序有错,则难以确认错误出现在哪些程序行。
单步执行是每次执行一行程序,执行完该行程序执行完以后即停止,等待命令执行下一行程序,此时我们可以观察该行程序执行完以后得到的结果,是否与我们写程序行所想要得的结果相同,借此可以找到程序中问题所在。
程序调试中,这两种运行方式都要用到,要灵活应用,可以大大提高调试效率。
在调试窗口中,我们可以看到一个黄色的调试箭头,指向了当前执行到的程序行。
1)断点设置
程序调试时,有些程序行往往很难确认什么时候能够执行到,这类问题就不适合单步调试,这时需要使用程序调试中的断点设置。
断点设置的方法有多种,常用的是在某一程序行设置断点,设置好断点之后可以全速运行程序,一旦执行到该程序行即停止,可在此观察有关的变量值,以确定问题所在。
设置断点的命令请参考上一节常用调试命令介绍。
一旦某一行被设置了断点,我们可以在程序行的左端看到一个红色方框(如图5.24调试窗口图所示),如果该断点被禁用,方框将会变为白色。
除了在某程序行设置断点这一基本方法以外,uVision4还提供了多种设置断点的方法,按Debug->Breakpoints,即出现一个对话框,该对话框用于对断点进行详细的设置,如下图所示。
2)调试窗口
前面讲了调试的一些方法,里面多次提到检查程序的执行状态。
调试窗口就是用于查看程序执行状态的。
uVision4提供了多种调试窗口,如寄存器窗口,存储器窗口,反汇编窗口,外设窗口等,下面将会一一作介绍。
a.寄存器窗口
上图是工程窗口寄存器页的内容,寄存器页包含了当前所有的工作寄存器和系统寄存器,每当程序中执行到对某个寄存器的操作时,该寄存器会反色显示,用鼠标单击然后按F2(鼠标连续单击两次),即可修改该值。
b.存储器窗口
存储器窗口可以显示系统中各种内存中的值,通过在Address后的编辑框中输入“字母:
数字”即可显示相应内存值,其中字母C、D、I、X,分别代表代码存储空间、直接寻址的片内存储空间、间接寻址的片内存储空间、扩展的外部RAM单元值、键入C:
0即可显示从0开始的ROM单元中的值,即查看程序的二进制代码。
该窗口的显示值可以以各种形式显示,如十进制、十六进制、字符型等。
改变显示方式的方法是点鼠标右键,在弹出的快捷菜单中选择。
除了显示,还可以修改内存中的值。
c.查看和调用栈窗口
这个窗口可以帮助我们查看当前调用树的情况,我们还可以通过这个窗口查看和修改一些变量的值。
鼠标停留在某个变量的时候点右键,在弹出的浮动菜单中选择Add***toWatchwindow,Local窗口显示当前一些局部变量的值,变量值的现实方式可以在十六进制和十进制之间切换,方式是在查看窗口点右键,在某个变量的Value栏用鼠标单击然后按F2(鼠标连续单击两次),即可修改该值。
如下图所示。
d.反汇编窗口
点击View->DissamblyWindow可以打开反汇编窗口,该窗口可以显示反汇编后的代码、源代码和相应反汇编代码的混合代码,可以在该窗口进行在线汇编、利用该窗口跟踪已找行的代码、在该窗口按汇编代码的方式单步执行。
点击鼠标右键,出现快捷菜单,如图5.29所示,其中MixedMode是以混合方式显示,AssemblyMode是以返回编码方式显示。
e.外设窗口
为了能够比较直观地了解单片机中各种外设的使用情况,uVison4提供了一个外围接口对话框。
通过Peripherals菜单,下拉菜单中的内容和你选择的芯片有关,会列出你所选择的芯片上所有的外设。
选择一项你可以进入查看或修改该外设的一些状态。
3.4下载说明
3.4.1FlashLoader下载说明
正确安装FlashLoader软件,然后正确连接UE-STM32F103开发板上的的UART1串口1和PC机的的DB9串口,用短接帽短接UE-STM32F103开发板上的BOOT0(BOOT0=1,BOOT1=0),上电运行FlashLoader。
点击NEXT后按照如下选择设置
点击NEXT,选择器件
点击NEXT,再点击Download,然后选择需要下载的文件路径
点击NEXT,开始ISP下载程序。
下载结束后点击Finish完成下载
断电并拔下BOOT0的短接帽。
重新上电即可运行下载的程序。
3.4.2J-link下载说明
安装JLinkARM_V400a程序将JLINK的连接线的凸起对准盘古UE-STM32F103开发板上的JTAG插座(1XS11)的凹进部分插好,运行安装好的“J-FlashARMV4.00a”
点击“OPTIONS”下的“Projectsettings”
点击CPU,如图选择芯片型号,然后点击确定返回到主菜单环境:
点击File下的Open菜单键,选择需要烧写的合适的文件路径后,如图
点击Target下的Connect,如果JLINK与开发板连接正确,在底部的窗口将会显示Connectedsuccessfully;
点击Target下的EraseChip,删除芯片的程序空间,成功后将提示相关信息;
点击Target下的Auto,自动将需要烧写的程序写入到芯片内,成功后将提示相关信息。
中间如有提示信心,直接选择是。
断电并拔下JLINK连接线。
重新上电即可运行下载的程序。
4、GPIO控制实验
一、实验目的
实现开发板上的LED等按照一定规律“亮、灭”,掌握STM32基本GPIO口的使用。
二、硬件原理
实现跑马灯仅需要对STM32的GPIO进行配置与读写。
GPIO是STM32最常用的设备之一,STM32可以提供多达80个双向GPIO口,它们分别分布在A~E等5个端口中。
每个端口有16个引脚,每个引脚可以承受最大为5V的压降。
STM32的每个I/O端口都由7个寄存器控制,分别是:
2个32位端口配置寄存器GPIOx_CRL和GPIOx_CRH;2个32位的数据寄存器GPIOx_IDR和GPIOx_ODR;1个32位的置位/复位寄存器GPIOx_BSRR;1个16位的复位寄存器GPIOx_BRR;1个32位的锁存寄存器GPIOx_LCKR。
1)端口配置寄存器
STM32端口由端口配置寄存器进行配置,由于每个端口有16个I/O口(即引脚),而每个I/O口需要4位配置,因此每个端口需要64位配置,这也是每个端口有2个32位端口配置寄存器的原因。
如A端口配置寄存器GPIOA_CRL与GPIOA_CRH,其中GPIOA_CRL配置低8位I/O口,GPIOA_CRH配置高8位I/O口,图中是GPIO_CRL寄存器。
每个I/O口可以由软件配置成8种模式:
输入浮空、输入上拉、输入下拉、模拟输入、开漏输出、推挽输出、推挽式复用功能、开漏复用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程 实验 指导书