linux/windows上STM32固件烧写工具的开发demo

1.主要实现功能:完成对HEX和DFU文件的烧写,显示烧写的进度等功能
2.开发工具:Qt creator4.9.0
3.开发系统平台:windows系统和linux系统两套平台
4.具体开发步骤:
1)设计整体的界面,包括文件选择界面(dfu和hex文件),擦除和烧写环形进度界面,烧写成功界面
2)由于在公司的电脑系统安装的是linux系统,因此首先考虑的linux平台的开发,移植dfu-util库。
3)移植完成了dfu-util库之后,工具支持了dfu文件的烧写,hex文件的烧写移植了ST官网的hex文件转dfu文件的工具源码(MFC编写的)
4)移植成功后,基本上完成了linux上烧写工具的开发,支持hex/dfu文件烧写,支持环形进度条显示。
5)把Linux系统上的代码移植到windows上面,由于Qt支持跨平台开发,所以需要修改的只是关于libusb相关的方面
6)window系统上USB通信有两种方式,一种是利用libusb-win32库+USB驱动,另一种是利用windows提供的一些列API(如SetupDiEnumDeviceInterfaces等),我开发选择的是第一种(其实是第二种没走通,源码可以参考ST固件烧写工具中的烧写DFU工具)
5.参考源码:
1)dfu-util:http://dfu-util.sourceforge.net(linux)
2)libusb-win32:https://sourceforge.net/projects/libusb-win32/
(windows,这个是libusb0.1分化出来的项目,后来只有维护,所有接口和libusb不太相同)
3)libusb:https://github.com/libusb/libusb/releases(windows和linux好像都可以)
4)QRoundProgressBar:https://sourceforge.net/projects/qroundprogressbar/(windows/linux)
5)ST固件烧写工具:可以自行去ST官网下载(windows,ST的开发工具好像在windows10系统上不太兼容,源码测试的时候一直卡死)
6.参考博客:
1)环形进度条:https://blog.csdn.net/czyt1988/article/details/53422274
2)libusb-win32接口介绍:https://blog.csdn.net/menghun_99/article/details/80634892
3)libusb-win32下的工具介绍:https://blog.csdn.net/weixin_39794563/article/details/79039284
4)libusb-win32连接验证:https://blog.csdn.net/gaoszzzz/article/details/81982384
5)Linux下的libusb库移植开发:https://blog.csdn.net/u012247418/article/details/82960889
6)window下的libusb开发介绍:http://www.joenchen.com/archives/1360
7.libusb-win32驱动工具安装:
1)usb驱动:https://sourceforge.net/projects/libusb-win32/ 安装包里面的/bin/inf-wizard,这个会识别系统的设备,安装完成之后在设备管理器里面可以发现,原来的串口设备被识别成了libusb-win32的端口了,在电脑的系统库中发现libusb0.sys和libusb0_x86.dll已经安装。
2)libusbK下载:https://sourceforge.net/projects/libusbk/ 上面一个功能也可以在这个工具里面完成,安装第二个第三个就行,具体原因参考博客6)
8.开发过程中遇到的问题:
1)libusb是1.0的接口,而libusb-win32的接口是0.1版本的,因此在找设备的过程中libusb是通过libusb_init(libusb_context*)而libusb-win32是通过三个函数usb_find_bus,usb_find_device,usb_init三个函数同时执行才能获取到设备。
2)MFC系统上的BOOL类型是int,DWORD类型是unsigned long(4个字节大小,而不是8个字节,32位系统)移植HEX到DFU代码转换的时候,即MFC到QT时吃了大亏。
9.项目总结:
1)遇到问题找寻资料,看看有没有人做过,如果有人做过,我们就可以直接借鉴移植(跑通功能是第一步,然后再是看代码),效率和成果才是关键。
2)移植的过程中,要多想多思考多观察。不要想当然。
3)查看源码时,从大到小,先框架后具体,可以减轻自己很大的工作量。

发布了72 篇原创文章 · 获赞 32 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/xx18030637774/article/details/103565492