基于QT Quick 的 IAP 上位机程序(附带CRC8校验)

2018.2.3更新
IAP & APP代码放出。
http://blog.csdn.net/sunhaobo1996/article/details/79248098
——————————————————————————

开头依然是废话

前几天想研究研究在STM32F0上实现IAP,参考了下官方给的代码,但由于官方生成IAP的代码生成的bin太大(5KB+),遂决定自己实现IAP。在使用标准库的情况下,仍可以达到2500bytes的大小,同时添加了CRC8校验与ACK等机制,明显优于官方Demo。
本打算一并放出IAP与对应上位机程序,但由于IAP没来得及进行APP的测试,抱着负责任的态度,就暂时先不放出对应的IAP代码了。

技术方案

STM32F030C8T6(使用USART来进行APP下载,附带CRC8校验与分包序列号,可实现分包下载功能)
上位机使用QT5.9.3,使用QT Quick来进行界面的构建与交互逻辑的实现。
使用的类库:
QSerialPort

代码下载:

https://github.com/769484623/QtQuickSTM32IAP

上位机使用的类库与逻辑

这次小项目,彻底明白了MVC的含义。
使用Javascript 来进行界面业务的编写,使用C++ 来进行具体业务的实现,妙啊。
第一次用QT Quick写一个像模像样的项目,有的地方肯定写的有不好的地方。

在创建UI界面的qml文件后,会有对应的另外一个qml文件创建出来。我在ui文件中进行界面的布局,之后再在另外生成的QML中进行各种事件的处理。
除了可以直接拖放的那些类库,我还使用了:

FileDialog(打开系统选择文件的对话框)
MessageDialog(弹出通知框,类似于msgbox)

这两个自带的类。

整个界面的逻辑与交互还是很简单的。
首先选择固件,下载固件按钮的变为可以按下(enabled),点击下载固件后,若COM口为空,则报错,反之,将数据从QML传送到C++绑定的对应类 SerialDealer

具体程序逻辑如下:
这里写图片描述

具体技术细节

其实没什么说的,本次实现只使用了很简单的 Q_PROPERTYQ_INVOKABLE
Q_PROPERTY实现从QML访问C++类里的数据,Q_INVOKABLE实现QML调用C++类内的函数。

因为选择的是C++11,所以在类内也可以定义其他的类(class FirmwareBuffer)。
这个内部类实现了对固件分包内容所分配的内存的管理,同时自动进行CRC计算。

很简单,全部代码才200行(有效代码也就100行不到那个样子吧……)

这个如果完全使用传统的QWidgt之类应该会比分层简单的多……但复杂的界面交互,还是QT Quick有绝对的优势。

本想用Loader动态加载下,但想了想没什么必要,毕竟就这不几个功能……(笑,还不是因为用不熟)

以上。

PS:最近几天更新STM32F030 IAP的程序。标准库真的比ST强烈推荐的HAL省空间太多了……

猜你喜欢

转载自blog.csdn.net/sunhaobo1996/article/details/79233285
今日推荐