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)查看源碼時,從大到小,先框架后具體,可以減輕自己很大的工作量。
總結
以上是生活随笔為你收集整理的linux/windows上STM32固件烧写工具的开发demo的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dnf提示TP链接失败..
- 下一篇: Linux网站大杂烩《自己查阅》