上位机图像处理和嵌入式模块部署(mcu 项目1:上位机编写)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        前面,我们说过要做一个报警器。如果只是简单做一个报警器呢,这个基本上没有什么难度。这里,我们就适当提高一下难度,那就是给这个报警器增加两个功能,第一,可以通过上位机+串口来升级固件,毕竟谁也没有办法保证固件代码没有bug;第二,可以标定参数。一方面,上位机可以读取标定的参数,另外一方面,上位机也可以写入新的参数。

1、开发软件

        之前,我们讨论过可以用qt或者c# wpf的方式,来进行上位机的开发,不失一般性。这里采用qt的方式进行上位机开发。

2、通信方式

        本着由易到难的方式,现在我们先使用串口通信的方式来处理。等到后面积累起一定的经验,可以慢慢引入usb、以太网等更复杂的方式。

3、固件更新的方法

        前面说过,整个固件分成两部分,一个是bootloader,一个是app。其中bootloader是hex的形式,而app是bin的形式。所以这里上位机需要同时面对这两种模式。回到固件更新,目前来说,最简单的方法就是直接从上位机,借助于串口发送bin数据即可。如果一段时间超时,bootloader就可以认为是bin文件发送完毕,后续可以进行mcu内部flash的写入了。

4、参数读取和设置

        参数部分的话,要保证既能读取,又能设置。当然,这部分参数需要提前规划一下,即它们应该保存在flash的什么位置。千万不能把参数、bootloader、bin这几个文件mix在一起,不然到时候就麻烦了。

5、实时读取数据

        除了参数之外,另外一部分需要完成的就是数据的读取,也就是实时ad转换后的数据读取。这部分可以通过添加一个text edit的方式,把他们放在edit编辑框即可。start之后,读取数据;stop之后,停止读取数据;clear,那就是清理edit编辑框的数据。

6、通讯协议

        鉴于上位机需要先后和bootloader和bin进行通讯,那么需要定一个通讯协议。其中bootloader加载的时候,是不需要的,直接发送数据即可。而bin启动后,则是需要数据交互的,这个时候有必要订立一个协议。

        这部分,其实可以借鉴485 modbus协议,假设是读的情况,可以这么来做,

	0x55 0x55,报文头
	len,报文长度
	command id,命令
	crc,校验
	0xaa 0xaa,报文结尾

        读完之后,肯定有一个反馈,

	0x55 0x55,报文头
	len,报文长度
	command id, 命令  // 如果是-1,则读取失败
	data,读取的数据
    crc,校验
	0xaa 0xaa,报文结尾

        写也是一样的,只不过写的时候要带上数据。但是写的反馈可以简单一点,即反馈的时候不需要数据。中间不管写,还是读,出错的时候,command id的位置写-1即可。

7、界面编写

        qt界面可以通过硬编码,也可以通过designer来实现,本着效率第一的原则,建议大家还是多用用designer,把时间放在更加有意义的事情上面。这里给出了一个模板,大家也可以自己测试下,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/755895.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

敏捷开发笔记(第9章节)--开放-封闭原则(OCP)

目录 1:PDF上传链接 9.1 开放-封闭原则(OCP) 9.2 描述 9.3 关键是抽象 9.3.1 shape应用程序 9.3.2 违反OCP 糟糕的设计 9.3.3 遵循OCP 9.3.4 是的,我说谎了 9.3.5 预测变化和“贴切的”结构 9.3.6 放置吊钩 1.只受一次…

qt实现打开pdf(阅读器)功能用什么库比较合适

