关于VCP(Virtual Com Port)拓展的调试经历(一)
* The Overview
前日,接到老板部署的任務(wù),將現(xiàn)有的基于STM32L151與L432的LoRaWAN程序中添加USB CDC(Communication Device Class)功能,并枚舉為VCP(Virtual Com Port)用以替代以往的串口打印。很疑惑為什么以前架構(gòu)代碼的時(shí)候沒(méi)有添加進(jìn)去。。。估計(jì)是那時(shí)候大家都不太懂CDC。
以前的開(kāi)發(fā)板通過(guò)CP210X芯片來(lái)進(jìn)行串口轉(zhuǎn)USB,實(shí)測(cè)效果并不太好。
CP210X芯片在WIN7電腦上還必須得手動(dòng)安裝驅(qū)動(dòng),最關(guān)鍵的成本,又是一部分開(kāi)支。
在重新設(shè)計(jì)了L151、L432節(jié)點(diǎn)之后,取消了板載的CP210X轉(zhuǎn)而通過(guò)VCP方式是聰明的選擇。
? 在調(diào)試VCP過(guò)程中并不是想像中的非常順利,雖然在CubeMX生成的VCP代碼中很容易就搞通了VCP部分,直插L151mircoUSB口之后可以觀察到PC顯示成功枚舉成了VCP,并且打印也比較順利。
? 在VCP的驗(yàn)證中沒(méi)有遇到許多朋友描述的heapsize0x200導(dǎo)致CDC枚舉失敗的問(wèn)題,但在將VCP部分移植到LoRaMAC中時(shí),工作與工作量變得復(fù)雜了起來(lái)。因?yàn)長(zhǎng)oRaMAC對(duì)晶振時(shí)鐘配置和外設(shè)中斷的配置要求比較復(fù)雜,以及現(xiàn)有的LoRaMAC工程的啟動(dòng)文件HAL庫(kù)等文件與新版本有較大不同,導(dǎo)致VCP植入后原本的LoRaMAC程序不能運(yùn)行。對(duì)基本毫無(wú)移植經(jīng)驗(yàn)的我來(lái)說(shuō),還在移植過(guò)程中踩了不少的陷阱。。。
為了避免以后的工作中有類似的開(kāi)發(fā)需求,所以在此對(duì)移植過(guò)程中所遇見(jiàn)的比較重要的某幾處地方做一個(gè)筆記:
1. 首先需要注意的是端口映射,許多的STM32芯片支持端口映射和IO復(fù)用,例如可以在不同的引腳做相同的外設(shè)。所以在配置外設(shè)端口時(shí)需要注意請(qǐng)不要犯跟我一樣的低級(jí)錯(cuò)誤,配置PB67,測(cè)試PA910.....
2. 注意移植的宿主代碼中是否有對(duì)IO進(jìn)行的低功耗處理,在許多高性能,低功耗設(shè)備應(yīng)用場(chǎng)景中,為了做到最低的功耗,往往會(huì)對(duì)沒(méi)有用到的IO口做低功耗處理,一般做法為將IO置為input。此時(shí)在移植程序時(shí),例如在移植VCP功能時(shí)需要檢查確保PA1112引腳沒(méi)有進(jìn)行低功耗處理。
3. 對(duì)于新生成的STM32工程,Cube會(huì)把一般外設(shè)的中斷處理(Handler)函數(shù)放到一個(gè)叫stm32xxx_it.c文件里,但往往老舊的工程代碼會(huì)擁有自己的中斷處理函數(shù),有可能在編譯沒(méi)有出現(xiàn)重復(fù)定義的情況下他會(huì)默認(rèn)執(zhí)行的處理函數(shù)并不是你想要的那一個(gè),導(dǎo)致你完全找不到原因!所以在處理中斷處理函數(shù)時(shí)必須要小心注意并做相應(yīng)的調(diào)整。例如中斷優(yōu)先級(jí),搶斷優(yōu)先級(jí),也即是對(duì)循環(huán)嵌套的配置,對(duì)于代碼邏輯是否合理。
?
在排除了晶振和中斷優(yōu)先級(jí)以及驗(yàn)證SPI通訊正常等各種因素之后,LoRaMAC程序依然存在這無(wú)法接收下行幀的問(wèn)題。此問(wèn)題暫未解決,待后天出差回來(lái)之后再研究。
?
?
?
?
---有事做,有人愛(ài),有所期待
?
轉(zhuǎn)載于:https://www.cnblogs.com/SaberArthur/p/11128404.html
總結(jié)
以上是生活随笔為你收集整理的关于VCP(Virtual Com Port)拓展的调试经历(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
                            
                        - 上一篇: 做梦梦到被抢劫是什么预兆
 - 下一篇: 设计模式(第十七式:迭代器模式)