第六十四章综合测试实验
为了方便大家使用和验证综合例程,本章内容是综合例程的使用介绍。目的是展示STM32H7的强大处理能力,并且可以测试开发板的大部分功能。本实验代码只提供寄存器版本,存放的路径是:MiniPRO STM32H750开发板资料盘(A盘)à4,程序源码à1,标准例程-寄存器版本à实验52 综合测试实验,代码非常多,这里不讲代码,只讲功能。
本章将分为如下2个小节:
64.1 综合测试实验简介
64.2 综合测试实验详解
64.1 综合测试实验简介
MiniPro STM32H750开发板硬件介绍请参考《MiniPro STM32H750 硬件参考手册_V1.0.pdf》。为了展示STM32H7系列强大的处理能力,综合例程实现了23个界面功能,分别是:电子图书、数码相框、游戏机、视频播放、时钟、系统设置、计算器、记事本、运行器、手写画笔、照相机、无线传书、USB连接、RGB彩灯、二维码、人脸识别、电压表、蜂鸣器、按键测试、LED测试、拨号、应用中心和短信。
电子图书:支持.txt/.c/.h/.lrc等4种格式的文件阅读。
数码相框:支持.bmp/.jpeg/.jpb/.gif等4种格式的图片文件播放。
游戏机:支持大部分NES和SMS游戏(.nes/.sms),支持USB手柄/键盘控制。
视频播放:支持.avi格式(MJPEG编码)的视频播放(带音频),JPEG硬解码。
时钟:支持温度、时间、日期、星期的显示,同时具有指针式时钟显示。
系统设置:整个综合实验的设置。
计算器:一个科学计算器,支持各种运算,精度为12位,支持科学计数法表示。
记事本:可以实现文本(.txt/.c/.h/.lrc)记录编辑等功能,支持中英文输入,手写识别。
运行器:即SRAM IAP功能,支持.bin文件的运行(文件大小+SRAM大小≤448K)。
手写画笔:可以作画/对bmp图片进行编辑,支持画笔颜色/尺寸设置。
照相机:可以拍照(.bmp/.jpg格式,需摄像头模块支持),支持自动对焦和参数设置。
无线传书:通过无线模块,实现两个开发板之间的无线通信。
USB连接:支持和电脑连接读写SD卡/SPI FLASH 的内容。
RGB彩灯:通过设置RGB三色灯的控制占空比,实现不同颜色显示。
二维码:支持二维码生成&二维码/条形码识别(需摄像头支持)。
人脸识别:一个简单的图像识别应用,可以实现人脸识别(需摄像头支持)。
电压表:用于测量0~3.3V的直流电压源。
蜂鸣器:用于测试蜂蜜器。
按键测试:用于测试三个功能按键。
LED测试:用于测试RGB灯。
拨号:支持拨打电话(需要GSM模块支持)。
应用中心:可扩展16个应用程序,我们实现了其中1个(红外遥控),其他预留。
短信:支持短信读取、发送、删除等操作(需要GSM模块支持)。
以上,就是综合实验的23个功能简介,涉及到的内容包括:GUI(ALIENTEK编写,非ucGUI)、UCOSII、内存管理、图片解码、文件系统、USB(从机)、IAP、NES模拟器、手写识别、汉字输入等非常多的内容。下面,我们将详细介绍这23个功能。
64.2 综合测试实验详解
要测试MiniPro STM32H750开发板综合测试实验的全部功能,大家得自备1个TF卡、1个DS18B20温度传感器(非必须)、1个GSM模块、1个ALIENTEK OV5640摄像头模块和GSM模块等。不过,就算没有这些东西,综合实验还是可以正常运行的,只是有些限制而已,比如:不能保存新建的记事本、不能保存新建的画图、不能使用摄像头功能、不能拨号、不能收发短信等。除了这几个,其他功能基本都可以正常运行。
预备知识:
1,系统支持:ALIENTEK 2.8寸电阻屏、ALIENTEK 3.5寸电阻屏、ALIENTEK 4.3寸电容屏和ALIENTEK 7寸电容屏(SSD1963方案),自动识别。
2,系统针对不同分辨率的屏幕,不同界面,会采用不同的字体和图标,以达到最佳效果。
3,系统主界面,有3页,可以通过滑屏切换。总共有23个,其中,底部是3个固定图标。
4,系统测试有可能需要比较大电流(4.3屏、7寸屏)供电,强烈建议同时使用USB UART和USB SLAVE接口供电。
有了以上预备知识,我们先来看看MiniPro STM32H750开发板综合测试实验的启动界面,启动界面如图64.2.1所示:
图64.2.1 综合实验启动界面
注意:综合实验支持屏幕截图(通过USMART控制,波特率为115200),本章所有图片均来自屏幕截图!
图64.2.1总共有3个截图拼成,分别代表2.8寸、3.5寸和4.3寸/7寸屏模块,显示内容都一样,但是图标大小和文字大小各不相同。图片显示了综合实验的详细启动过程,首先显示了版权信息,软硬件版本,接着显示了LCD驱动器的型号(LCD ID),然后显示CPU和内存信息(16MB,指的是QSPI FLASH是16MB),之后显示QSPI FLASH的大小,接着开始初始化RTC和文件系统(FATFS),然后显示SD卡容量、FLASH Disk容量(注意 FLASH Disk就是指QSPI FLASH,因为我们划分了7360KB空间给FATFS管理,所以FLASH Disk的容量显示为7360KB)。U Disk表示U盘的容量,由于插入U盘,所以显示0MB,状态列显示ERROR。
接着,就是硬件检测,完了之后检测字库和系统文件,再初始化触摸屏,加载系统参数(参数保存在24C02里面),最后启动系统。在加载过程中,任何一个地方出错,都会显示相应的提示信息,请在检查无误后,按复位重启。
这里有几个注意的地方:
- 如果没插入SD卡,其容量显示0,并提示 ERROR,不过系统还是会继续启动,因为就算没有SD卡系统还是可以启动的(前提是QSPI FLASH(25Q128)里面的系统文件和字库文件都是正常的)。
- 系统文件和字库文件都是存在QSPI FLASH(25Q128)里面的,如这些文件被破坏了,在启动的时候,会提示Font Error / SYSTEM File Error。解决方法如下:准备一个TF卡,并拷贝SYSTEM文件夹(注意:这个SYSTEM文件夹不是开发板例程里的SYSTEM文件夹,而是光盘根目录àSD卡根目录文件àSYSTEM文件夹)到TF卡根目录,然后TF卡插入开发板,按复位重启,然后开发板会自动更新文件。
- SPI Flash Disk是从QSPI FLASH(25Q128)里面分割7360KB空间出来实现的,强制将4K字节的扇区改为512字节使用,所以在写操作的时候擦除次数会明显提升(8倍以上),因此,如非必要,请不要往SPI Flash Disk里面写文件。频繁的写操作,很容易将SPI Flash Disk写挂掉。
- 在系统启动时,一直按着KEY0不放(加载到Touch Check时),可以进入强制校准(仅电阻屏支持)。当你发现触摸屏不准的时候,可以使用这个办法强制校准。
- 在系统启动时,一直按着KEY1不放(加载到Font Check时),可以强制更新字库。
- 在系统启动时,一直按着WK_UP不放(加载到FLASH容量时),可以选择是否擦除所有文件(清空SPI FLASH),当需要重新更新的时候,建议先用此方法擦除,再更新。
- 本系统用到按键KEY0做返回键(类似手机的HOME键),进入主界面的APP功能后,可以通过KEY0返回。
在SYSTEM Starting…之后,系统启动UCOSII,并加载SPB界面,在加载成功之后,来到主界面,主界面如图64.2.2~64.2.4所示:
图64.2.2 综合实验系统主界面(2.8寸屏版本)
图64.2.3 综合实验系统主界面(3.5寸屏版本)
图64.2.4 综合实验系统主界面(4.3/7寸屏版本)
从上面三张图可以看出,2.8寸、3.5寸、4.3寸和7寸屏的主界面都有3个页面(滑屏可切换),总共是23个图标。每个图标代表一大功能,主界面顶部具有状态栏,显示GSM模块信号质量、运营商、TF卡状态、CPU使用率和时间等信息。
注意:GSM模块信号质量和运营商,必须是接了ATK-SIM900A GSM模块后,才可能正常显示的,否则信号质量显示灰色,运营商显示:无移动网。
ALIENTEK ATK-SIM900A GSM模块与MiniPro STM32H750开发板的连接方式如下:
用杜邦线将开发板的PA3(RX)接GSM模块的STXD脚,将开发板的PA2(TX)接GSM模块的SRXD脚。最后共地,开发板上随便找一个GND用杜邦线和GSM模块的GND连接起来。
只有GSM模块连接好,SIM卡正常,且长按GSM模块的PWR_KEY开机后,开发板才会显示如图64.2.4所示的信号质量和运营商,才可以进行拨号和短信功能测试!!如果不显示信号质量和运营商,请检查是否有GSM模块,或者GSM模块是否工作正常!
回到主界面,主界面默认是简体中文的,我们可以在系统设置里面设置语言,综合测试实验支持3种语言选择:简体中文、繁体中文和英文。
在进入主界面之后,开发板上的LED0开始有规律的短亮(每2.5秒左右亮100ms),提示系统运行正常,我们可以通过LED0判断系统的运行状况。另外,如果运行过程中,出现HardFault的情况,系统则会进入HardFault中断服务函数,此时LED0和LED1都会闪烁,提示系统故障。同时在串口打印故障信息。通过串口,系统会打印其他很多信息,最常打印的是内存使用率,然后我们还可以通过USMART对系统进行调试。
我们可以通过点击任何一个图标,选中,然后再次点击,即可进入该图标的功能。接下来,我们主要以4.3屏为例,给大家讲解综合实验。2.8屏、3.5屏和7寸屏操作基本一模一样,下面就不再分别贴图了。
在任何界面下,都可以通过按KEY0返回上一级,直至返回到主界面。
上面已经介绍完系统启动,下面开始介绍各个功能。
64.2.1 电子图书
双击主界面的电子图书图标,进入如图64.2.1.1所示的文件浏览界面:
图64.2.1.1 文件浏览界面
图64.2.1.1中,左侧的图是我们刚刚进入的时候看到的界面(类似在XP/WIN7上打开我的电脑),可以看到我们有2个盘,磁盘名字分别是:正点原子和ALIENTEK。正点原子是我们TF卡的卷标(即磁盘名字),ALIENTEK是板载QSPI FLASH磁盘的卷标。注意:如果没有插入TF卡,则只会显示ALIENTEK这一个卷标。我们可以选择任何一个磁盘打开,并浏览里面的内容。
界面的上方,显示文件/文件夹的路径。如果当前路径是磁盘/磁盘根目录则显示磁盘图标,如果是文件夹,则显示文件夹图标,另外,如果路径太深,则只显示部分路径(其余用…代替)。
界面的下方显示磁盘/文件夹信息。
界面的下方,显示磁盘信息/当前文件夹信息。对磁盘,则显示当前选中磁盘的总容量和可用空间,对文件夹,则显示当前路径下文件夹总数和文件总数,并显示你当前选中的是第几个文件夹/文件。
双击图64.2.1.1中的“正点原子”,打开TF卡,得到图64.2.1.1右侧图片所示的界面,选中TEXT文件夹,双击打开得到如图64.2.1.2所示界面:
图64.2.1.2 目标文件和文本阅读
图64.2.1.2左侧显示了当前文件夹下面的目标文件(即电子图书支持的文件,包括.txt/.h/.c/.lrc等格式,其中.txt/.h/.c文件共用1个图标,.lrc文件单独一个图标)。另外,如果文件名太长,在我们选中该文件名后,系统会以走字的形式,显示整个文件名。
我们打开一个txt文件,开始文本阅读,如图64.2.1.2右侧的图片所示,同样我们可以通过滚动条/拖动的方式来浏览,图中我们还看到有一个光标,触摸屏点到哪,它就在哪里闪烁,可以方便大家阅读。
当我们想退出文本阅读的时候,通过按按键KEY0实现,按一下KEY0,则又回到查找目标文件状态(左侧图),按返回按钮可以返回上一层目录,如果再按一次KEY0则直接返回主界面。
64.2.2 数码相框
双击主界面的数码相框图标,进入文件浏览界面,这个和64.2.1节差不多,我们找到存放图片的文件夹,如图64.2.2.1所示:
图64.2.2.1 文件浏览和图片播放
左侧是文件浏览的界面,可以看到在PICTURE文件夹下总共有27个文件,包括gif/jpg/bmp等,这些都是数码相框功能所支持的格式。右侧图片显示了一个正在播放的GIF图片,并在其左上角显示当前图片的名字。当然,我们也可以播放bmp和jpg文件,如图64.2.2.2所示:
图64.2.2.2 bmp和jpg图片播放
对于bmp和jpg文件,基本没有尺寸限制(但图片越大,解码时间越久),但是对于gif文件,则只支持尺寸在LCD分辨率以内的文件(因为gif图片我们不好做尺寸压缩处理),超过这个尺寸的gif图片将无法显示!!
我们可以通过按屏幕的上方(1/3屏幕)区域切换到上一张图片浏览;通过按屏幕的下方(1/3屏幕)区域切换到下一章图片;通过单击屏幕的中间(1/3屏幕)区域可以暂停自动播放,同时LED1亮,提示正在暂停状态,同样,通过按TPAD按钮,可以返回文件浏览状态。
图片浏览支持两种自动播放模式:循环播放/随即播放。大家可以在系统设置里面设置图片播放模式。系统默认是循环播放模式,在该模式下,每隔4秒左右自动播放下一张图片,依次播放所有图片。而随机播放模式,也是每隔4秒左右自动播放下一张图片,但是不是顺序播放,而是随机的播放下一张图片。
64.2.3游戏机
综合测试实验移植了一个非常强大的NES模拟器,核心部分采用汇编实现,效率极高,支持音频输出(由于MiniPro STM32H750开发板没有喇叭,所以无法输出音频),支持MAP,支持绝大部分NES游戏的运行。综合性能超过infoNES。该模拟器由开源电子网(http://www.openedv.com/forum.php)论坛网友:ye781205编写,然后ALIENTEK移植到本开发板上,即游戏机。
游戏机特点如下:
- 支持NES和SMS两种游戏模拟器。
- 支持MAP,可运行绝大部分NES游戏。
- 支持USB手柄(目前已测试了迪龙PU201、PU401、PU701、蓝觉L600、酷孩USB 无振动手柄等)。
- 支持USB键盘输入,可双人游戏。键盘与手柄功能对应关系如表64.2.3.1 所示。
- 支持声音输出。
6,支持全速运行(60帧),在4.3寸屏会放大4倍处理(480*480分辨率)。
标准FC手柄功能 | A | A连击 | B | B连击 | 上 | 下 | 左 | 右 | Select | Start | |
对应USB键盘按键 | |||||||||||
手柄1(主) | K | I | J | U | W | S | A | D | 空格 | 回车 | |
手柄2(从) | 3 | 6 | 2 | 5 | ↑ | ↓ | ← | → |
表64.2.3.1 USB键盘按键与手柄功能对应关系
上表中的3、6、2、5等数字,是指小键盘的数字按键。另外,需要注意:玩游戏的时候,USB_SLAVE不要插电脑,否则无法识别USB键盘/USB手柄!!!
双击主界面的系统设置图标,如果当时插着U盘,屏幕将提示:请先拔掉U盘。然后,会提示:请插入USB手柄/键盘。然后进入nes/sms文件浏览界面,如图64.2.3.1所示:
图64.2.3.2 文件浏览和超级玛丽游戏
上图中,左侧为nes文件浏览界面,我们随便选择一个打开即可开始游戏了,记得插上手柄哦!右侧的图片为经典的超级玛丽游戏界面,当然还可以玩很多其他经典游戏,如下面的图片所示:
图64.2.3.3 冒险岛和魂斗罗
图64.2.3.4 三木童子和双截龙
图64.2.3.5 炸弹人和SD快打
图64.2.3.6 洛克人和90坦克
这里,我们仅列出了几种游戏,这都是80后童年时玩的经典游戏,大家可以回味一下当年的经典了。
64.2.4视频播放
MiniPro开发板的综合实验支持视频播放(不带声音),硬件解码MJPEG格式的avi文件,实现视频播放。支持的视频格式为:.avi,视频必须使用MJPEG压缩,视频分辨率必须小于等于屏幕分辨率。
特别提醒:一般网络下载的视频文件( .avi/.rmvb/.mkv/.mp4 等),本播放器不支持,必须通过软件转换(狸窝全能视频转换器),才可以,详细转换方法,见51.4节。
双击主界面的视频播放图标,进入文件浏览界面,这个和64.2.1节差不多,只是这里我们浏览的文件变为了.avi的视频文件,我们找到存放视频文件的文件夹,如图64.2.4.1所示:
图64.2.4.1 文件浏览和avi视频播放
左侧是文件浏览的界面,可以看到在视频文件夹下总共有21个视频文件。右侧图片则是我们视频播放器的主界面,该界面显示了当前播放视频的名字、播放进度、播放时长、总时长、音频采样率、视频帧率、视频分辨率、音量、当前文件编号、总文件数等信息。下方的5个按键分别是:目录、上一个视频、暂停/播放、下一个视频、返回。点击视频播放进度条,可以直接设置视频播放位置,点击声音进度条,可以设置音量(当然本开发板是无法输出音频的)。
视频播放器还可以设置播放模式(在系统设置里面设置)。播放模式有3种:全部循环、随机播放、单曲循环,默认为全部循环。
我们可以通过按目录按钮,来选择其他视频文件;按返回按键(或按键KEY0)则可以返回主界面。视频播放不支持后台播放,所以一旦退出到文件浏览或者主界面,则停止视频播放。
在图64.2.4.1 中,右侧图片播放的是480*272的视频。相对于 STM32F4的软解码视频(最大仅支持480*272分辨率,10帧),STM32H7的硬件解码视频性能非常强悍,实测性能:800*480 分辨率的视频,可以到45帧。其他分辨率的帧率,大家可自行测试。
分辨率越小,就可以获得更快的帧率。当视频横向分辨率大于屏幕的宽度时,将自动改为横屏播放,此时不会显示视频相关信息,只播放视频,如图64.2.4.2所示:
图64.2.4.2 播放1024*600分辨率的AVI视频
在横屏播放模式下,通过按键KEY_UP和KEY1,可以切换到上一个视频和下一个视频。
当视频横向分辨率小于等于屏幕宽度时,系统又会自动切换为竖屏模式播放视频。
64.2.5 时钟
双击主界面的时钟图标,进入时钟界面,如图64.2.5.1所示:
图64.2.5.1 时钟界面
图64.2.5.1的左侧图片为加载时钟界面时的提示界面,表明没有检测到DS18B20,启用STM32H750的内部温度传感器,之后进入时钟主界面,如右侧图片所示。在时钟界面,我们显示了日期、时间、温度、星期等信息,并且在屏幕上方区域,有一个指针式时钟显示。我们可以在系统设置里面设置时间和日期,并且还可以设置闹钟和闹铃,这个我们后面再介绍。
同样,按KEY0可以返回主界面。
64.2.6 系统设置
双击主界面的系统设置图标,进入系统设置界面,如图64.2.6.1所示:
图64.2.6.1 系统设置主界面和时间设置界面
上图中左侧的图片为系统设置主界面,在系统设置里面,总共有15个项目:时间设置、日期设置、闹钟时间设置、闹钟开关设置、闹钟铃声设置、语言设置、数码相框设置、视频播放器模式设置、背光设置、屏幕校准、系统文件更新、恢复默认设置、系统信息、系统状态、关于。通过这15个项目,我们可以设置和查看各种系统参数。下面我们将一一介绍这些设置。
首先是时间设置,如图64.2.6.1右侧图片所示,双击时间设置,就会弹出一个时间是指对话框,通过这个对话框,我们就可以设置开发板的时间了。设置好之后点击确定回到系统设置主界面,如果想放弃设置,则直接点击取消(或KEY0)。
再来看看日期设置和闹钟时间设置,如图64.2.6.2所示:
图64.2.6.2 日期设置和闹钟时间设置
上图中,左侧的对话框用来设置系统日期,右侧的对话框用来设置闹钟时间。操作上同前面介绍的时间设置的方法一模一样。关于闹钟,我们等下再详细介绍,先看闹钟开关设置和闹钟铃声设置两个界面,如图64.2.6.3所示:
图64.2.6.3 闹钟开关设置和闹钟铃声设置
上图中,左侧对话框用来设置闹钟开关,右侧对话框用来设置闹钟铃声。这里,我们来介绍一下本系统的闹钟,本系统的闹钟以星期为周期,以时间为点实现闹钟,比如判断一个闹钟是否应该响铃的标准是:先判断星期的条件是否满足,比如上图我们设置是周一到周五闹铃,今天(2022年6月20号)是周一,所以满足星期条件,接着看时间是否相等,如果两个条件都满足,则闹铃。假定当前时间是19:35,我们设置的闹钟时间是19:38,所以时间还不相等,故不闹铃,当时间来到19:38的时候,系统将会闹铃。闹铃铃声有4种,如上图右侧图片所示,铃声由蜂鸣器产生,铃声1对应“滴”,铃声2对应“滴、滴”,铃声3和4依此类推。当闹钟时间到来的时候,产生闹铃,如图64.2.6.4所示:
图59.2.6.4 闹铃和语言设置
上图中,左侧的图片显示正在闹铃。此时会弹出一个闹钟的对话框,并显示当前时间,同时蜂鸣器发出“滴、滴、滴、滴”的闹铃声(铃声4)。按取消(或KEY0)可以关闭闹钟,按再响,则5分钟后(20:45)继续闹铃。右侧的图片为语言设置界面,系统支持3种语言设置,默认为简体中文,设置为繁体中文/English之后如图64.2.6.5所示:
图64.2.6.5 繁体中文和English
上图显示了繁体中文和English的设置,不过本章我们还是以简体中文为例进行介绍。下面,我们来看看数码相框设置和视频播放器模式设置,如图64.2.6.6所示:
图59.2.6.6 数码相框设置和视频播放器模式设置
前面提到数码相框支持全部循环播放和随机播放两种模式,就是通过上图左侧的界面设置的。而视频播放器的三个播放模式,则通过右侧的界面进行设置。接下来看看背光设置和系统文件更新,如图64.2.6.7所示:
图64.2.6.7 背光设置和系统文件更新
上图中,左侧的界面用于设置LCD背光,背光通过PWM控制。背光亮度,值越大越亮。
上图中,右侧是双击系统文件更新提示,这里的系统文件是指SYSTEM文件夹里面除字库文件外的所有内容。综合测试实验之所以可以没有TF卡也能正常运行,主要是将SYSTEM文件夹(注意这个不是源码里面的SYSTEM文件夹!!)拷贝到了SPI Flash(即25Q128)里面,这样,我们所有的系统资源都可以从25Q128里面获得,从而正常启动。
SYSTEM文件夹的文件目前占用内存总大小为6.69MB。这些文件一般不要修改,如果你想自己DIY的话,那可以修改这些文件,以达到你要的效果,不过建议修改之前备份一下,搞坏了还可以还原。
第10项,屏幕校准,这里因为我们用的是4.3寸电容触摸屏为例讲解的,电容屏不需要校准,所以这个设置对4.3屏模块无效。如果是电阻屏,点击该项则可以进入屏幕校准,根据提示完成校准即可。
接下来,我们看看恢复默认设置和系统信息,如图64.2.6.8所示:
图64.2.6.8恢复默认设置和系统信息
上图左侧图片为恢复默认设置功能确认界面,当选择确定后,系统将恢复默认设置,除了RTC时间日期以外的所有设置,都将恢复默认值,方便大家在设置乱以后,恢复正常。
上图右侧图片为系统信息界面,通过该界面,可以看到软硬件的详细信息。
最后,我们来看看系统状态和关于界面,如图64.2.6.9所示:
图64.2.6.9系统状态和关于界面
上图中,左侧的界面显示了当前系统资源状况,显示了当前CPU使用率,CPU温度以及内存使用率。
右侧的图片显示了MiniPro STM32H750开发板的软硬件版本以及产品序列号,这个序列号是全球唯一的,每个开发板都不一样。
64.2.7计算器
MiniPro STM32H750开发板实现了一个简单的科学计算器,可以计算加减乘除、开方、平方、M^N次方、正弦、余弦、正切、对数、倒数、格式转换等一些常见的计算器功能,精度为12位,支持科学计数法表示。双击主界面的计算器图标,进入计算器主界面,如图64.2.7.1所示:
图64.2.7.1 计算器主界面和加法计算
上图中,左侧的图片为科学计算器的主界面,和我们手机用的计算器基本一样,使用上非常简单,我们就不详细介绍了。右侧的图片为加法计算,支持累加功能。
图64.2.7.2 计算器主界面和加法计算
上图为乘法计算和倒数计算,可以看到,结果是以科学计数法表示的,最大支持200位指数表示,超过范围直接显示错误(E)。
该计算器还支持格式转换(按FMT键),可以将十进制数据(最大为65535,超过部分将被丢弃)转换为16进制/二进制数据表示,如图64.2.7.3所示:
图64.2.7.3 格式转换
上图显示我们将十进制的65535转换为16进制/二进制后的表示。计算器的其他功能,我们就再列举了,感兴趣的朋友可以慢慢摸索,当然也可以在这个基础上进行改进。通过按KEY0可以返回主界面。
64.2.8 记事本
双击主界面的记事本图标,首先弹出模式选择对话框,如图64.2.8.1所示:
图64.2.8.1 模式选择和新建文本文件
记事本支持2种模式:1,新建文本文件,这种方式完全新建一个文本文件(以当前系统时间命名),用来输入信息。2,打开已有文件,这种方式可以对已有的文件进行编辑。
上图中,右侧的界面为我们选择新建文本文件后的界面,此时出现一个空白编辑区和一个闪烁的光标,我们通过下方的键盘输入信息即可,这个输入键盘和我们的手机键盘十分类似,输入方法也是一模一样,支持中文、字母、数字和手写识别输入等几种输入方式,如图64.2.8.2和图64.2.8.3所示:
图64.2.8.2中文输入和标点符号输入
图64.2.8.3 英文输入和手写识别输入
其中,中文输入就是我们前面T9拼音输入法实验的具体运用,而手写识别的输入界面,我们也是用到前面手写识别实验的知识实现的。
只要新建文本文件有被编辑过,那么在返回(按KEY0返回)的时候,系统会提示是否保存,如图64.2.8.4所示:
图64.2.8.4保存提示和编辑已有文件
上图中,左侧图片为提示保存界面,如果选择确定,该文件将被保存在TF卡根目录的TEXT文件夹里面。右侧图片为打开已有文件进行编辑的界面,这样我们就可以在开发板上编辑.txt/.h/.c/.lrc文件了。
64.2.9 运行器
双击主界面的运行器图标,首先进入文件浏览界面,如图64.2.9.1所示:
图64.2.9.1文件浏览和运行警告
上图中,左侧为文件浏览界面,图中显示了可运行的bin文件有两个,都是来自我们的标准例程对应的实验。本运行器支持448K字节以内的程序运行,很多例程都可以生成SRAM版本的bin文件,在运行器里面运行。SRAM版本.bin文件的生成办法,请参考串口IAP实验这个章节,里面有详细介绍。通过运行器,大家可以直接运行我们大部分例程,而不用再去刷代码了,方便大家测试和验证我们的实验。
右侧的图片是运行前的警告界面,因为一旦执行.bin文件,我们的系统将无法恢复,只能靠复位重启。点击确定之后,STM32就开始运行你所选择的.bin文件了,实验现象和对应实验所描述的现象一模一样。
64.2.10 手写画笔
双击主界面的手写画笔图标,首先弹出模式选择对话框,如图64.2.10.1所示:
图64.2.10.1模式选择和新建画板
上图中,左侧图片为我们双击手写画笔后,弹出的模式选择界面,我们可以选择新建画笔,建立一个新的文件;也可以选择打开一个已有的位图进行编辑。右侧的图片为我们新建画笔后输入的内容,默认画笔为最小尺寸,颜色为红色。画笔的颜色和尺寸是可以设置的,按KEY_UP按键,则弹出画笔设置对话框,然后,可以对画笔颜色和画笔尺寸进行设置。如图64.2.10.2和图64.2.10.3所示:
图64.2.10.2画笔设置和画笔颜色设置
图64.2.10.3画笔尺寸设置和完成后的画图
图64.2.10.2中,左侧的图片为按KEY_UP按键后弹出的画笔设置对话框,我们可以选择对画笔颜色和画笔尺寸进行设置。右侧的图片为画笔颜色设置对话框,在该对话框里面,我们可以直接在颜色条快速输入要设置的颜色,也可以通过下方的三个滚动条进行精确设置,左侧的正方形区域为预览区。
图64.2.10.3中,左侧为画笔尺寸设置界面,我们可以通过滚动条设置画笔尺寸,对话框显示了画笔尺寸和对应的预览图。右侧的图片为我们完成的画图文件,在返回主界面(按KEY0)的时候,会提示保存,如图64.2.10.4所示:
图64.2.10.4保存画图和编辑已有位图
上图中,左侧为我们退出时弹出的提示保存对话框,如果选择确定,则新的画图文件将会被保存在TF卡的PAINT文件夹里面,命名方式是以当前系统的时间命名的,如PAINT20220620193550.bmp。
右侧的图片为对打开的位图进行编辑的界面,通过这个功能,我们可以在开发板上实现对一些相片(bmp格式)进行涂鸦。
64.2.11 照相机
本照相机支持ALIENTEK OV5640-AF这款500W像素的CMOS摄像头模块,本照相机的特点有:
1,支持自动对焦(轻触触摸屏,即可进行一次自动对焦)。
2,支持闪光灯(可以设置开启/关闭)。
3,支持BMP拍照(拍下的bmp分辨率为LCD分辨率),按WK_UP拍BMP照片。
4,支持JPG拍照(默认是2592*1944像素(500W 像素),按KEY1拍JPG照片。
5,屏幕显示可以是全景(缩放)或者1:1显示(无缩放),默认是全景,通过KEY1切换。
6,支持各种参数设置,包括:场景、特效、亮度、色度、 对比度和闪光灯等设置,按KEY_UP进入设置。
双击主界面的照相机图标,首先初始化OV5640摄像头模块,如图64.2.11.1所示:
图64.2.11.1 初始化OV5640和等待拍照
在初始化OV5640之后,进入等待拍照模式, 摄像头默认开启了持续自动对焦,在发现失焦后,摄像头模块会自动重新进行一次对焦。我们也可以轻触液晶触摸屏,人为的触发一次自动对焦,以得到清晰的图片。
此时我们可以长按WK_UP按键松手后,弹出相机设置对话框,对摄像头的参数进行设置,如图64.2.11.2~64.2.11.5 所示:
图64.2.11.2 相机设置和场景设置
图64.2.11.3 特效设置和亮度设置
图64.2.11.4 色度设置和对比度设置
图64.2.11.5 闪光灯设置和拍照成功
以上设置,和手机类似,这里就不一一和大家解释了。我们按KEY1按键,即可实现JPG拍照,JPG照片尺寸固定为:2592*1944,500W像素。按WK_UP按键即可实现BMP拍照,BMP照片的尺寸就是LCD的分辨率。在照片保存期间LED1亮,保存完后蜂鸣器发出“滴”的一声,提示拍照成功,同时弹出拍照成功对话框,如上图右侧图片所示。
从上图可以看出,照片文件的命名还是以当前时间为名字命名的。我们将所有的照片都保存在TF卡/U盘的PHOTO文件夹。如果你没有插入TF卡/U盘,拍照时会提示“创建文件失败,请检查!”的提示信息。
长按KEY1按键松手后,可以实现1:1显示(显示区域小,但是图像无压缩,不变形),或者全尺寸显示(显示整个摄像头拍照区域,但是图像有压缩,会变形)。另外,如果你觉得照片模糊,可以手动调节摄像头模块的镜头,进行调焦,以达到最佳效果。
最后,看看本程序拍到的JPG照片样张,如图64.2.11.6所示:
图64.2.11.6 JPG照片样图(500W像素)
64.2.12 无线传书
该功能用来实现两个开发板之间的无线数据传输,在开发板A输入的内容,会在开发板B上完整的“复制”一份,该功能需要2个MiniPro STM32H750开发板(也可以一个探索板与战舰板或 Mini板搭配用,不过都要刷综合实验!!)和2个NRF24L01无线模块。
双击主界面的无线传书图标(假定开发板已插上NRF24L01无线模块),会先弹出模式选择对话框,如图 64.2.12.1 所示:
图64.2.12.1 模式选择和发送模式
从左侧的图片可以看出,模式设置,我们可以设置为发送模式或接收模式。右侧的图片则是选择发送模式后进入的界面。我们在另外一块开发板(开发板B)设置模式为接收模式,然后在本开发板(开发板A)手写输入一些内容,就可以看到在另外一个开发板也出现了同样的内容,如图 64.2.15.2 所示:
图64.2.12.2 在开发板A输入的内容完整的显示在开发板B上
从上图可以看出,在开发板A上输入的内容,被完整的复制到开发板B上了。这就是无线传书功能。
64.2.13 USB连接
双击主界面的USB连接图标,如果开发板的USB端口没有连接电脑,则显示无连接,如图64.2.13.1所示:
图64.2.13.1 USB无连接和USB读数据
上图中,左侧的图片显示开发板没有和电脑连接上,此时,我们找一根USB线,连接开发板的USB_SLAVE端口和电脑的USB,注意:此时USB_HOST不能插任何USB设备!然后,可以看到开发板提示USB已连接,并显示USB正在读数据,同时我们在电脑上面,可以看到右下角提示发现新硬件,并自动安装驱动(如果是第一次连接的话),如图64.2.13.2所示:
图64.2.13.2 电脑发现新硬件
此时,我们打开我的电脑,即可找到可移动磁盘,如果有TF卡插入,那么会显示两个磁盘:ALIENTEK磁盘和TF卡磁盘。如果TF卡没插入,则只显示ALIENTEK磁盘。
这样,我们就实现了开发板和电脑的USB连接,可以直接从电脑拷贝文件到开发板的TF卡和SPI Flash Disk(即25Q128)。
这里再次提醒大家,如非必要,不要往SPI Flash Disk写入数据!否则容易写坏QSPI FLASH。
64.2.14 RGB彩灯
RGB彩灯功能,可通过调节RGB三色灯不同的控制占空比,从而调三色灯的亮度,进而通过三色灯的三原色组合成不同的颜色。
双击主界面的RGB彩灯图标,进入RGB彩灯功能后,默认RGB三色灯调至最亮,我们可手动调节三色灯的亮度,如图64.2.14.1所示:
图64.2.14.1 默认RGB三色灯调至最亮和手动调节三色灯的亮度
64.2.15 二维码
MiniPro STM32H750开发板可以用作二维码识别和二维码生成,我们在综合实验集成了这两个功能。
二维码识别:由ALIENTEK提供一个二维码识别库(ATK_QR_V1.4.lib),它可以实现二维码和条形码的识别。其特点包括:
1,支持UTF8和GBK两种编码方式的二维码识别。
2,支持CODE128、CODE39、I25和EAN13等四种编码方式的条码识别。
3,支持UTF8-OEM转换输出(需要客户自己提供转换码表)。
二维码生成:支持GBK编码方式的二维码生成(不支持UTF8编码)。
双击二维码图标,首先进行模式选择,如图64.2.15.1所示:
图64.2.15.1 模式选择和待识别的二维码&条形码图案
模式选择可以选择:识别二维码或者生成二维码,首先我们看识别二维码,上图右侧有一个待识别的二维码和条形码图案。选择识别二维码后,首先会初始化OV5640,如果没有OV5640则直接退出,无法进行识别。在初始化OV5640成功后,进入识别状态,此时屏幕中央会显示摄像头拍摄到的图案,将二维码/条形码放到摄像头区域,就会自动进行识别, 识别完成,会有“滴”的一声提示,同时屏幕弹出对话框,显示识别结果。如图64.2.15.2和图64.2.15.3所示。
特别注意:
1),二维码识别需要 ATK-OV5640 摄像头模块的支持,如果没有,则无法进入此功能。
2),OV5640默认开启了自动对焦,如果发现失焦,我们可以触摸屏幕(按住一段时间再松开),手动触发一次对焦,以获得清晰的图片。
3),要识别的图像要全部在扫描区内,才可以识别。
4),对于条形码,最好大于等于7个字符/数字长度,否则可能无法识别。
5),二维码一次最多识别约512汉字大小的编码图片。
图64.2.15.2 二维码扫描和二维码识别
图64.2.15.3条形码扫描和条形码识别
我们按KEY0,可以返回主界面,结束二维码识别。接下来,我们看二维码编码,在模式选择界面,选择生成二维码,然后如图64.2.15.4所示。
图64.2.15.4输入要编码的内容和生成编码结果
首先,我们输入需要编码的内容,在输入完成后,点击“编码”按钮,即可生成编码结果,如图64.2.15.4图片所示。然后,我们可以用手机扫描这个二维码,来验证是否编码正常。按 KEY0可以清除编码结果,重新回到输入编码内容界面,我们可以输入新的内容,然后重新编码。在编码界面,按KEY0,可以返回主界面,结束二维码生成应用。
注意:这里的二维码编码采用的是GBK码,并不是UTF8编码,所以有的扫描软件,可能无法识别其中的汉字。遇到这种情况,请用微信自带的扫一扫功能,来扫描。
64.2.16人脸识别
双击主界面的人脸识别图标,即可进入本应用。本应用需要ATK-OV5640摄像头模块的支持,如果没有摄像头,则无法打开本应用,本应用采用ALIENTEK提供的人脸识别LIB(ATKFREC.lib)来实现人脸识别,本人脸识别LIB的特点有:
1,占用内存少,20张人脸,仅需约560KB内存。
2,使用简单,仅需修改6个函数,即可实现移植。
3,识别速度快,20 张人脸里面,识别一张人脸,耗时约70ms(STM32H750@480Mhz)。不过,由于本识别库以M3/M4为目标处理器,内存有限,算法上进行了大量阉割。所以,很多功能不太完善,效果也不是很好,且没有做识别有效检查(输入错误的人脸,也会有结果输出),所以此LIB仅供大家参考用。
双击主界面的人脸识别图标后,首先会初始化OV5640摄像头模块,在初始化成功以后,进入人脸扫描界面,如图64.2.16.1所示:
图64.2.16.1 扫描人脸和模板添加提示
上图左侧图片显示识别程序正在扫描人脸,我们可以调节摄像头,将人脸放到屏幕正中央,以便程序识别,当发现人脸模糊,对焦不清的时候,轻触屏幕触摸屏,即可手动触发一次自动对焦,以获得清晰的图像。
当调整好人脸位置以后,按KEY1按键,可以对当前扫描的人脸进行识别,如上图右侧图片所示,不过由于我们默认是没有模板的,所以无法进行识别(至少需要有一个模板,才可以进行人脸识别),屏幕提示要按:EKY_UP(即WK_UP)按键添加模板,所以我们按WK_UP按键,先添加一些模板,如图 64.2.16.2 所示:
图64.2.16.2 添加人脸和查看人脸列表
上图左侧图片就是添加人脸的界面,我们可以对当前人脸的:姓名、电话和性别等信息进行编辑,编辑完成后,点击保存,即可将该人脸数据保存到TF卡磁盘里面(TF卡磁盘根目录: ATK_FREC文件夹内),以便后续识别使用。
综合实验,我们最多可以添加20个人脸,当添加人脸完成以后,长按WK_UP按键,可以弹出人脸列表,如上图右侧图片所示,由图可知,总共有20个人脸,我们可以双击某个人的名字,对这个人的信息进行编辑,也可以按左下角的“选项”按钮,弹出对话框,选择“编辑”,对该人脸进行编辑,如图 64.2.19.3 所示:
图64.2.16.3 选项对话框和编辑人脸
上图中,左侧图片表示我们按下“选项”按钮后,弹出一个选择操作的对话框,可以选择编辑和删除,如果选择编辑,则和双击人脸列表的姓名一样,进入编辑人脸信息界面,如上图右侧图片所示。在编辑人脸信息界面,我们可以对当前人脸的姓名、电话和性别等信息进行修改,修改完成后,点击保存即可完成编辑。
删除人脸方法:在人脸列表里面,我们选中某个人脸(单击),然后按“选项”按钮,弹出选择对话框(如图64.2.16.3 左侧图片所示),选择“删除”,然后点击确定,即可完成对这个人脸的删除,删除完成会有提示对话框,如图64.2.16.4 所示:
图64.2.16.4 删除人脸和识别结果
上图右侧图片显示人脸删除成功。在编辑/删除人脸完成以后,我们按KEY0或“返回”按钮,回到人脸扫描界面,然后调节摄像头(轻触屏幕的触摸屏,可以触发一次自动对焦,以获得清晰的图像),让待识别的人脸处于屏幕正中央,调整好位置以后,按KEY0按键,即可对当前图像进行识别,识别完成后,显示识别结果,如上图右侧图片所示。
在识别结果界面,上半部分的大图,是摄像头拍摄到的需要识别的图片,下面右侧的小图片,则是在添加模板的时候,保存的预览图片。可以看到,两个图片基本一样,说明识别是成功的,同时,还显示了这个人的姓名、电话和性别等,整个识别过程,耗时70ms(20张人脸),还是比较快的。在识别结果界面,按KEY0,可以返回人脸扫描,继续识别其他人脸。
在人脸扫描界面,再按KEY0即可返回主界面,结束人脸识别。
64.2.17电压表
电压表功能用于测量0~3.3V的直流电压源,可以是开发板上的电压源,也可以是外部的,但是电压的范围一定要是0~3.3V,否则容易烧毁STM32芯片。
下面我们一起来测量板载的可调电位器的电压,使用短路帽将多功能端口P3的ADC和RV1排针连接,然后双击主界面的电压表图标,进入电压表功能后,就可以通过调节可调点位旋钮改变接入ADC的电压,从而在屏幕上显示不同的电压值,如图64.2.17.1左侧图所示:
图64.2.17.1 调节电位器得到不同电压和最大允许接入3.3V电压
上图中,ADC值是电压的数字值,Uin值是经过转换后的实际电压。由于STM32H750的ADC最大分辨率是16位,所以电压的数字值范围是0~65535。
当我们把可调电压值调至最大,就可以得到3.3V的最大输入电压,如图64.2.14.1右侧图所示。电压的数字值是65535,对应的实际电压是3.3V。
64.2.18蜂鸣器
蜂鸣器功能用于测试蜂鸣器,通过触摸屏来控制蜂鸣器响或不响。
双击主界面的蜂鸣器图标,进入蜂鸣器测试窗口后,就可以通过点击显示屏的“打开”按钮,让蜂鸣器响。此时“打开”按钮变成“关闭”按钮,之后点击“关闭”按钮则会关闭蜂鸣器,“关闭”按钮又会变成“打开”按钮,如图64.2.18.1图所示:
图64.2.18.1 默认RGB三色灯调至最亮和手动调节三色灯的亮度
按按键KEY0,则会退出蜂鸣器测试功能,回到主界面。
64.2.19按键测试
按键测试功能用于测试板载的三个功能按键。
双击主界面的按键测试图标,进入按键测试窗口后,此时,如果没有任何按键被按下,默认显示屏上显示的三个黄色的实心圆(KEYUP、KEY1、KEY0),如图64.2.19.1左侧图所示:
图64.2.19.1 默认没有按键按下和按下按键KEY1
当我们按下其中一个按键,则对应的实心圆会显示红色,比如按下按键KEY1,显示屏的实心圆KEY1变红色,如图64.2.19.1右侧图所示,此后松开KEY1按键,该实心圆又变回黄色。注意:当两个按键被同时按下,只有其中一个有效。当KEY0被按下,则实心圆KEY0会先变成红色,然后马上退出按键测试功能,返回主界面。
64.2.20 LED测试
LED测试功能用于测试板载的RGB灯,通过触摸屏来控制RGB灯的亮灭。
双击主界面的LED测试图标,进入LED测试窗口后,默认RGB灯全部熄灭,显示屏的三个实心圆显示白色,如图64.2.20.1左侧图所示:
图64.2.20.1 默认没有按键按下和按下按键KEY1
我们可以通过点击显示屏的“红灯亮”、“绿灯亮”和“蓝灯亮”这个三个按钮,来控制RGB对应颜色的灯亮。比如点击“蓝灯亮”按钮,那么蓝灯对应的实心圆就变成蓝色,如图64.2.20.1右侧图所示,此时RGB的蓝灯也会亮。其它灯的控制方法类似的。
按按键KEY0,则会退出LED测试功能,回到主界面。
64.2.21拨号
注意,本开发板没有麦克风和咪头,所以不能实现真正的打电话功能,只是功能模仿,可以接通电话,但不能正常对讲。
实现该功能,需要ALIENTEK ATK-SIM900A GSM模块的支持,所以本功能的测试,请先确保有GSM模块,并连接成功(详见64.2节开头部分)。
双击主界面的拨号图标,进入拨号界面,如图64.2.21.1所示:
图64.2.21.1 拨号主界面和拨号
上图中左侧图片就是拨号主界面,这个和手机拨号是一样的。右侧是我们输入的拨号号码,点击拨号图标,即可进行拨号。如图64.2.21.2所示。
图64.2.21.2 拨号中和通话中
图64.2.21.3 来电和接听来电
图64.2.21.2为拨号和拨通后的通话界面。图64.2.21.3为来电和接听来电后的通话界面,此时蜂鸣器会发出“滴、滴”的提示声,提示有电话呼入。其他的操作和我们智能手机基本一模一样,就无需多说了。
注意,在通话状态,如果按KEY0,则会挂断电话,结束通话。
64.2.22应用中心
双击主界面的应用中心图标,进入应用中心界面,如图64.2.22.1所示:
图64.2.22.1 应用中心和红外遥控测试
左侧图片是我们刚进入应用中心看到的界面,在该界面下总共有16个图标,我们仅实现了第一个:红外遥控功能。其他都没有实现,大家可以自由发挥,添加属于自己的东西。
双击第一个图标,会弹出一个红外遥控的小窗口,用于接收红外信号,此时,我们将红外遥控对准开发板的红外接收头,并按下按钮,就可以在红外遥控窗口里面显示键值、按键次数、符号等信息。如图64.2.22.1右侧图片所示。
按KEY0可以退出红外遥控功能,返回应用中心主界面,再按一次KEY0按键就可以返回主界面。
64.2.23短信
双击主界面的短信图标,开始读取GSM模块SIM卡中的短信,如图64.2.23.1所示:
图64.2.23.1 短信读取中和读取到的短信
上图中,左侧显示了短信读取的进程,当所有短信读取完成后,显示读取到的短信,如图右侧图片所示。可以看出,SIM卡中总共有4条短信,其中:前面有黑色实心圆标志的代表是未读的短信,前面有空心圆的表示读取过了的短信。
当短信内容大于一行宽度后,会采用走字的方式显示,起到预览的作用。在该界面,按KEY0可以返回系统主界面。
点击左下角的选型按钮,可以选择对短信的操作,如图64.2.23.2所示:
图64.2.23.2 短信操作和新建信息
上图中,左侧图片显示的短信操作总共有三个操作:新建信息、阅读信息和删除信息。其中阅读信息也可以在读取到的短信界面,直接双击短信条目进行阅读。
右侧图片显示了新建信息的界面,新建信息是,收件人是可以编辑的,我们先输入收件人,比如1008611,然后就可以进行对话了。如图64.2.23.3所示:
图64.2.23.3 短信对话和重新回到读取到的短信界面
图中左侧的短信对话界面,有点类似现在手机的短信方式,收发双方的内容都显示在一个区域,可以通过滚动条拖动查看。图中是我们发数字给1008611,以及1008611对我们做出的应答。每当一条短信发送成功后,蜂鸣器会有“滴”的一声短叫,提示发送成功。如果接受到新的短信,蜂鸣器会有“滴、滴”的两声短叫,然后新收到的短信(收件人发过来的)会实时添加到我们的对话中来。
图中,右侧图片是我们同1008611进行短信对话之后,按KEY0,返回到读取到的短信界面。从图中可以看出,短信条数比图64.2.23.1中多了很多,说明收到了很多短信,且都已经自动添加到读取到的短信中来了。
短信的其他操作,就不详细介绍了,和手机基本一模一样,大家自己摸索下就可以了。
至此,开发板的综合测试实验就介绍完了。其中,参考了不少网友的代码,对这些网友表示衷心的感谢,同时我也希望我们的这个代码,可以让大家有所受益,能开发出更强更好的产品。
综合实验整个代码编译后大小为545K左右(-O0优化),代码量是非常的大,希望大家慢慢理解,各个攻破,最后祝大家身体健康、学习进步!