昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计

大家好,我是『芯知识学堂』的SingleYork,前面给大家介绍了“昆仑通态人机界面与单片机通信实战教程三:脚本驱动与HDMI工程的关联”,今天笔者就要来给大家介绍这个教程的最后一个内容,那就是:“昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计”。

该例程笔者选用的是自己做的,以STC15W4k48S4这款单片机开发的一款带有14路输入和12路输出的控制板(3D图如下),软件开发平台为keil4。

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第1张图片

那么,我们首先来开打keil软件,新建一个工程:

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第2张图片

我们给新建的工程名,命名为“MCGS_Demo”,并且保存到自定义的文件夹中:

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第3张图片

选择单片机型号为STC15W4K32S4,准确的说,这应该是STC15W4K32S4这个系列,在后面单片机程序下载的时候,可以选择这个系列下的某一个型号的单片机。

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第4张图片

选定好单片机后,我们点击“OK”按钮即可,然后会弹出如下对话框,这个地方我们选择“是”或者“否”都没有太大的影响:

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第5张图片

笔者就以选择“是”为例,就这样,一个新的工程就建好了。刚建好的工程,默认只有这么一些东西:
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第6张图片

那么,为了便于后续项目的管理,以及工程的移植,我们来对整个工程的文件夹做一些管理,在原来的工程目录中,我们新建了BSP、Project、ReadMe、STCLib、SYSTEM、USER几个文件夹:
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第7张图片

同时,我们将之前新建工程的时候生成的文件,全部移到了Project这个文件夹中:
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第8张图片

然后,在BSP文件夹中,主要是放置一些板级支持包文件,笔者偷了一下懒,就没建额外的文件夹区分头文件和C文件了,就统一放到这个BSP文件夹中了:

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第9张图片

ReadMe这个文件夹中,主要是放置了一个ReadMe.txt的说明文档,主要就是关于这个工程的一些说明,该例程中,笔者主要是添加了“通信协议”的说明:
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第10张图片

STCLib文件夹中,主要是放置了一个config.h的配置文件,这个文件主要是配置了系统使用的晶振频率,以及包含了STC15系列单片机的头文件,这里需要说明的是,软件中晶振频率的配置,要跟实际下载时晶振频率的选择要一致,否则,有些功能就可能出问题:

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第11张图片

SYSTEM这个文件夹中,主要放置了STC15系列单片机的一些库文件,在这个文件夹中,单独设置了两个文件夹inc和src,其中,inc文件夹主要是放置了该项目用到的相关库的头文件(.h文件),src文件夹中主要放置了该项目用到的相关库的一些源文件(.c文件):
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第12张图片

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第13张图片
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第14张图片

最后就是USER这个文件夹了,这个文件夹里面其实就只放置了一个main.c文件:
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第15张图片

接下来,我们在keil工程目录中,添加新的分组,并且将这些分组的组名,跟我们之前新建的文件夹名保持一致:
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第16张图片

然后,我们逐一用鼠标左键双击每个组名,给改分组中添加我们需要的文件,以USER这个分组为例,往其中添加main.c这个文件:
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第17张图片

那么,接下来,我们主要来看每个文件中的内容,说到这里,其实SYSTEM文件夹中的文件,我们基本不用管,因为这个是STC官方提供的一些库函数,只是有些库函数文件中有一些我们不需要的东西,直接删除就好了。我们最主要需要关心的就是USER和BSP这两个分组内的文件。

首先,我们来看bsp_gpio.h这个文件,这里主要是板载输入输出的一些宏定义:

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第18张图片

bsp_gpio.c这个文件中,主要是对板载输入输出口模式进行了配置:
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第19张图片

bsp_timer.h和bsp_timer.c这两个文件,是对定时器进行了配置,不过,实际上本例中并没有用到定时器的相关功能,这里仅仅简单为大家介绍一下定时器的基本配置:
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第20张图片
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第21张图片

bsp_usart.h和bsp_usart.c这两个文件,主要是对串口进行了配置,本例中使用的是串口1,波特率使用的是9600:
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第22张图片
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第23张图片

重头戏主要是在bsp_run.c和bsp_run.h这两个文件中,其bsp_run.h功能可能比较简单一些,仅仅只是声明了两个函数:

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第24张图片

例程的主要功能,基本都是在bsp_run.c这个文件中实现:

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第25张图片

这里,我们重点来看一下UART1的中断函数,这个函数中,主要实现了数据帧的帧头检验、和校验以及数据的缓存。当帧头校验、和校验OK后,让标志位F_Uart1_RX_Finish置1,然后进入数据解析函数:

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第26张图片昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第27张图片

该例程中,串口数据解析主要是解析两条指令,一个是触摸屏的“读指令”(轮询指令)、一个是触摸屏的“写指令”(按键操作):

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第28张图片

其中,在接收到触摸屏的“读指令”(轮询指令)后,单片机会返回一条应答指令,该指令的具体含义请参考ReadMe.txt中的“通信协议”:
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第29张图片

在接收到触摸屏的“写指令”(按键控制)时,单片机会根据指令的具体内容,让对应的输出口输出不同的状态(本例中,笔者仅仅只是将输入口电平做了翻转):
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第30张图片

好了,最后我们就是来看下main.c里面的内容,正因为大部分功能实现都放在了bsp_run.c里面了,所以main.c里面的内容就相对比较简单了,除了调用了定时器配置函数、串口配置函数、GPIO配置函数,然后就是在while循环里面直接跑Device_App_Run函数:
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第31张图片

程序部分就简单给大家分析到这里了,详细的代码大家可以下载本例的源码。现在,我们来开始下载单片机程序到我们的控制板中。

首先,我们打开STC的下载软件,单片机型号选择STC15W4K48S4,串口号根据大家电脑上的实际串口号选择,晶振勾选使用内部晶振,并且将内部晶振频率设置为11.0592MHz,然后点击“打开工程文件”,加载我们编译生成的.hex文件:
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第32张图片

找到我们工程目录下Project->Objects文件夹中的MCGS_Demo.hex文件,点击“打开”按钮即可:

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第33张图片

然后,我们点击“下载/编程”按钮,然后会出现“正在检测目标单片机”的提示:

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第34张图片

这个时候,给板子断电再上电(如果之前板子未上电,这个时候仅仅需要上电即可),程序便开始下载了:

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第35张图片

然后,静静地等待程序下载完成即可,当出现了“操作成功”的提示之后,就说明我们的程序成功下载了:

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第36张图片

接下来,我们需要来验证一下程序是否正确。我们先打开MCGS的HDMI工程,在“设备窗口”的“通用串口父设备”中设置串口号和波特率:

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第37张图片

然后在“子设备”中,设置“最小采集周期”为200ms(这个大家可以根据实际需求设置,但是不宜设的太小):
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第38张图片

接下来,我们开始下载工程,准备模拟运行:
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第39张图片

当显示“工程下载成功”后,我们点击“启动运行”即可模拟运行了,这个时候,我们可以点击触摸屏上的几个输出控制按钮,便可以看到触摸屏和板子上的输出状态都在改变,同时我们可以给板子输入口接入低电平,同样也能看到,当板子上的输入口状态发送改变时,触摸屏上的输如口状态也在改变:

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第40张图片

喜欢工控的小伙伴们,请大家记得多多支持SingleYork!项目源码下载:昆仑通态人机界面与单片机通信实例源码

昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计_第41张图片

你可能感兴趣的:(单片机,嵌入式)