关于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.mzph.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得到如下错误信息: …