关于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,一经查实,立即删除!

相关文章

三星s6 android 8.0,再见Android 8.0,三星s6全系列系统都停止了,第一代国王已经倒下了吗?...

对于Android用户而言,最令人兴奋的事情是系统更新,因为该更新意味着更流畅的体验和更加用户友好的功能. 但是,旧的三星S6并不是那么幸运,并且不再错过Android 8.0.三星s6的全系列指的是三星s6,三星s6 edge,…

Exchange 2010无法安装问题解决方法

当你在活动目录(AD)森林中安装多台全局编录服务器(GC)之后,默认情况下你会发现在AD站点里面自动生成二条站点连接,从上面的截图可以看到目前在AD森林的Default-First-Site-Name(默认站点)里面有6台GC。 从上面的截图可以看到目前只有一台叫做Sh-Site1GC(全局编录服务器)是处于运…

一加6android9玩飞车掉,解锁新速度:一加6T深度评测

解锁新速度:一加6T深度评测2019-11-02 14:28:595点赞2收藏4评论创作立场声明:我们只谈智能硬件,向改变生活的智能硬件Say“嗨”!作为安卓旗舰机成员,一加这个品牌在玩机一类的同学手里可是大放光彩,各种刷机…

探讨跨域请求资源的几种方式

[转自:http://www.cnblogs.com/dojo-lzz/p/4265637.html] 什么是跨域JSONPproxy代理corsxdr由于浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。具体可以查看下表(来源) JSONP 这种…

python处理excel文件(xls和xlsx)

一、xlrd和xlwt 使用之前需要需要先安装,windows上如果直接在cmd中运行python则需要先执行pip3 install xlrd和pip3 install xlwt,如果使用pycharm则需要在项目的解释器中安装这两个模块,File-Settings-Project:layout-Project Interpreter&a…

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

protobuf是谷歌的Protocol Buffers的简称,用于结构化数据和字节码之间互相转换(序列化、反序列化),一般应用于网络传输,可支持多种编程语言。protobuf怎样使用这里不再介绍,本文主要介绍在MINA、Netty、Twi…

2021年南宁二中高考成绩查询,2021广西高考圆满结束,6月23日可查询成绩

6月8日下午,2021年高考统考圆满结束。今年广西参加高考统考考生人数40.05万余人,比2020年增加了2.2万人。我区预计6月23日可查询高考成绩,6月24日起可陆续填报志愿,我区的网上咨询会将于6月25日至27日举办。▲高考结束&#xff0c…

29 Python - 字符与编码

字符与编码 01 字符串本质 Python字符串相关概念 字符串 str 字节 bytes 字节数组 bytearray 电脑字符串存储机制 字符库:A、B每个字符有一个代码点如A是65 B为66,这种是方便人类读写的形式,但是最终需要存入计算机的CPU和内存&…

WPF:从WPF Diagram Designer Part 4学习分组、对齐、排序、序列化和常用功能

在前面三篇文章中我们介绍了如何给图形设计器增加移动、选择、改变大小及面板、缩略图、框线选择和工具箱和连接等功能,本篇是这个图形设计器系列的最后一篇,将和大家一起来学习一下如何给图形设计器增加分组、对齐、排序、序列化等功能。 WPF Diagram D…

ASP.NET Core跨域设置

项目中经常会遇到跨域问题,解决方法: 在appsettings.json 文件中添加json项 {"Logging": {"LogLevel": {"Default": "Warning"}},"AllowedHosts": "*","AppCores": "https…

CSS设计指南(读书笔记 - 背景)

本文转自william_xu 51CTO博客,原文链接:http://blog.51cto.com/williamx/1140006,如需转载请自行联系原作者

火车头如何才能设置发布的时候,如果是有html代码就直接的转换掉,互联网上笑话抽取及排重---火车头采集器的使用和MD5算法的应用...

10011311341 吕涛、10011311356李红目的:通过熟悉使用火车头采集器,在网络上采取3万条笑话并进行排重,以此来熟悉web文本挖掘的一些知识。过程:本次学习,主要分成两个部分。第一部分是笑话文本的采集,第二部…

win10上面安装win7的虚拟机怎么相互ping通

最近干了一些很蛋疼的事,这些都是自己踩过的坑,记录下来方便自己以后查阅 首先我的目的就是为了在自己的PC机上面部署一个SVN服务器,然后安装一个客户端,自己写的软件就可以定期入库,做好自己的版本控制,但…

win10用计算机名访问文件夹,win10系统提示你当前无权访问该文件夹的解决方法【图文教程】...

Win10系统下,我们在访问或更改某些系统文件夹时,有时会遇到系统提示“你当前无权访问该文件夹”的情况。那么,遇到这种情况的话,我们该怎么办呢?接下来,小编就向大家分享win10系统提示“你当前无权访问该文…

.Net Micro Framework研究—实现SideShow窗体界面

基于MF系统的Windows SideShow界面是非常炫的(如下图)。既然微软能用.Net Micro Framework实现这么棒的界面效果,我想我们也能做到。 (SideShow模拟器界面和游戏程序中的右键菜单—注意菜单弹出后,其它的界面变暗了&am…

2017年读书计划(一)

前言 这篇博文就暂时不记录技术了,记录下生活。对自己今年2017年做个读书计划安排。 最近在看一部网络剧 - 《花间提壶方大厨》,也许你们会感觉我很无聊,我也是被头条带坏了,每天上班一个小时的地下交通-地铁,就借助上…

音标

音标 oror ds念子音,ts念s音

数据结构与算法---查找算法(Search Algorithm)

查找算法介绍 在java中,我们常用的查找有四种: 顺序(线性)查找 二分查找/折半查找 插值查找斐波那契查找1)线性查找算法 示例: 有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称【顺序查找】 要求: 如果找到了&a…

Exchange Server 2007邮箱存储服务器的集群和高可用性技术(上)

高可用性矩阵-->见下图:邮箱服务器高可用性目标: 数据可用性-->保护邮箱数据免于失败和损坏服务可用性-->提高群集实效转移操作 简化群集管理 支持地理分散的群集 支持低成本大邮箱(GB)使用户可以基于业务需要更好的选择容错方案提高解决方案的可用性使用解决方案可…

html设置按钮样式变为椭圆,css border-radius圆形变为椭圆形,位置:绝对

我正在围绕字体真棒图标创建一个圆圈。我的问题是,当我添加position: absolute圆成为一个椭圆。css border-radius圆形变为椭圆形,位置:绝对同样的情况,如果我是设置display: block这里是什么,我想实现的图像 -CONRADU…