ch03实验2-串口电子钟_第1页
ch03实验2-串口电子钟_第2页
ch03实验2-串口电子钟_第3页
ch03实验2-串口电子钟_第4页
ch03实验2-串口电子钟_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验2——串口电子钟卓越工程师培养系列本书获深圳大学教材出版资助STM32F1开发标准教程01实验内容实验内容①将RunClock模块添加至STM32工程,并在应用层调用RunClock模块的API函数,实现基于STM32口的电子钟功能;②将时钟的初始值设为23:59:50,通过计算机上的串口助手每秒输出一次时间值,格式为Nowisxx:xx:xx;③将编译生成的.hex或axf文件下载到STM32核心板;④打开口助手软件,查看电子钟运行是否正常。本实验主要包括以下内容02实验原理1.RunClock模块函数这两个文件位于本书配套资料包的“04例程资料Material02串口电子钟实验AppRunClock”文件夹中。RunClock模块有6个API函数,分别是InitRunClock、RunClockPer2Ms、PauseClock、GetTimeVal、SetTimeVal和DispTime,下面对这6个API函数进行讲解。RunClock模块由RunClockh和RunClockc文件实现1.RunClock模块函数InitRunClock函数的功能是初始化RunClock模块,通过对sour、siMin和siSec共3个内部变量赋值0来实现。该函数的描述如表3-1所示。1.initRunClock1.RunClock模块函数RunClockPer2Ms函数的功能是以2ms为最小单位运行时钟系统,该函数每执行500次,变量s_iSec递增一次。该函数的描述如表3-2所示。2.RunClockPer2Ms1.RunClock模块函数PauseClock函数的功能是启动和暂停时钟。该函数的描述如表3-3所示。3.PauseClock1.RunClock模块函数GetTimeVal函数的功能是获取当前时间值,时间值的类型由type决定该函数的描述如表3-4所示。4.GetTimeVal1.RunClock模块函数SetTimeVal函数的功能是根据参数timeVal设置当前的时间值,时间值的类型由type决定。该函数的描述如表3-5所示。5.SetTimeVal1.RunClock模块函数DispTime函数的功能是根据参数hourmin和sec显示当前的时间,通过printf函数来实现。该函数的描述如表3-6所示。6.DispTime2.函数调用框架图3-1为本实验的函数调用框架,Timer模块的TIM2用于产生2ms标志,TIM5用于产生1s标志Main模块通过获取和清除2s1s标志实现Proc2msTask函数中的核心语句块每2ms执行一次,Proc1SecTask函数中的核心语块每1s执行一次。Mai模块调用RunClock模块的PauseClock函数启动时钟运行,通过SetTimeVal函数设置初始时间值;Proc2msTask函数调用RunClock模块的RunClockPer2Ms函数,实现RunClock模块内部静态变量s_iHour/s_iMin/s_iSec的计数功能,进而实现时钟的运行;时间显示是由RunClocl模块的DispTime函数调用printf语句输出实现的Prc1SecTask函数每秒调用一次DispTim函数。3.Proc2msTask与Proc1SecTaskProc2msTask和Proc1SecTask是本书经常用到的函数,它们的工作机制类似,下面以Proc2msTask函数为例说明。程序清单3-1是Proc2msTask函数的实现,注意,需要每2m执行一次的代码一定要放在if语句中。3.Proc2msTask与Proc1SecTaskProc2msTask函数在main函数的while语句中被调用,每隔几微秒执行一次具体间限取决于各中断服务函数及Proc1SecTask函数的执行时间。如果Proc2msTask函数约每10us执行一次,Get2msFlag函数用于读取2ms标志位的值并判断是否为1,该标志位在TIM2的中断服务函数中被置为1,TIM2的中断服务函数每2ms行一次因此2ms标志位也是每2ms被置为1一次。如果2s标志位为1,则执行用户代码,执行完毕,清除2ms标志位,然后执行Proc1SecTask函数,接着继续判断2ms标位;如果2ms标志位不为1,则执行Proc1SecTask函数然后继续判断2ms标志位main函数的while语具体执行过程如图3-2所示。03实验步骤步骤1:首先,将“D:STM32KeilTestMateria02串口电子钟实验”文件夹复制到“D:STM32KeilTestProduct”文件夹中。然后,双击运行“D:STM32KeilTestProduct02串口电子钟实验Project”文件夹中的STM32KeilPrjuvprojx,单击工具栏中的西按钮进行编译。当BuildOutput栏中出现FromBLF:creatinghexfile...时,表示已经成功生成hex文件,出现0Error(s),0Warning(s)表示编译成功。最后,将axf文件下载到STM32的内部Flash,观察STM32核心板上的两个LBD是否交替闪烁,同时打开串口助手,观察是否秒输出一次ThisisthefirstSTM32F103ProjectbyZhangsan。如果两个LED交替闪烁口正常输出字符串,表示原始工程正确,可以进入下一步操作。复制并编译原始工程步骤2:首先,将“D:STM32KeilTestProductl02串口电子钟实验ApplRunClock”文件夹中的RunClockc添加到App分组,具体操作可参见2.3节步8。然后,将“D:STM32KeilTestProduct\02串口电子钟实验AppRunClock”路径添加到IncudePaths栏,具体操作可参见2.3节步骤11。添加RunClock文件对步骤3:在Project面板中,双击打开Main.c文件,在Main.c文件的“包含头文件”区的最后,添加代码#include"RunClock.h",如程序清单3-2所示。这样就可以在Mainc文件中调用RunClock模块的枚举定义和API函数等,实现对RunClock模块的操作。完善串口电子钟应用层步骤3:在Main.c文件的IitSoftware函数中,添加调用InitRunClock函数的代码,如程序清单3-3所示,这样就实现了对RunClock模块的初始化。完善串口电子钟应用层步骤3:在Main.c文件的IitSoftware函数中,添加调用InitRunClock函数的代码,如程序清单3-3所示,这样就实现了对RunClock模块的初始化。完善串口电子钟应用层步骤3:在Mainc文件的Proc2msTask函数中,添加调用RunClockPer2Ms函数的代码,如程序清单3-4所示。再次强调,一定要将调用RunClockPer2Ms函数的代码放在if语句中,这样才表示RunClockPer2Ms函数每2ms执行一次。完善串口电子钟应用层步骤3:实验要求每秒输出一次时间,因此,需要在Mainc文件的Proc1SecTask函数中添加调用DispTime函数的代码。DispTime函数的参数包括小时、分钟、秒,需要先定义hour、min和sec时间值变量,然后通过GetTimeVal函数获取这3个时间值代码如程序清单3-5所示。这样即可实现每秒获取一次时间值(包括小时、分钟、秒),并通过STM32的口发送到计算机的串口助手显示出来。由于DispTime函数是通过串口输出时间的,因此,需要注释掉if语句中的printf语句。完善串口电子钟应用层步骤3:在Main.c函数的main函数中,添加调用PauseClock和SetTimeVal函数的代码,如程序清单3-6所示。PauseClock函数用于启动和暂停时钟,SetTimeVal函数用于设置初始时间值。下面根据实验要求,将初始时间设定为23:59:50,然后通过PauseClock函数启动时钟。完善串口电子钟应用层步骤4:代码编写完成后,单击

画按钮进行编译。编译结束后,BuildOutput栏中出现OError(s)0Warning(),表示编译成

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论