电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计
分 享
扫描二维码分享
昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计
芯知识学堂
串口通信
单片机
芯知识学堂SingleYork
关注
发布时间: 2020-01-06
丨
阅读: 1303
大家好,我是『芯知识学堂』的SingleYork,前面给大家介绍了“昆仑通态人机界面与单片机通信实战教程三:脚本驱动与HDMI工程的关联”,今天笔者就要来给大家介绍这个教程的最后一个内容,那就是:“昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计”。 该例程笔者选用的是自己做的,以STC15W4k48S4这款单片机开发的一款带有14路输入和12路输出的控制板(3D图如下),软件开发平台为keil4。  那么,我们首先来开打keil软件,新建一个工程:  我们给新建的工程名,命名为“MCGS_Demo”,并且保存到自定义的文件夹中:  选择单片机型号为STC15W4K32S4,准确的说,这应该是STC15W4K32S4这个系列,在后面单片机程序下载的时候,可以选择这个系列下的某一个型号的单片机。  选定好单片机后,我们点击“OK”按钮即可,然后会弹出如下对话框,这个地方我们选择“是”或者“否”都没有太大的影响:  笔者就以选择“是”为例,就这样,一个新的工程就建好了。刚建好的工程,默认只有这么一些东西:  那么,为了便于后续项目的管理,以及工程的移植,我们来对整个工程的文件夹做一些管理,在原来的工程目录中,我们新建了BSP、Project、ReadMe、STCLib、SYSTEM、USER几个文件夹:  同时,我们将之前新建工程的时候生成的文件,全部移到了Project这个文件夹中:  然后,在BSP文件夹中,主要是放置一些板级支持包文件,笔者偷了一下懒,就没建额外的文件夹区分头文件和C文件了,就统一放到这个BSP文件夹中了:  ReadMe这个文件夹中,主要是放置了一个ReadMe.txt的说明文档,主要就是关于这个工程的一些说明,该例程中,笔者主要是添加了“通信协议”的说明:  STCLib文件夹中,主要是放置了一个config.h的配置文件,这个文件主要是配置了系统使用的晶振频率,以及包含了STC15系列单片机的头文件,这里需要说明的是,软件中晶振频率的配置,要跟实际下载时晶振频率的选择要一致,否则,有些功能就可能出问题:  SYSTEM这个文件夹中,主要放置了STC15系列单片机的一些库文件,在这个文件夹中,单独设置了两个文件夹inc和src,其中,inc文件夹主要是放置了该项目用到的相关库的头文件(.h文件),src文件夹中主要放置了该项目用到的相关库的一些源文件(.c文件):    最后就是USER这个文件夹了,这个文件夹里面其实就只放置了一个main.c文件:  接下来,我们在keil工程目录中,添加新的分组,并且将这些分组的组名,跟我们之前新建的文件夹名保持一致:  然后,我们逐一用鼠标左键双击每个组名,给改分组中添加我们需要的文件,以USER这个分组为例,往其中添加main.c这个文件:  那么,接下来,我们主要来看每个文件中的内容,说到这里,其实SYSTEM文件夹中的文件,我们基本不用管,因为这个是STC官方提供的一些库函数,只是有些库函数文件中有一些我们不需要的东西,直接删除就好了。我们最主要需要关心的就是USER和BSP这两个分组内的文件。 首先,我们来看bsp_gpio.h这个文件,这里主要是板载输入输出的一些宏定义:  bsp_gpio.c这个文件中,主要是对板载输入输出口模式进行了配置:  bsp_timer.h和bsp_timer.c这两个文件,是对定时器进行了配置,不过,实际上本例中并没有用到定时器的相关功能,这里仅仅简单为大家介绍一下定时器的基本配置:   bsp_usart.h和bsp_usart.c这两个文件,主要是对串口进行了配置,本例中使用的是串口1,波特率使用的是9600:   重头戏主要是在bsp_run.c和bsp_run.h这两个文件中,其bsp_run.h功能可能比较简单一些,仅仅只是声明了两个函数:  例程的主要功能,基本都是在bsp_run.c这个文件中实现:  这里,我们重点来看一下UART1的中断函数,这个函数中,主要实现了数据帧的帧头检验、和校验以及数据的缓存。当帧头校验、和校验OK后,让标志位F_Uart1_RX_Finish置1,然后进入数据解析函数:   该例程中,串口数据解析主要是解析两条指令,一个是触摸屏的“读指令”(轮询指令)、一个是触摸屏的“写指令”(按键操作):  其中,在接收到触摸屏的“读指令”(轮询指令)后,单片机会返回一条应答指令,该指令的具体含义请参考ReadMe.txt中的“通信协议”:  在接收到触摸屏的“写指令”(按键控制)时,单片机会根据指令的具体内容,让对应的输出口输出不同的状态(本例中,笔者仅仅只是将输入口电平做了翻转):  好了,最后我们就是来看下main.c里面的内容,正因为大部分功能实现都放在了bsp_run.c里面了,所以main.c里面的内容就相对比较简单了,除了调用了定时器配置函数、串口配置函数、GPIO配置函数,然后就是在while循环里面直接跑Device_App_Run函数:  程序部分就简单给大家分析到这里了,详细的代码大家可以下载本例的源码。现在,我们来开始下载单片机程序到我们的控制板中。 首先,我们打开STC的下载软件,单片机型号选择STC15W4K48S4,串口号根据大家电脑上的实际串口号选择,晶振勾选使用内部晶振,并且将内部晶振频率设置为11.0592MHz,然后点击“打开工程文件”,加载我们编译生成的.hex文件:  找到我们工程目录下Project->Objects文件夹中的MCGS_Demo.hex文件,点击“打开”按钮即可:  然后,我们点击“下载/编程”按钮,然后会出现“正在检测目标单片机”的提示:  这个时候,给板子断电再上电(如果之前板子未上电,这个时候仅仅需要上电即可),程序便开始下载了:  然后,静静地等待程序下载完成即可,当出现了“操作成功”的提示之后,就说明我们的程序成功下载了:  接下来,我们需要来验证一下程序是否正确。我们先打开MCGS的HDMI工程,在“设备窗口”的“通用串口父设备”中设置串口号和波特率:  然后在“子设备”中,设置“最小采集周期”为200ms(这个大家可以根据实际需求设置,但是不宜设的太小):  接下来,我们开始下载工程,准备模拟运行:  当显示“工程下载成功”后,我们点击“启动运行”即可模拟运行了,这个时候,我们可以点击触摸屏上的几个输出控制按钮,便可以看到触摸屏和板子上的输出状态都在改变,同时我们可以给板子输入口接入低电平,同样也能看到,当板子上的输入口状态发送改变时,触摸屏上的输如口状态也在改变:  至此,本节的内容就全部介绍完毕了,关于这节内容,要是有不明白的地方大家可以关注我们的微信公众号『芯知识学堂』,然后在公众号菜单“获取资源”->“联系我们”中加入我们的群即可交流。 另外,如果需要例程源码的小伙伴们,可以直接在我们公众号回复“昆仑通态”,即可获取到关于该例程的源文件,源文件还在更新中,待例程编写完成,会全部上传到链接中,感谢大家的支持! 喜欢工控的小伙伴们,请大家记得多多支持SingleYork! 独学而无友,则孤陋而寡闻,欢迎大家将我们的文章分享到你们的朋友圈,或者分享给更多的好友,大家一起来互相学习,感谢大家的支持!
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
芯知识学堂SingleYork
擅长:消费电子、工控电子、安防电子、光电显示、设计,制造及服务,测试仪器及设备
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交