關于VCP(Virtual Com Port)拓展的調試經歷(一)

* The Overview

  前日,接到老板部署的任務,將現有的基于STM32L151與L432的LoRaWAN程序中添加USB CDC(Communication Device Class)功能,并枚舉為VCP(Virtual Com Port)用以替代以往的串口打印。很疑惑為什么以前架構代碼的時候沒有添加進去。。。估計是那時候大家都不太懂CDC。

  以前的開發板通過CP210X芯片來進行串口轉USB,實測效果并不太好。

CP210X芯片在WIN7電腦上還必須得手動安裝驅動,最關鍵的成本,又是一部分開支。

在重新設計了L151、L432節點之后,取消了板載的CP210X轉而通過VCP方式是聰明的選擇。

?  在調試VCP過程中并不是想像中的非常順利,雖然在CubeMX生成的VCP代碼中很容易就搞通了VCP部分,直插L151mircoUSB口之后可以觀察到PC顯示成功枚舉成了VCP,并且打印也比較順利。

?  在VCP的驗證中沒有遇到許多朋友描述的heapsize0x200導致CDC枚舉失敗的問題,但在將VCP部分移植到LoRaMAC中時,工作與工作量變得復雜了起來。因為LoRaMAC對晶振時鐘配置和外設中斷的配置要求比較復雜,以及現有的LoRaMAC工程的啟動文件HAL庫等文件與新版本有較大不同,導致VCP植入后原本的LoRaMAC程序不能運行。對基本毫無移植經驗的我來說,還在移植過程中踩了不少的陷阱。。。

為了避免以后的工作中有類似的開發需求,所以在此對移植過程中所遇見的比較重要的某幾處地方做一個筆記:

    1. 首先需要注意的是端口映射,許多的STM32芯片支持端口映射和IO復用,例如可以在不同的引腳做相同的外設。所以在配置外設端口時需要注意請不要犯跟我一樣的低級錯誤,配置PB67,測試PA910.....

    2. 注意移植的宿主代碼中是否有對IO進行的低功耗處理,在許多高性能,低功耗設備應用場景中,為了做到最低的功耗,往往會對沒有用到的IO口做低功耗處理,一般做法為將IO置為input。此時在移植程序時,例如在移植VCP功能時需要檢查確保PA1112引腳沒有進行低功耗處理。

    3. 對于新生成的STM32工程,Cube會把一般外設的中斷處理(Handler)函數放到一個叫stm32xxx_it.c文件里,但往往老舊的工程代碼會擁有自己的中斷處理函數,有可能在編譯沒有出現重復定義的情況下他會默認執行的處理函數并不是你想要的那一個,導致你完全找不到原因!所以在處理中斷處理函數時必須要小心注意并做相應的調整。例如中斷優先級,搶斷優先級,也即是對循環嵌套的配置,對于代碼邏輯是否合理。

?

在排除了晶振和中斷優先級以及驗證SPI通訊正常等各種因素之后,LoRaMAC程序依然存在這無法接收下行幀的問題。此問題暫未解決,待后天出差回來之后再研究。

?

?

?

?

---有事做,有人愛,有所期待

?

轉載于:https://www.cnblogs.com/SaberArthur/p/11128404.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392921.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392921.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392921.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode701. 二叉搜索樹中的插入操作(dfs)

給定二叉搜索樹(BST)的根節點和要插入樹中的值,將值插入二叉搜索樹。 返回插入后二叉搜索樹的根節點。 輸入數據保證,新值和原始二叉搜索樹中的任意節點值都不同。注意,可能存在多種有效的插入方式,只要樹在…

三星s6 android 8.0,再見Android 8.0,三星s6全系列系統都停止了,第一代國王已經倒下了嗎?...

對于Android用戶而言,最令人興奮的事情是系統更新,因為該更新意味著更流暢的體驗和更加用戶友好的功能. 但是,舊的三星S6并不是那么幸運,并且不再錯過Android 8.0.三星s6的全系列指的是三星s6,三星s6 edge,…

devise tree_Devise如何確保您的Rails應用密碼安全

devise treeby Tiago Alves由蒂亞戈阿爾維斯(Tiago Alves) Devise如何確保您的Rails應用密碼安全 (How Devise keeps your Rails app passwords safe) Devise is an incredible authentication solution for Rails with more than 40 million downloads. However, since it ab…

Exchange 2010無法安裝問題解決方法

當你在活動目錄(AD)森林中安裝多臺全局編錄服務器(GC)之后,默認情況下你會發現在AD站點里面自動生成二條站點連接,從上面的截圖可以看到目前在AD森林的Default-First-Site-Name(默認站點)里面有6臺GC。 從上面的截圖可以看到目前只有一臺叫做Sh-Site1GC(全局編錄服務器)是處于運…

android edittext 不滾動,EditText 設置可以垂直滑動但是不可輸入

一、前言:android:id"id/edtInput"android:layout_width"match_parent"android:layout_height"60dp"android:background"drawable/round_theme_3_gray"android:gravity"top"android:hint"string/please_inp…