关于这个问题,网上搜一下,可以看到非常多的相关博客和例子,可以先看看这个总结性的博客(https://zhuanlan.zhihu.com/p/480973072) 该博客讲得比较清楚了,这里我再补充一下吧(qt官方也给出了一些…

深度之眼(二十八)——神经网络基础知识(三)-卷积神经网络

文章目录 一、前言二、卷积操作2.1 填充(padding)2.2 步长2.3 输出特征图尺寸计算2.4 多通道卷积 三、池化操作四、Lenet-5及CNN结构进化史4.1 Lenet-5 一、前言 卷积神经网络–AlexNet(最牛)-2012 Lenet-5-大规模商用(1989) 二、…

合并排序的数组

题目链接 合并排序的数组 题目描述 注意点 A的末端有足够的缓冲空间容纳BA和B都是排序的 解答思路 最初想到的是双指针,从小到大找到合并B时应该A相应位置应该插入的元素,因为在插入的过程中B的元素会替换A原有位置的元素,所以需要先将A…

YOLOv8目标检测在RK3588部署全过程

一,前言 这是一个关于从电脑安装深度学习环境到实现YOLOv8目标检测在RK3588上部署的全过程。 本人配置: 1,一台笔记本 2,一个香橙派5s 二,深度学习环境配置 2.1 安装anaconda 使用清华镜像源下载https://mirror…

巴黎成为欧洲AI中心 大学开始输出AI创始人

来自Dealroom 的数据显示,在欧洲和以色列AI创业公司中,法国的AI创业公司资金最充裕。Mistral、Owkin、Hugging Face等法国企业已经融资23亿美元,比英国、德国AI创业公司都要多。 一名大学生走出校门凭借聪明才智和一个黄金点子成为富豪&#…

使用matlab开发stm32总结,stm32-matlab常见的问题处理以及报错合集

1,问题:本来是好的,突然编译运行报错,说是确少包, 解决方案:重启以后好了 2,有完美的马鞍波,为什么不能够转动呢? 原因是我这里模型的问题,我计算出来的是占…

考试选择题改写代码到编译器正确运行

1. 尝试变换形式,如果*p &a>>>>>>>不正确>>>>>>>>尝试先定义指针p>>>>>再写 pa 或者 *p &a[0] p所指向的是第一个首元素的地址 >>>>>>>之后最快的方式是把四个选项一…

Python 面试【★★★★】

欢迎莅临我的博客 💝💝💝,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

计算神经网络中梯度的核心机制 - 反向传播(backpropagation)算法(1)

计算神经网络中梯度的核心机制 - 反向传播(backpropagation)算法(1) flyfish 链式法则在深度学习中的主要应用是在反向传播(backpropagation)算法中。 从简单的开始 ,文本说的就是链式法则 R …

【Stable Diffusion】创意与科技的完美结合:AI绘画副业让美术老师月入2w+

前言 艺术与科技一直以来都是两个看似独立的领域,但如今,随着人工智能的发展,这两个领域正迎来一次前所未有的融合。在这个数字化时代,AI绘画成为了一项引人注目的副业,为美术老师们带来了新的机遇和收入。 儿童画 …

650V 1200V 碳化硅MOS TO247 封装 内阻30毫欧 40 80毫欧

650V 1200V 碳化硅MOS TO247 封装 内阻30毫欧 40 80毫欧

matlab 计算导数

边界提取 一、算法原理1、主要函数2、参考文献二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、主要函数 Y = diff(X)计算沿大小不等于 1 的第一个数组维度的 X X…

计算机网络 —— 基本概念

基本概念 1. 通信协议2. 面向连接 v.s. 面向无连接3. 电路交换 v.s. 分组交换4. 单工通信 v.s. 双工通信 1. 通信协议 通信协议就是计算机与计算机之间通过网络实现通信时事先达成的一种“约定”。这种“约定”使那些由不同厂商的设备、不同的CPU 以及不同的操作系统组成的计算…

黑芝麻科技A1000简介

文章目录 1. A1000 简介2. 感知能力评估3. 竞品对比4. 系统软件1. A1000 简介

pdf合并,pdf合并成一个pdf,pdf合并在线网页版

在处理pdf文件的过程中,有时我们需要将多个pdf文件合并成一个pdf文件。作为一名有着丰富计算机应用经验的技术博主,我将为您详细介绍如何将多个pdf文件合并成一个pdf文件。 pdf合并方法:使用, “轻云处理pdf官网” 打开 “轻云处…

有序充电在新能源行业的前景与应用

作为新能源汽车的基础动力装置,交流充电桩也是可以促使新能源汽车正常行驶的关键内容。近年来我国新能源汽车的增长速度出现明显的上升趋势,但是其充电桩的发展还比较缓慢。目前在充电桩系统设计期间仍存在一些问题,主要表现在充电设施短缺、…

负载均衡器有什么用?

负载均衡器有什么用? 负载均衡器是一种在多个服务器之间分配网络或应用程序流量的设备或软件应用程序。其主要目的是确保没有一台服务器承担过多的需求,从而提高应用程序的响应速度和可用性。 在计算机发展的早期,负载均衡是一个手动过程。…

python-斐波那契数列

[题目描述] 斐波那契数列是指这样的数列:数列的第一个和第二个数都为 1,接下来每个数都等于前面 2个数之和。 给出一个正整数 a,要求斐波那契数列中第 a 个数是多少。输入: 第 1 行是测试数据的组数 n,后面跟着 n 行输…

版本控制工具-git分支管理

目录 前言一、git分支管理基本命令1.1 基本命令2.1 实例 二、git分支合并冲突解决三、git merge命令与git rebase命令对比 前言 本篇文章介绍git分支管理的基本命令,并说明如何解决git分支合并冲突,最后说明git merge命令与git rebase命令的区别。 一、…