树莓派4曾在一段时间内炒到“天价”,成为理财产品,而国产“类似物”,也如雨后春笋一般,冒出许多国产派。
可以说,现在这些国产派,在硬件设计、资料丰富度、社区支持、稳定性等方面,与树莓派存在着明显差距,不过差距也在逐渐缩小。
那么,国产派与树莓派差距大吗?今天,我们就买来三款国产派——ART-Pi、小熊派、BIGTREETECH Pi,实际评测国产派到底什么水平。
图源丨ProjectZarya
树莓派3B平替 BIGTREETECH PI开发板
开箱评测
原帖地址:
https://www.eeworld.com.cn/aSybHiD
这两年树莓派的价格真是一言难尽,有一个3b+在智能家居控制系统里面用,但平时自己又爱折腾点新花样...又没有新项目报销经费...所以就一直在看有没有国产板子可以替代。
首先简单对比一下BIGTREETECH PI和树莓派3b的参数吧。芯片是老朋友全志h616,64位4和A53 频率略高于树莓派的BCM2837。616这几年大大小小的产品用的非常多,从电视盒、游戏机到开发板各种领域都在用,开发资料已经非常完善了。
40个gpio、蓝牙、无线、4个usb2.0、百兆网卡、microHDMI和3.5耳机孔这些基本都与树莓派一样,bigtree多了can、红外接收功能以及支持4k60hz的输出,总的来说性能已经超过我手中的树莓派3b+了。
开箱以后有这些东西:一只可爱的鸭鸭、一封感谢卡、主板、信号线、排线和散热器。
主板主体 不得不说设计的是真好看诶,黑色主体,红白经典配色gpio用绿色点缀在主板上,我个人还是喜欢这种风格的。
正面是h616,两颗金士顿4Gb,红外接口放在了gpio左侧。背面有内存卡槽和无线模块,附带的天线就是插在这里,使用网线或者离路由器近可以不装。
资料方面给的很全,甚至连外壳的模型都设计好了去打印机直接打印就行。
简单说一下软件方面,
https://github.com/bigtreetech/CB1/releases
从这里面下载好专用的镜像文件,烧录到内存卡中,然后用读卡器打开boot分区的system.cfg文件,输入WiFi和密码。上电后就可以在路由器中找到BTT开头的设备了。记录一下设备的ip地址,用ssh工具远程连接就可以了。
这里注意一下主板type边上有一个红色跳线帽,如果用12v供电的话要拔下来,用type供电则不需要动。
我用的是moba,哈哈算是xshell的替代品了,小巧快捷该有的功能也都有,唯一的缺点是没有中文
显卡性能测试
原帖地址:
https://www.eeworld.com.cn/aWL8iXT
本篇使用经典的测试程序来进行显卡的测试。
Glxgears
跑到90帧以上没问题
GL Mark 2
板卡音频设备输出测试
原帖地址:
https://www.eeworld.com.cn/ayf9SiP
-
查看音频设备
执行命令:biqu@BTT-CB1:~$ aplay -l
检测到H616板卡的音频设备
-
播放音乐
播放板卡系统内的音频文件
执行命令:
biqu@BTT-CB1:/usr/share/sounds/alsa$ aplay -D hw:2,0 audio.wav
-
音频音量大小的控制
使用alsamixer工具来控制音频设备
使用命令:
biqu@BTT-CB1:/usr/share/sounds/alsa$ alsamixer
选择H616音频设备
H616音频设备控制界面
左右按键选择音频参数选项,上下按键参数大小。
USB摄像头测试
原帖地址:
https://www.eeworld.com.cn/au10S40
USB摄像头连接到开发板后,执行命令:lsmod来查看内核加载的USB摄像头硬件设备,安装fswebcamm,执行拍照,生成的图片:
复制到电脑,打开图片:
安装motion软件,修改etc/default/motion配置,执行启动命令,在浏览器地址栏输入开发板的IP:8081,实时查看摄像头数据,这个软件延时有点严重,总是卡顿。
CAN收发测试
原帖地址:
https://www.eeworld.com.cn/aejrnzT
开发板与CAN卡调试助手之间收发通信结果:
SPI收发测试
原帖地址:
https://www.eeworld.com.cn/aaTmLCS
执行命令:$ sudo ./spidev_test -v -D /dev/spidev1.1
不短接板卡上的PH7和PH8,收不到自发的数据,短接后,自发和收的数据一致SPI通信正常。
试试玩游戏
原帖地址:
https://www.eeworld.com.cn/a0irrfT
原帖地址:
https://www.eeworld.com.cn/a48Oav1
虽然本开发板专为3D打印而生,但是由于运行Debian完整系统,性能强,所以可以有很多玩法,等待打印之时玩玩游戏未尝不可。安装nes模拟器就可以玩转各种nes游戏,坦克大战,魂斗罗,冒险岛,都是儿时热门的游戏。玩这种小游戏开发板小才大用权当消遣,后面我们玩玩3D游戏,来体现在开发板的性能。
坦克大战
冒险岛
前面我们玩转了NES游戏,有点不过瘾,开发板性能玩NES有点大才小用了,这一篇我们来玩玩torcs-自动驾驶训练游戏,体现下开发板的性能。
只有两帧多,看起来还是非常吃性能,不知道是不是没有使用GPU的缘故。
通过mqtt接入智能中枢
原帖地址:
https://www.eeworld.com.cn/aO4mLmH
传感器就像智能家居的眼睛,收集环境中的各项数据,汇总起来按情况执行设定好的自动化程序。控制器相当于智能家居的手,自动化任务要通过控制器来实现。原有的项目中使用了温度、湿度、光照、可燃气、人体存在、人脸识别等传感器,舵机、门禁等执行器。
每个传感器都在不同房间的不同位置,所以想接入中枢只能靠无线的方式,目前主流的有蓝牙、WiFi、ZigBee。蓝牙传输距离较短,并且令需一个单片机控制蓝牙模块、ZigBee价格比较贵...每个传感器都配一个ZigBee,全屋大概有二三十个算下来成本惊人,而WiFi就比较友好了,资料多型号多传输距离长无需另外配网关,最关键的是成本极低!esp01s:8mbflash、2个gpio、3v供电71mA。可以说是带WiFi功能的单片机,个人小批量采购单价只需5r+!
直接接入是不行的,需要通过我们前面搭建的mqtt服务器。可以这么理解:mqtt服务器是传输的数据中心,所有的传感器,后面的控制器,以及hass智能中枢都要接入它。
在传输过程中数据是不加密的,以广播的形式在局域网内发送,每个数据包都有一个Topic,网内所有设备都会收到这个数据包,但如果Topic与自己订阅的不相符设备就会直接丢弃,相符时才会进一步读取数据。
所以我们要为每一个传感器分配一个唯一的Topic(是每一个不是每一种哦)用来发布,然后hass要订阅所有传感器的Topic;每一个执行器要订阅一个唯一的Topic用来接收hass的指令。
虽然每个传感器都不一样,但大体思路是相同的。传感器:esp-01s配置好WiFi、mqtt地址、发布的Topic、读取传感器的数据,定时发送。执行器:配置好WiFi、mqtt地址、提前选好订阅的topic、构造好数据包结构、写好解包函数、写好动作函数。esp-01sflash太小是不好做ota了,所以一定要测试好程序,否则需要拆下来重新烧录,很麻烦。
有一点要注意:正常开机运行时GPIO0是不可以下拉的,会进入烧录模式,有些传感器需要用到两个GPIO口,连接时需要注意。如果实在无法避免还有一个办法,先给esp-01s上电,延迟三秒再给传感器上电,这样就可以避免进入烧录模式,具体怎么实现就不细说了。
烧录好程序,上电,打开emqx服务器web端,就可以看到出现了一个新的连接。连接的传感器都可以在这里看到,一定要定义好名称,方便管理。
接下来将传感器的信息显示到hass面板上。在仪表盘里添加各种传感器即可。
边沿检测和视频推流(zmj)
原帖地址:
https://www.eeworld.com.cn/a1OCWPC
**BIGTREETECH PI开发板的USB摄像头(UVC)可以十分轻松的实现基于OPENCV的边沿检测功能。
UVC通俗的讲就是USB摄像头,全称为USB Video Class,即:USB视频类,是一种为USB视频捕获设备定义的协议标准。
USB摄像头的视频流主要通过python调用OpenCV库完成对每一帧图像的边沿检测,参数调节通过滑动条实时调节以获取更好结果,按下ESC键退出测试程序(不得不说python是真的强大)。
代码功能说明:
a.导入必要的库:cv2、numpy、video 和 sys。
b.创建两个滑动条:cv.namedWindow('edge') 用来显示边缘检测的结果窗口,cv.createTrackbar('thrs1', 'edge', 2000, 5000, nothing) 和 cv.createTrackbar('thrs2', 'edge', 4000, 5000, nothing) 用来设置边缘检测的参数。
c.创建一个视频捕获对象:cap = video.create_capture(fn),其中 fn 是指定的视频文件名。
d.在一个无限循环中,从视频捕获对象中读取帧数据:while True:。
e.将读取的帧数据转换为灰度图像:gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)。
f.对灰度图像进行边缘检测:edge = cv.Canny(gray, thrs1, thrs2, apertureSize=5)。
g.将原始图像和边缘检测结果合并:vis = img.copy(),然后将结果图像中非零像素的部分设为绿色:vis = np.uint8(vis/2.),最后将结果图像显示出来:cv.imshow('edge', vis)。
h.监听窗口的关闭事件:ch = cv.waitKey(5),如果按下了ESC键,则退出循环:if ch == 27:。
i.最后打印程序的文档字符串:print(__doc__),并关闭所有窗口:cv.destroyAllWindows()。
测试效果:
小熊派折叠开发板 BearPi-HM Micro
开箱评测
原帖地址:
https://www.eeworld.com.cn/aDanfL8
原帖地址:
https://www.eeworld.com.cn/a44mXP0
以前使用过小熊派的产品,感觉无论是从质量及技术支持、资料完整性上都是很丰富的。这次试用的BearPi-HM Nano开发板也是如此,最特别的是使用折叠方式,将4.3寸LED电容屏与主控板实现“背靠背”安装,很好地保护了FPC软排线,很细心也很有创意。想到我之前试用断的液晶屏的FPC线经常被各种原因融断,这种设计还是很为用户着想。
再看看主控板方面,主要器件都放在正面,如下图所示,采用的主控芯片为STM32MP157,保留了E53接口,可以与符合E53接口规范的板子连接,供电与下载都通过左下角的USB TYPE C口完成,总的来说功能还是很齐全的。
这块板子亮点之二是使用鸿蒙操作系统Openharmony,OpenHarmony相是一个开源项目,具有最基础的操作系统能力,相当于安卓的AOSP。
type-c接口好评,不光是因为用了type-c口,而且是因为支持两端都是type-c的线,接触了几个使用type-c接口的开发板,有的开发板只是接口是,在type-c支持上不是很完美。
通过type-c线给板子供电后,屏幕就点亮了,4.3寸的屏,800X480的分辨率,已经很高了。开机自带了几个应用,天气、闹钟、计算器、曾经红极一时的2048。
天气默认的是杭州,因为没有联网,所以数据也就没有实际意义了,时间也没办法设置。然后居然还自带了锁屏功能,几张春夏秋冬的风景壁纸,看着舒服。
在设置里面可以看到一些具体的信息,比如系统版本Openharmony 3.0、硬件版本、软件版本、设备序列号等。
此外,官方配套入门视频教程、文档教程内容很详细,入门主要参考BearPi-HM Micro十分钟上手教程和B站视频。写得很详细。
工欲善其事,必先利其器,开始玩转这一开发板之前,先得把开发环境搭建好,遵照教程,需要通过多个工具来完成,包括
1、VMWare和Ubuntu操作系统,OpenHarmony采用Linux内核,这里推荐采用的是虚拟机+Ubuntu18.04操作系统
2、STM32CubeProgrammer(2.4.0以上版本),由于主控是STM32MP1系列芯片,下载程序自然首推本家的软件。
3、SSH连接工具、串口连接工具,开发可通过SSH连接Ubuntu环境,通过串口打印出运行日志,推荐使用MobaXterm、XShell等工具。
4、RaiDrive工具,将虚拟机映射到Windows驱动盘的一个小工具。绿色版
5、JRE、CH340驱动等。
串口交互输出
原帖地址:
https://www.eeworld.com.cn/aiHGSKG
通过几天的实践,对于Openharmomy有了更多的了解,比如怎么把一个简单的程序编译到系统里去。
首先需要一个实现功能的源码程序,比如helloworld.c。还需要一个BUILD.gn文件。.gn文件是一种编译构建文件,类似于Cmake。相较于Cmake,当工程规模增大到难以想象的量级时,编译速度和工程模块的划分变得尤为重要,而gn便很好解决了这两个问题。Openharmomy的文档里,介绍了相关的.gn编码规范。
BUILD.gn基本结构如下
import("//build/lite/config/component/lite_component.gni")
executable("生成的库名称") {
output_name = "可执行文件名称"
sources = [ "源文件" ]
include_dirs = []
defines = []
cflags_c = []
ldflags = []
}
lite_component("lite组件名") {
features = [
":库文件",
]
}
导入 gni 组件,将源码编译成库文件,然后将库文件打包成 lite组件,同时,定义好了输出的可执行文件的名称。
将编译后的文件烧录进BearPi-HM Micro,烧录完成后,打开串口助手,通过串口助手,可以使用大部分的linux操作指令。
运行我们编译的程序,查看串口输出,成功打印了源文件里的内容。
整个过程操作下来,发现和组件打交道的次数还是比较多的,OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 组件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的组件。子系统是一个逻辑概念,它具体由对应的组件构成。
组件就是对子系统的进一步拆分,可复用的软件单元,它包含源码、配置文件、资源文件和编译脚本;能独立构建,以二进制方式集成,具备独立验证能力的二进制单元。
利用HDF驱动框架实现LED闪烁
原帖地址:
https://www.eeworld.com.cn/abLibDG
HDF(Hardware Driver Foundation)驱动框架,为驱动开发者提供驱动框架能力,包括驱动加载、驱动服务管理和驱动消息机制。旨在构建统一的驱动架构平台,为驱动开发者提供更精准、更高效的开发环境,力求做到一次开发,多系统部署。
基于HDF框架进行驱动的开发主要分为两个部分,驱动实现和驱动配置,驱动实现包含驱动业务代码和驱动入口注册,这两者开发文档里都提供了模板,比如驱动业务代码。
实际编程时,就可以直接在此模板上扩展,比如BearPi-HM Micro提供的demo。
驱动注册,就是实例化驱动入口,驱动入口必须为HdfDriverEntry(在 hdf_device_desc.h 中定义)类型的全局变量,且moduleName要和device_info.hcs中保持一致。HDF框架会将所有加载的驱动的HdfDriverEntry对象首地址汇总,形成一个类似数组的段地址空间,方便上层调用。
而对于驱动配置,HDF框架使用的是.HCS文件,.HCS文件全称是HDF Configuration Source,是HDF驱动框架的配置描述源码,内容以Key-Value为主要形式。它实现了配置代码与驱动代码解耦,便于开发者进行配置管理。HC-GEN(HDF Configuration Generator)是HCS配置转换工具,可以将HDF配置文件转换为软件可读取的文件格式:在弱性能环境中,转换为配置树源码或配置树宏定义,驱动可直接调用C代码或宏式APIs获取配置。在高性能环境中,转换为HCB(HDF Configuration Binary)二进制文件,驱动可使用HDF框架提供的配置解析接口获取配置。HCS经过HC-GEN编译生成HCB文件,HDF驱动框架中的HCS Parser模块会从HCB文件中重建配置树,HDF驱动模块使用HCS Parser提供的配置读取接口获取配置内容。
和驱动实现一样,驱动配置同样包含两部分,HDF框架定义的驱动设备描述和驱动的私有配置信息,HDF框架定义的驱动设备描述位于:
~\bearpi\project\bearpi-hm_micro_small\device\st\bearpi_hm_micro\liteos_a\hdf_config\device_info\device_info.hcs。
驱动的私有配置信息,则是用户自己添加的配置信息,比如这里的
~\bearpi\project\bearpi-hm_micro_small\device\st\bearpi_hm_micro\liteos_a\hdf_config\led\led_config.hcs
最后,是需要将需要将该配置文件添加到板级配置入口文件
hdf.hcs
device\st\bearpi_hm_micro\liteos_a\hdf_config\hdf.hcs
关于GPIO口的操作,GPIO驱动已经提供了相关的接口。
然后就是led闪烁的业务代码编写了,就是驱动程序指令接受的的代码,用户态向内核态发送指令。
int32_t LedDriverDispatch(struct HdfDeviceIoClient *client, int cmdCode, struct HdfSBuf *data, struct HdfSBuf *reply)
{
uint8_t contrl;
HDF_LOGE("Led driver dispatch");
if (client == NULL || client->device == NULL)
{
HDF_LOGE("Led driver device is NULL");
return HDF_ERR_INVALID_OBJECT;
}
switch (cmdCode)
{
/* 接收到用户态发来的LED_WRITE_READ命令 */
case LED_WRITE_READ:
/* 读取data里的数据,赋值给contrl */
HdfSbufReadUint8(data,&contrl);
switch (contrl)
{
/* 开灯 */
case LED_ON:
GpioWrite(g_Stm32Mp1ILed.gpioNum, GPIO_VAL_LOW);
status = 1;
break;
/* 关灯 */
case LED_OFF:
GpioWrite(g_Stm32Mp1ILed.gpioNum, GPIO_VAL_HIGH);
status = 0;
break;
/* 状态翻转 */
case LED_TOGGLE:
if(status == 0)
{
GpioWrite(g_Stm32Mp1ILed.gpioNum, GPIO_VAL_LOW);
status = 1;
}
else
{
GpioWrite(g_Stm32Mp1ILed.gpioNum, GPIO_VAL_HIGH);
status = 0;
}
break;
default:
break;
}
/* 把LED的状态值写入reply, 可被带至用户程序 */
if (!HdfSbufWriteInt32(reply, status))
{
HDF_LOGE("replay is fail");
return HDF_FAILURE;
}
break;
default:
break;
}
return HDF_SUCCESS;
}
通过代码可以感受到OpenHarmony的设备开发中的驱动调用与单片机的驱动开发不太相同,单片机的驱动调用往往是采用函数调用的方式,但是OpenHarmony没有这样的操作,驱动调用采用的是驱动程序向用户态暴露server后,程序才能通过Dispatch的方式发送指令到驱动程序,并可以将用户态的数据携带到驱动程序,也可以从驱动程序读出数据。像上面的代码就是通过Dispatch向驱动程序发送指令从而实现LED灯的亮灭,当然,内核态也可以向用户态发送数据。
和上一篇,helloword一样,还需要编译文件,对于业务代码,和上一篇一模一样的操作,配置BUILD.gn、applications.json、config.json。对于驱动文件,不但需要自己写的BUILD.gn,还需要修改
~\bearpi\project\bearpi-hm_micro_small\device\st\drivers\BUILD.gn
最后编译,烧录到板子了,和之前一样,打开串口助手 ,通过指令操作led的亮灭状态变化。
试用总结
原帖地址:
https://www.eeworld.com.cn/a0WXX1G
两个月的试用时间,可以说小熊派BearPi-HM Micro真的是一块适合来入门OpenHarmony的板卡,在这之前,完全没有接触过OpenHarmony的代码,这次通过一步步的实践,对OpenHarmony有了很多的认识和了解,不然一直觉得OpenHarmony挺神秘的。
从搭建环境到第一次成功编译源码,都是满满的成就感。虽然遇到各种问题,但是正是在解决这些问题过程当中去认识和了解OpenHarmony的方方面面。对于学习OpenHarmony,小熊派提供的资料可以帮助入门,但是想了解更多,比如为啥这么操作,中间的一些原理,小熊派提供的资料就显得有点不够的,就要推荐看官方的文档了。
官方文档写的很详细,包括一些名词都有介绍,可以说小熊派的资料告诉你怎么去操作,而官方的文档,就是告诉你为什么这么操作,两者结合起来就是知其然知其所以然。官方文档是用markdown写的,所以也可以去自己编辑、备注都很方便。
小熊派BearPi-HM Micro的优点很明显,缺点也是存在的,就是资料的开放性,比如底层bootloader部分,这部分对于想更深入的了解和学习OpenHarmony在STM32的引导过程还是比较重要的,虽然说会开源,但是一直是延期。另一方面不全的就是板卡硬件驱动这块,作为驱动开发方向(小熊派分南向驱动、北向应用),板载这块应该是主要起点。可能是因为部分功能还在完善中,感觉后期可能会补上这块吧,不然少了这部分对于开发就不完整了。
ART-Pi:高性能H7芯片、DIY利器
开箱评测
原帖地址:
https://www.eeworld.com.cn/aD4in5G
发布的时候犹豫了一下,然后就赶上芯片价格暴涨,板子价格也水涨船高了
透明的塑料盒包装,看着不错,就是耐不住快递的暴力,收到的时候,两边碎了,还好板子安然无恙
先来体验一下ART-Pi自带的demo,不同于以往的开发板,自带的demo一般是按键控制led亮灭或者led的闪烁频率,ART-Pi自带的demo,综合了整个板子的硬件资源。
用自带的type-c线连接电脑,会开始安装驱动。
对于stlink部分的驱动,不建议网上下载,即使官网也好多个版本,容易出错,一直以来用的稳妥办法就是安装keil、IAR、cubeMX之类的编辑软件下的驱动,省时省力,效果好
和ST的nucleo板驱动一样,还会映射一个盘符。
一切ok后,就可以打开一个微信小程序了,WIFI配网助手。
要打开手机蓝牙,看来是通过蓝牙,传输WIFI的SSID和密码。
可以扫描蓝牙设备,不能扫描附近的WiFi,要手动填入,然后就很顺利的连接成功了。
打开获取的IP,是一个网页,动态显示了板子上的一些资源信息以及网络状况,因为没有插入SD卡,所以SD卡容量为0
网页和板子的还有一个互动就是,控制板子上一个蓝色和红色的led亮灭。
可以看出,确实是把板载的资源全部用上了。
让ART-Pi持续运行了一个小时的demo,此时用手去触摸H7芯片,摸个几秒就不行了,太烫了,看来这种综合性的应用散热措施是必须要加的啊。
联网同步时间、实现自动连接WiFi
原帖地址:
https://www.eeworld.com.cn/aibbHC8
ART-Pi板载了一个AP6212模块,AP6212是正基AMPAK推出的一款低功耗高性能的WiFi+BT4.2模块,该模块符合802.11b/g/n,其中WiFi功能采用SDIO接口,蓝牙采用UART/I2S/PCM接口,具有StationMode,SoftAP,P2P功能等。
惯例从一个空白模板工程开始,在RT-Thread Setting里打开板载外设AP6212,因为是板级支持包的缘故,到这rt-thread就已经完成初始化AP6212以及网卡了,对比加入AP6212前后,finish组件支持的命令,可以发现增加了很多 。
利用wifi命令,可以实现一些常用操作,比如扫描附件无线信号 ,比如使用join命令来连接WiFi等等。
成功分配地址,尝试ping rt-thread的官网,ping通过。
网络连接ok后,就是获取时间的问题了,rt-thread软件包里有一个netutils的网络工具集。
在软件包里就提供了NTP工具来实现获取NTP服务器的时间
编译下载后,运行却报错了,才想起了,这个包要打开RTC。
为了省事,直接打开软件模拟RTC,因为硬件RTC的话,还需要在board_init里添加RTC的初始化部分代码后,才能完成调用,直接打开软件模拟就省了硬件初始化。
成功获取服务器时间,但是这个还存在一个问题,每次上电后想要查询时间,都要手动连接WiFi,不能自动连接。想到了在体验ART-Pi的一些demo时,WiFi是可以上电自动连接的,那就来移植一下这个功能。
复制到刚新建的模板工程里,因为只复制了这两个函数的调用,所以肯定会报一堆错,那就根据错误来一点点添加,首先找到这两个函数的实体所在,wifi_config.c、wlan_mgnt.c,复制到模板工程。
一直修改到无报错和警告后,下载到板子上,可以看到Auto Connect功能已经使能了。
断电,再上电,已经可以实现自动连接,然后获取时间的效果了。
应用RL-TCPnet实现以太网收发功能及DTU
原帖地址:
https://www.eeworld.com.cn/anfLuLC
关于RTX和RL-TCPnet的应用,不得不提一下安富莱电子,不少经验和技能的积累都来自于对armfly的关注,引用要有出处。这篇文章主要是网络组件的应用。使用MDK的好处是可以方便添加RTX和其组件,反之,为了使用RTX使用MDK是最方便的。首先还是根据原理图更新ETH接口的引脚初始化。
工程代码更新以后,主要就是RL-TCPnet的移植。RTE环境依然继承了这些功能,选择CMSIS Driver,这也就是硬件层的接口,然后勾选Network中的相关选项。我手里没有ART-Pi的扩展板,但是有个LAN8720的模块,正好ARM 有提供标准的驱动,测试下是否可以使用。还可以使用Eric2013改进的具有软件复位的驱动,同样符合CMSIS Driver驱动规范。并且剥离了驱动层的相关文件,更利于更换PHY后或修改电路后的移植工作的进行。
配置后编译代码发现了如下错误,应该是属于编译器方面的问题,工程一直默认是AC6,这个at()使用不符合语法。
搜索后发现安富莱论坛有相关问题,并且版主给出了解决方法,代码修改如下,这是其中一个方案。另外一个方案呢,就是使用AC5编译器,不会报这个错误,如非必要直接切换编译器使用可能更方便些,毕竟点点鼠标比改代码来的方便,哈哈。
还要根据自己的链路上图几项内容配置好,代码的细节不展示了,需要修改的地方整理好了,网络基本也可以通了。目睹一下真容,使用杜邦线连接的模块,与电脑网线直连,<1ms妥妥的。
到这里还要结合上一篇串口应用,进行简单的数据透传。主要利用消息队列传递内容,为后续的指令传递做好预备工作。基于现有的工程,只需要创建消息队列,串口收到数据就往里填,tcp检测到队列数据就发送到客户端,也就是测试用的PC上位机。反之,tcp收到数据直接串口发送出去,这个环回逻辑就实现了基础的DTU功能。
经过一些排错和调试后,就得到了如下测试结果。间隔50ms定时发送测试一段时间后,收发计数依然对的上,用来做一些指令的传递还是没问题的。
VNC模式下的GUI设计框架
原帖地址:
https://www.eeworld.com.cn/afbHCOK
enWin新的版本也有了趋近现代化的设计工具,因为此前做项目时候还是用的GUIBuilder。新的工具一定是更加便捷和高效的,SEGGER还是做了不少精品的。接下来
就进行新工具使用前的准备工作。
1、首先要移植STemWin,在上一次的基础上需要添加一些库文件,也就是emWin的Lib文件以及硬件接口文件,主要部分如下
2、硬件接口驱动的完善,包括内存的分配,显示尺寸、颜色转换等内容。再次站在巨人肩旁上,应用安富莱的底层驱动,因为确实做的比较完善,优化上也下来很大功夫。经过一些调试后,得到了如下的结果,可以正常显示界面。因为打算使用VNC,所以不再移植触摸,显示只是为了能够方便适配底层和远程显示的对比。
3、网络配置。需要有TCP/IP的支持,之前已经做好的了网络通信,可直接应用在工程中。因此只需要在代码添加VNC所需的库函数进行服务初始化操作即可。
GUI_VNC_X_StartServer(0, 0);
GUI_VNC_SetPassword("123456");
GUI_VNC_SetProgName("ART-Pi");
GUI_VNC_RingBell();
5、安装segger的小工具,在MDK的安装文件夹arm下有,各种开发emWin用到的软件聚集在这里。
安装emVNC后,打开会要求输入IP地址,根据板卡设定输入,点击连接后就会出现这样的画面了。
至此,可以使用PC小工具进行STemWin界的预览和操作了,比较方便,也不需要一直连接屏幕了。甚至可以替代嵌入式WEB服务器来进行一些交互操作,省去了要设计网页代码的烦恼。接下来要使用新的AppWizard来进行界面的简单功能设计。
VNC的通信已经在之前调试好了,那么做一下UI的设计就可以了。说起UI又爱又恨,这不无奈之下操起Builder做了一下基本结构。
对照上位机简略的实现压力波形显示,运动信息显示,过程控制按钮,信息记录。这还只是最初的外观,必要的修饰和填充肯定还要做。项目或者说是这次评测的。
搭建ModBus仿真环境
原帖地址:
https://www.eeworld.com.cn/aKSqbnT
工业应用中,ModBus用的也是很广泛的,RTT的软件组件提供了很多的便捷,利用串口以及ModBus模拟软件,可以很快的实现相应的功能。
首先连接硬件,还是用串口连接PC,以便用仿真软件实现ModBus功能。
然后,打开RTT Stdio,更改项目配置(用的是上次通过串口开关LED的项目)
更改RTT Settings后,需要Ctrl-S进行保存。
主要实现串口,编译无错后下载至开发板。
打开终端,按下tab键后可以看到uart_sample的命令,键入uart_sample命令, 然后,pc端打开串口调试器, 就可以得到发送值+1的回馈值了, 串口功能验证之后,在RTT Settings中添加ModBus的软件包,然后配置freemodbus,更改后Ctrl-S保存,然后编译,下载至开发板。然后打开终端,并键入tab键,可以看到mb_master_sample命令了,利用modbus slave模拟modbus设备。
终端键入mb_master_sample命令后,就可以看到ModBus的值发生变化了。
每500ms上述寄存器数值发生变化。
usb接口访问板载存储,模拟U盘
原帖地址:
https://www.eeworld.com.cn/avPqX54
ART-Pi的板载存储还是很丰富的,比如SPI FLAS、SDRAM、内部flash、SD卡,基本该有的都有。前面几篇已经涉及的差不多了,对于这些存储的访问有多种方式,可以MCU直接读取,可以MCU读取串口发送到电脑,也可以USB直接访问读写。
首先,依旧是先建一个空白工程,对于空白工程,可以看一下,只打开了UART和pin设备。在建好的空白工程里打开文件系统设置,打开文件系统后,就会出现SD卡和spi flash,那就同时挂载这两个吧,编译烧录,再来对比一下设备变化。
测试一下文件传输,发现对于文件的传输,应该还要优化下程序,小文件都没问题,可以很顺利的拷贝,但是对于几个G的电影,就会传输卡死。
最后,就是ART-Pi最好要加上散热片,运行时,真的是烫手。