AI-MCU USB_CDC, + 通信大师之桌面上位机软件
本帖最后由 tzz1983 于 2024-11-30 16:35 编辑最近在学习上位机软件编程,使用的开发环境是 Visual Studio 2017 之MFC,C++语言。
对于熟悉单片机软硬件的工程师,可不一定会编写上位机程序哦,我就是其中不会的那一员 ~~
先说AI-MCU 的USB_CDC吧,AI官方给出的源码范例很好用,也容易懂。
这里有一点很有意思,实现桌面和单片机通信,用USB_CDC很容易,
但是仅仅是实现桌面和单片机通信,是不是可以省去了把收到的数据再从UART发出去?
当然是可以的,这一省可不得了,相当于直接把USB_CDC的传输速率直接提升到了USB_HID.
因为不需要把数据UART了,那传输速的瓶颈就在于USB_HID了,想想看,1-2M的比特率肯定是可以达到的.
我自己也在实验,整合了一个小框架,UCOSII+ USB_CDC ,实验器材为:(屠龙刀)AI32G12K128
在官方USB_CDC范例的基础上稍加更改,去掉了把收到的数据从UART发送出去那部分,
增加了两个使用灵活的收发函数,方便使用:
(屠龙刀)AI32G12K128 可直接运行代码,用USB TYPEC 口 USB直接下载代码,下载后就可以看到串口了,是单串口哦。
代码:
现在来说说桌面软件吧。
很多时候,我们做的产品不需要重新烧录固件,但是客户需要自己修改一些运行参数,显示内容等。
这时候,简单的桌面软件,就非常具有灵活性了。
在学习MFC的同时,我编写了一个很简单的串口通信桌面代码。很简单的那种,大部分代码都是自动生成的,自己也就几十行代码。
其实吧,说是编的,还不如说是抄作业。大部分都是抄别人的,嘿嘿。
不过我建议大家看代码时,也要学会抄作业,抄一遍+少许修改,就学得很会了哦。光看不抄那肯定不行!^-^
上个图看看软件长啥样子:
代码量很少,仅实现了基本功能,当然了,对于学习来说,功能越精简学起来越轻松。那些特别的功能就留到做项目的时候再去花精力吧。
给大家奉上源码,欢迎指教:
代码中使用了第三方串口源码 CSerialPort,(本帖标题为通信大师是沿用了原作者的说法,本人不敢自称通信大师)
CSerialPort项目是一个基于C/C++的轻量级开源跨平台串口类库,
可以轻松实现跨平台多操作系统的串口读写,同时还支持C#, Java, Python, Node.js等
有兴趣的可以百度一下,下载源码来观赏一番,还有源作者自己的介绍和使用说明,非常好的。
CSerialPort 比MFC自身的 MSComm 控件好用,MSComm太老了,现在好多新电脑缺少支持。
这里也介绍一下 CSerialPort在MFC中的使用 步骤
1.首先 Visual Studio 创建一个基于对话框的应用,框架自动生成的那种。
2.将CSerialPort文件夹复制到项目工作目录下,然后在项目中添加6个源文件分别为:
SerialPort.cpp
SerialPortBase.cpp
SerialPortWinBase.cpp
SerialPortInfo.cpp
SerialPortInfoBase.cpp
SerialPortInfoWinBase.cpp
3.需要将6个新添加的cpp文件的预编译头设置为"不使用预编译头",
比如右键【serialport.cpp】-【属性】-【C/C++】-【预编译头】-【预编译头: 不使用预编译头】
4. 增加CSerialPort的必要依赖库 windows下CSerialPort必须的依赖库为setupapi.lib
右键【CommMFC根命名空间】-【属性】-【链接器】-【输入】-【附加依赖项】-添加setupapi.lib
5. 使主对话框继承 CSerialPortListener 如下代码:
class CCommMFCDlg : public CDialogEx, public CSerialPortListener
6. 添加一个虚函数+实现 和一个 串口类变量,如下代码:
private:
void onReadEvent(const char *portName, unsigned int readBufferLen);
CSerialPort m_SerialPort;
7. 另外按自己的喜好,添加几个Button 两个编辑框,基本完工了,详见项目本身吧。
本帖最后由 VCC 于 2024-11-30 18:23 编辑
关注!
尝试复现!
下载并解压
删除掉遗留的临时文件(非常建议楼主今后分享代码时,删掉工具链构建过程中产生的临时文件!)
启动Visual Studio解决方案文件,sln后缀
由于楼主用的VS2017,而我用的是VS2022,所以会对C++项目文件进行自动升级
升级完成
提示我的电脑里缺MFC库,遂安装MFC库
我使用的最新的Visual Studio 2022,与之配套的也就是v143生成工具
安装之!
下载飞快
安装完成!重新打开!
尝试编译,报了很多错
上网查了查,发现把这里改成【不使用预编译头】这样可以解决上述问题
另一处要修改的是,这个文件开头加一个头文件 #include <iostream>
成功编译并运行!!!
楼主威武!
VCC 发表于 2024-11-30 17:50
关注!
尝试复现!
微调一下Release设定
Release版本的32位exe串口助手!
VCC 发表于 2024-11-30 18:25
微调一下Release设定
经过实测,可以正确打开两个串口(已经在USB串口模块上将二者交叉连接)
数据也能传输
现有问题:
[*]更改波特率、数据位、停止位、校验位设定后,不会立即生效,必须重新关闭&打开串口后,才会生效
[*]不支持检测程序启动后新加入的串口,即【串口号】菜单仅在程序启动时更新
本帖最后由 tzz1983 于 2024-12-1 22:05 编辑
VCC 发表于 2024-11-30 19:13
经过实测,可以正确打开两个串口(已经在USB串口模块上将二者交叉连接)
数据也能传输
现有问题:
更改波特率、数据位、停止位、校验位设定后,不会立即生效,必须重新关闭&打开串口后,才会生效
不支持检测程序启动后新加入的串口,即【串口号】菜单仅在程序启动时更新
感谢测评,确实是这样的,当前只在程序打开的时候枚举一次串口, 并且也仅在打开串口时设置一次串口参数。
如果要实现你说的功能,需要再加一些代码。
现在虽然有些像串口助手的样子,不过我做它的目的并不是为了实现一个串口助手,
好用的串口助手现在已经有很多了。
串口通信本身可以不需要任何窗口和显示,如下面这个小玩意:
把文字或图片生成点阵后发送单片机,不需要任何串口参数和显示,因为双方都是已知的。
仅通知操作结果是否成功即可。
做这个串口通信的主要目的是把 “串口通信” 本身,嵌入到我们自己的桌面应用,和产品应用中去,这样才是最终的目的
tzz1983 发表于 2024-12-1 16:25
感谢测评,确实是这样的,当前只在程序打开的时候枚举一次串口, 并且也仅在打开串口时设置一次串口参数。 ...
{:4_250:} {:4_197:}学习 vs的兼容性有点差,用vs2019打开总是提示这错那错。 xxkj2010 发表于 2024-12-1 20:49
vs的兼容性有点差,用vs2019打开总是提示这错那错。
按1楼的步骤自己移植到相应的版本即可,不明白的地方也可以百度一下原作者,说的比较详细
页:
[1]