snmpd修改端口

http://blog.csdn.net/cau99/article/details/5077239 http://blog.csdn.net/gua___gua/article/details/48547701轉載于:https://www.cnblogs.com/diyunpeng/p/6829592.html

leetcode LCP 19. 秋葉收藏集(dp)

小扣出去秋游,途中收集了一些紅葉和黃葉,他利用這些葉子初步整理了一份秋葉收藏集 leaves, 字符串 leaves 僅包含小寫字符 r 和 y, 其中字符 r 表示一片紅葉,字符 y 表示一片黃葉。 出于美觀整齊的考慮,小扣…

步進電機 步距角 編碼器_我如何邁出了學習編碼的第一步

步進電機 步距角 編碼器A couple of months ago, I was chatting to a developer at work about how I’ve always wanted to learn to code but never tried.幾個月前,我正在與一個開發人員聊天,討論我一直想學習編碼但從未嘗試過的方法。 Coding alwa…

第五章:配置使用FastJson返回Json視圖

fastJson是阿里巴巴旗下的一個開源項目之一,顧名思義它專門用來做快速操作Json的序列化與反序列化的組件。它是目前json解析最快的開源組件沒有之一!在這之前jaskJson是命名為快速操作json的工具,而當阿里巴巴的fastJson誕生后jaskjson就消聲…

一加6android9玩飛車掉,解鎖新速度:一加6T深度評測

解鎖新速度:一加6T深度評測2019-11-02 14:28:595點贊2收藏4評論創作立場聲明:我們只談智能硬件,向改變生活的智能硬件Say“嗨”!作為安卓旗艦機成員,一加這個品牌在玩機一類的同學手里可是大放光彩,各種刷機…

設計模式(第十七式:迭代器模式)

概念:  迭代器模式:Provide a way to access the elements of an aggregarte object sequentiaally with exposing its underlying representation. 提供一種訪問容器對象內每個元素的一種方式,并且不暴露對象的一些內部細節。實現&#xf…

探討跨域請求資源的幾種方式

[轉自:http://www.cnblogs.com/dojo-lzz/p/4265637.html] 什么是跨域JSONPproxy代理corsxdr由于瀏覽器同源策略,凡是發送請求url的協議、域名、端口三者之間任意一與當前頁面地址不同即為跨域。具體可以查看下表(來源) JSONP 這種…

算法訓練營 重編碼_編碼訓練營適合您嗎?

算法訓練營 重編碼by Joanna Gaudyn喬安娜高登(Joanna Gaudyn) 編碼訓練營適合您嗎? (Is a Coding Bootcamp something for you?) Coding bootcamps’ popularity is growing. It sounds like a perfect idea to fast-forward your career. But is it really some…

leetcode 771. 寶石與石頭(set)

給定字符串J 代表石頭中寶石的類型,和字符串 S代表你擁有的石頭。 S 中每個字符代表了一種你擁有的石頭的類型,你想知道你擁有的石頭中有多少是寶石。 J 中的字母不重復,J 和 S中的所有字符都是字母。字母區分大小寫,因此"a…

用ntdsutil命令中的restore object 更新版本號

備份域控建立好后,備份域信息,用目錄還 原模式,還原域信息,用ntdsutil命令,中的 restore ob ject 更新版本號 本文轉自9pc9com博客,原文鏈接: http://blog.51cto.com/215363/783334 如需…

python處理excel文件(xls和xlsx)

一、xlrd和xlwt 使用之前需要需要先安裝,windows上如果直接在cmd中運行python則需要先執行pip3 install xlrd和pip3 install xlwt,如果使用pycharm則需要在項目的解釋器中安裝這兩個模塊,File-Settings-Project:layout-Project Interpreter&a…

html塊中的內容垂直居中,css如何設置行內元素與塊級元素的內容垂直居中

首先我們先了解一下行內元素和塊級元素行內元素(內聯元素):沒有自己的獨立空間,它是依附于其他塊級元素存在的,空間大小依附于內容多少。行內元素沒有度、寬度、內外邊距等屬性。塊級元素:占據獨立的空間,具有寬度&…

Mina、Netty、Twisted一起學(五):整合protobuf

protobuf是谷歌的Protocol Buffers的簡稱,用于結構化數據和字節碼之間互相轉換(序列化、反序列化),一般應用于網絡傳輸,可支持多種編程語言。protobuf怎樣使用這里不再介紹,本文主要介紹在MINA、Netty、Twi…

leetcode 1. 兩數之和(map)

給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,并返回他們的數組下標。 你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素不能使用兩遍。 示例: 給定 nums [2, 7, 11, 15], target …

Redis 3.0.1 安裝和配置

一、下載,解壓和編譯Redis 12345# cd /tmp # wget http://download.redis.io/releases/redis-3.0.1.tar.gz # tar xzf redis-3.0.1.tar.gz # cd redis-3.0.1 # make二、下載、安裝tclsh 測試編譯: 1# make test得到如下錯誤信息: …