STM32组合设备实现USB转双串口

2023-10-30

USB转双串口,核心技术就在于组合设备(USB Composite)的实现,组合设备的实现,其核心技术在于描述符的实现,下面我们先给出描述符:
设备描述符

[C]  纯文本查看 复制代码
?
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
__ALIGN_BEGIN uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DESC] __ALIGN_END =
   {
     0x12,                       /*bLength */
     USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/
     0x00,                       /*bcdUSB */
     0x02,
#ifdef DUAL_COM
     0xEF,                       /*bDeviceClass*/
     0x02,                       /*bDeviceSubClass*/
     0x01,                       /*bDeviceProtocol*/
#else
     0x00,                       /*bDeviceClass*/
     0x00,                       /*bDeviceSubClass*/
     0x00,                       /*bDeviceProtocol*/       
#endif
     USB_OTG_MAX_EP0_SIZE,      /*bMaxPacketSize*/
     LOBYTE(USBD_VID),           /*idVendor*/
     HIBYTE(USBD_VID),           /*idVendor*/
     LOBYTE(USBD_PID),           /*idVendor*/
     HIBYTE(USBD_PID),           /*idVendor*/
     0x00,                       /*bcdDevice rel. 2.00*/
     0x02,
     USBD_IDX_MFC_STR,           /*Index of manufacturer  string*/
     USBD_IDX_PRODUCT_STR,       /*Index of product string*/
     USBD_IDX_SERIAL_STR,        /*Index of serial number string*/
     USBD_CFG_MAX_NUM            /*bNumConfigurations*/
   } ; /* USB_DeviceDescriptor */


注意:双串口需要全局定义DUAL_COM宏

配置描述符是重中之重

[C]  纯文本查看 复制代码
?
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
__ALIGN_BEGIN uint8_t usbd_cdc_CfgDesc[USB_CDC_CONFIG_DESC_SIZ]  __ALIGN_END =
{
   /*Configuration Descriptor*/
   0x09,   /* bLength: Configuration Descriptor size */
   USB_CONFIGURATION_DESCRIPTOR_TYPE,      /* bDescriptorType: Configuration */
   USB_CDC_CONFIG_DESC_SIZ,                /* wTotalLength:no of returned bytes */
   0x00,
#ifdef DUAL_COM
         0x04,   /* bNumInterfaces: 4 interface */
#else
   0x02,   /* bNumInterfaces: 2 interface */
#endif
   0x01,   /* bConfigurationValue: Configuration value */
   0x00,   /* iConfiguration: Index of string descriptor describing the configuration */
   0x60,   /* bmAttributes: self powered */
   0xFA,   /* MaxPower 0 mA */
   
   /*---------------------------------------------------------------------------*/
#ifdef DUAL_COM
         // IAD
         0x08,        // bLength: Interface Descriptor size
         0x0B,                // bDescriptorType: IAD
         0x00,        // bFirstInterface
         0x02,        // bInterfaceCount
         0x02,        // bFunctionClass: CDC
         0x02,        // bFunctionSubClass
         0x01,        // bFunctionProtocol
         0x02,        // iFunction
#endif
   /*Interface Descriptor */
   0x09,   /* bLength: Interface Descriptor size */
   USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: Interface */
   /* Interface descriptor type */
   0x00,   /* bInterfaceNumber: Number of Interface */
   0x00,   /* bAlternateSetting: Alternate setting */
   0x01,   /* bNumEndpoints: One endpoints used */
   0x02,   /* bInterfaceClass: Communication Interface Class */
   0x02,   /* bInterfaceSubClass: Abstract Control Model */
   0x01,   /* bInterfaceProtocol: Common AT commands */
   0x00,   /* iInterface: */
   
   /*Header Functional Descriptor*/
   0x05,   /* bLength: Endpoint Descriptor size */
   0x24,   /* bDescriptorType: CS_INTERFACE */
   0x00,   /* bDescriptorSubtype: Header Func Desc */
   0x10,   /* bcdCDC: spec release number */
   0x01,
   
   /*Call Management Functional Descriptor*/
   0x05,   /* bFunctionLength */
   0x24,   /* bDescriptorType: CS_INTERFACE */
   0x01,   /* bDescriptorSubtype: Call Management Func Desc */
   0x00,   /* bmCapabilities: D0+D1 */
   0x01,   /* bDataInterface: 1 */
   
   /*ACM Functional Descriptor*/
   0x04,   /* bFunctionLength */
   0x24,   /* bDescriptorType: CS_INTERFACE */
   0x02,   /* bDescriptorSubtype: Abstract Control Management desc */
   0x02,   /* bmCapabilities */
   
   /*Union Functional Descriptor*/
   0x05,   /* bFunctionLength */
   0x24,   /* bDescriptorType: CS_INTERFACE */
   0x06,   /* bDescriptorSubtype: Union func desc */
   0x00,   /* bMasterInterface: Communication class interface */
   0x01,   /* bSlaveInterface0: Data Class Interface */
   
   /*Endpoint 2 Descriptor*/
   0x07,                           /* bLength: Endpoint Descriptor size */
   USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
   CDC_CMD_EP,                     /* bEndpointAddress */
   0x03,                           /* bmAttributes: Interrupt */
   LOBYTE(CDC_CMD_PACKET_SZE),     /* wMaxPacketSize: */
   HIBYTE(CDC_CMD_PACKET_SZE),
   0xFF,                           /* bInterval: */
   
   /*---------------------------------------------------------------------------*/
   
   /*Data class interface descriptor*/
   0x09,   /* bLength: Endpoint Descriptor size */
   USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: */
   0x01,   /* bInterfaceNumber: Number of Interface */
   0x00,   /* bAlternateSetting: Alternate setting */
   0x02,   /* bNumEndpoints: Two endpoints used */
   0x0A,   /* bInterfaceClass: CDC */
   0x00,   /* bInterfaceSubClass: */
   0x00,   /* bInterfaceProtocol: */
   0x00,   /* iInterface: */
   
   /*Endpoint OUT Descriptor*/
   0x07,   /* bLength: Endpoint Descriptor size */
   USB_ENDPOINT_DESCRIPTOR_TYPE,      /* bDescriptorType: Endpoint */
   CDC_OUT_EP,                        /* bEndpointAddress */
   0x02,                              /* bmAttributes: Bulk */
   LOBYTE(CDC_DATA_MAX_PACKET_SIZE),  /* wMaxPacketSize: */
   HIBYTE(CDC_DATA_MAX_PACKET_SIZE),
   0x00,                              /* bInterval: ignore for Bulk transfer */
   
   /*Endpoint IN Descriptor*/
   0x07,   /* bLength: Endpoint Descriptor size */
   USB_ENDPOINT_DESCRIPTOR_TYPE,      /* bDescriptorType: Endpoint */
   CDC_IN_EP,                         /* bEndpointAddress */
   0x02,                              /* bmAttributes: Bulk */
   LOBYTE(CDC_DATA_MAX_PACKET_SIZE),  /* wMaxPacketSize: */
   HIBYTE(CDC_DATA_MAX_PACKET_SIZE),
   0x00,                              /* bInterval: ignore for Bulk transfer */
         
#ifdef DUAL_COM
         // IAD
         0x08,        // bLength: Interface Descriptor size
         0x0B,                // bDescriptorType: IAD
         0x02,        // bFirstInterface
         0x02,        // bInterfaceCount
         0x02,        // bFunctionClass: CDC
         0x02,        // bFunctionSubClass
         0x01,        // bFunctionProtocol
         0x02,        // iFunction
   /*Interface Descriptor */
   0x09,   /* bLength: Interface Descriptor size */
   USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: Interface */
   /* Interface descriptor type */
   0x02,   /* bInterfaceNumber: Number of Interface */
   0x00,   /* bAlternateSetting: Alternate setting */
   0x01,   /* bNumEndpoints: One endpoints used */
   0x02,   /* bInterfaceClass: Communication Interface Class */
   0x02,   /* bInterfaceSubClass: Abstract Control Model */
   0x01,   /* bInterfaceProtocol: Common AT commands */
   0x00,   /* iInterface: */
   
   /*Header Functional Descriptor*/
   0x05,   /* bLength: Endpoint Descriptor size */
   0x24,   /* bDescriptorType: CS_INTERFACE */
   0x00,   /* bDescriptorSubtype: Header Func Desc */
   0x10,   /* bcdCDC: spec release number */
   0x01,
   
   /*Call Management Functional Descriptor*/
   0x05,   /* bFunctionLength */
   0x24,   /* bDescriptorType: CS_INTERFACE */
   0x01,   /* bDescriptorSubtype: Call Management Func Desc */
   0x00,   /* bmCapabilities: D0+D1 */
   0x01,   /* bDataInterface: 1 */
   
   /*ACM Functional Descriptor*/
   0x04,   /* bFunctionLength */
   0x24,   /* bDescriptorType: CS_INTERFACE */
   0x02,   /* bDescriptorSubtype: Abstract Control Management desc */
   0x02,   /* bmCapabilities */
   
   /*Union Functional Descriptor*/
   0x05,   /* bFunctionLength */
   0x24,   /* bDescriptorType: CS_INTERFACE */
   0x06,   /* bDescriptorSubtype: Union func desc */
   0x00,   /* bMasterInterface: Communication class interface */
   0x01,   /* bSlaveInterface0: Data Class Interface */
   
   /*Endpoint 2 Descriptor*/
   0x07,                           /* bLength: Endpoint Descriptor size */
   USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
   CDC_CMD_EP,                  /* bEndpointAddress */
   0x03,                           /* bmAttributes: Interrupt */
   LOBYTE(CDC_CMD_PACKET_SZE),     /* wMaxPacketSize: */
   HIBYTE(CDC_CMD_PACKET_SZE),
   0xFF,                           /* bInterval: */
   
   /*---------------------------------------------------------------------------*/
   
   /*Data class interface descriptor*/
   0x09,   /* bLength: Endpoint Descriptor size */
   USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: */
   0x03,   /* bInterfaceNumber: Number of Interface */
   0x00,   /* bAlternateSetting: Alternate setting */
   0x02,   /* bNumEndpoints: Two endpoints used */
   0x0A,   /* bInterfaceClass: CDC */
   0x00,   /* bInterfaceSubClass: */
   0x00,   /* bInterfaceProtocol: */
   0x00,   /* iInterface: */
   
   /*Endpoint OUT Descriptor*/
   0x07,   /* bLength: Endpoint Descriptor size */
   USB_ENDPOINT_DESCRIPTOR_TYPE,      /* bDescriptorType: Endpoint */
   CDC_OUT_EP_EX,                     /* bEndpointAddress */
   0x02,                              /* bmAttributes: Bulk */
   LOBYTE(CDC_DATA_MAX_PACKET_SIZE),  /* wMaxPacketSize: */
   HIBYTE(CDC_DATA_MAX_PACKET_SIZE),
   0x00,                              /* bInterval: ignore for Bulk transfer */
   
   /*Endpoint IN Descriptor*/
   0x07,   /* bLength: Endpoint Descriptor size */
   USB_ENDPOINT_DESCRIPTOR_TYPE,      /* bDescriptorType: Endpoint */
   CDC_IN_EP_EX,                      /* bEndpointAddress */
   0x02,                              /* bmAttributes: Bulk */
   LOBYTE(CDC_DATA_MAX_PACKET_SIZE),  /* wMaxPacketSize: */
   HIBYTE(CDC_DATA_MAX_PACKET_SIZE),
   0x00                               /* bInterval: ignore for Bulk transfer */
#endif
} ;


这两个搞定,其他就是USB处理的细节问题了,包括端点的初始化,端点地址分配,数据发送接收的处理等,具体处理和实现程序可参考附件的工程源码。
成功安装驱动
<ignore_js_op> 
设备管理器里面的信息
<ignore_js_op> 
单片机程序源码: <ignore_js_op> Ginkgo_USB_COM.rar (1.06 MB, 下载次数: 2) 
PC端的驱动安装引导程序: <ignore_js_op> two_com.rar (982 Bytes, 下载次数: 2)

 

转载

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32组合设备实现USB转双串口 的相关文章

  • 继电器、并联的二极管和驱动三极管选型实战演练

    继电器选型原则 继电器的选用原则参见下表 在表中 必须确定 栏中有 号的项目被确定之后 就可选定一款继电器 如果有进一步的要求 需要进一步考虑 参考 栏中有 号的相应项目 下面对表格中的所有参数进行详细说明 触点 1触点负载 确定继电器所能
  • coreutils-stty 初始设置和echo 16进制modBus数据至串口

    安装USB串口驱动 注 我所使用的USB serial芯片为pl2303 个人根据自己不同的芯片安装对应驱动 kmod usb serial pl2303 串口 dev ttyUSB0 配置 其中 F 指定端口 cs8表示8位 parenb
  • 手动更新(rpi-update)树莓派固件

    手动更新 rpi update 树莓派固件 1 下载固件 本地更新 先在 PC 上下载固件 也可以用如下方法下载 curl L https github com Hexxeh rpi firmware archive master tar
  • 使用嵌入式linux完全手册光盘的arm-linux-gcc 遇到问题 自己编译

    Redhat9下重新生成交叉编译器gcc 3 4 5 glibc 2 3 6 看到论坛上有兄弟也遇到 arm linux gcc lib tls libc so 6 version GLIBC 2 4 not found required
  • 我的第一个Imx6ULL应用《百度图像识别》

    Imx6ULL填坑计划 此次用到的所有资料我都放到了奶牛快传里 下载的话速度极快 https c t work s fe0b4a22171342 我买这个板子已经很久了 跟着野火正点原子的教程踉踉跄跄学了一段儿 对很多基础知识也是一知半解
  • STM32的CAN过滤器

    最近开始给足底压力设备加外设 这里外设个主设备之间通过can总线连接 之前使用过can总线 但是对can的过滤器不是很理解 所以这里就借机整理一下 原文地址 再谈STM32的CAN过滤器 bxCAN的过滤器的4种工作模式以及使用方法总结 S
  • GPIO引脚的模式设置:开漏、推挽、拉高、拉低、中断输入、串行通信、模拟输入输出、容错输入、PWM输出。过零检测介绍。

    开漏输出 软件 将GPIO口设置为开漏输出模式 可以实现开漏输出控制方式 输出电平只能被拉低 而不能被拉高 在使用开漏输出时 需要外部接上一个上拉电阻 将输出电平拉高到高电平 开漏输出常用于驱动I2C总线 LED灯等场景中 硬件设置为开漏输
  • 树莓派体验3 - SSH登录树莓派

    如果没有HDMI转接线 显示器 USB转TTL串口线 那么可以通过网络SSH远程登录的方式访问树莓派 无显示器使用SSH访问 开启SSH服务 首先 通过镜像版本号确认一下SSH是否默认开启 树莓派官网的release note中说明 201
  • 嵌入式杂谈之中断向量表

    虽说接触了好久的单片机或者说嵌入式开发 不过对于有些概念还是比较模糊 因此此系列将会从一些零碎的小知识点出发 慢慢的遍历整张嵌入式开发的地图 这次先来看一下中断向量表 至于为什么会提到中断向量表 主要是因为我自己在学习嵌入式Linux开发的
  • stm32USB之模拟U盘

    STMF0 W25Q32模拟U盘 1 第一次写博客 如有错误 请及时指正 如有表达不通顺的地方 敬请谅解 2 本篇文章主要描述如何使用STM32cube配置USB 使用的主控为STM32F072 Flash为W25Q32 使用的主控RAM只
  • 粤嵌GEC6818开发板-入门感慨篇(续一)

    触摸屏的事件 include
  • MSP430嵌入式接口编程(惯性测量单元温湿度双音多频磁力计LCD显示等)

    Energia IDE编程MSP430 GPIO 串口通讯 定时中断 添加库 嵌入式器件接口编程 加速度计 include
  • C++实现FFT频谱分析

    Update 9 10 2022 鸽了太久 增补了一些新的表述和简单推导 以及FFT在算法竞赛中的应用部分 帖子里的代码已经分别在2021全国大学生电子设计竞赛 洛谷OJ和课程设计中实战过 可靠性有保障 Origin 10 23 2021
  • 下载 arm-linux-gcc

    https releases linaro org components toolchain binaries latest 4 arm linux gnueabihf 如果你使用的是ubuntu系统 你可以使用apt方式来安装arm li
  • 通过External Tools在STM32CubeIDE下使用DAP-LINK

    目录 一 文章背景 二 准备工作 2 1 Stm32CubeIDE 2 2 DAP LINK 2 3 STM32目标板 三 配置过程 3 1 连接目标板 3 2 配置仿真器 3 3 更改调试设置为远程调试 3 4 新建OpenOcd扩展工具
  • 为何在新建STM工程中全局声明两个宏

    在uVision中新建STM32工程后 需要从STM32标准库中拷贝标准外设驱动到自己的工程目录中 此时需要在工程设置 gt C C 选项卡下的Define文本框中键入这两个全局宏定义 STM32F40 41xxx USE STDPERIP
  • 属性,服务,事件

    属性 即设备支持的可读和 或可设置的参数功能 以一个灯为例 灯的开关就可以定义为一个属性 用户可以读取该属性的当前数值来得知灯的开关状态 也可以通过对该属性进行设置来打开或者关闭这个灯 服务 如果设备的某个功能只能设置 不能获取 那么可以将
  • Oracle块损坏处理(MOS)

    处理 Oracle 块损坏 文档 ID 1526911 1 适用于 Oracle Database Enterprise Edition 版本 7 0 16 0 到 11 2 0 2 0 发行版 7 0 到 11 2 本文档所含信息适用于所
  • 2022年 大学生工程训练比赛[物料搬运]

    本人和团结参加了2022年大学生工程训练 简称工训赛 校赛选拔 准备了几个月的时间和花费了较多的资金 由于疫情等多种情况 很遗憾未能参加湖南省省赛 过了这么久还是写个博客记录参赛准备和调试过程 目录 一 比赛要求 二 整体思路 三 硬件模块
  • 计算机基础:一颗芯片是怎样诞生的?

    一颗芯片是怎样诞生的 芯片属于半导体 半导体是介于导体和绝缘体之间的一类物质 元素周期表中硅 锗 硒 硼的单质都属于半导体 这些单质通过掺杂其他元素生成的一些化合物 也属于半导体的范畴 这些化合物在常温下可激发载流子的能力大增 导电能力大大

随机推荐

  • 内存函数详细解析 - C语言

    文章目录 前言 1 memcpy 内存拷贝 2 memmove 内存移动 3 memcmp 内存比较 4 memset 内存设置 5 函数代码 5 1memmove代码 5 2memcpy代码 5 3memcmp代码 5 4memset代码
  • 可综合的ROM芯片设计实现-verilog代码

    文章目录 1 基本单元 1 1 最基本cell 1 2 两个存储单位 1 3 八个存储单位 1 4 十六个存储单位 2 使用和测试 2 1 使用 2 2 仿真 本文实现可以综合的ROM模块 由verilog实现 该方法可以用于芯片固化程序的
  • 关于Android Studio中adb识别不了设备问题。

    文章目录 前情提要 第一种 杀进程方式 第二种 复制文件在Windows目录下 第三种 修改adb的端口号 第四种 重启电脑 前情提要 在windows系统中安装adb后 adb connect ip 5555 总是出现5037端口被占用的
  • MATLAB 批量读取NC文件并转为TIF文件

    因为课题处理30年的降雨和蒸发的遥感资料 NC格式 而想要在Arcgis中处理要求的是raster格式的 所以需要批量转化为tif文件 所以在此分享自己改编之后的代码 可以简洁明了的实现这个过程 我所参考和借鉴的文章的链接如下 MATLAB
  • 免费快捷一键生成SSL证书

    https freessl cn https www pianyissl com https certbot eff org 我只用过第一个 因为太强了 差不多五分钟搞定 下面两个是别人推荐的 记录一下使用过程 先注册登录https fre
  • ESP32/ESP8266 WIFI接入通过HTTP响应远程控制(附可用源码)

    1 esp32 esp8266相关介绍 1 1ESP WIFI工作模式 ESP共有三种工作模式 分别是无线接入点模式 AP 无线终端模式STA Wireless Station 以及混合模式 以上两种模式的混合 2 网络连接 ESP的WiF
  • Linux 上Docker的安装与使用入门

    1 安装Docker yum install docker x86 64 2 启动Docker service docker start把Docker 加入到开机自启动 chkconfig docker on 3 去docker 仓库查找i
  • Pycharm安装go插件,开始go之旅

    在PyCharm Idea一样 装GO插件 相当容易 PyCharm左上角 File gt Settings gt Plugins 点击 Browse repositories 输入go查询 看右侧说明确认是正确的go插件即可安装 PyCh
  • Java常见异常总结

    1 java lang NullPointerException 空指针异常 调用了未经初始化的对象或者是不存在的对象 经常出现在创建图片 调用数组这些操作中 比如图片未经初始化 或者图片创建时的路径错误等等 对数组操作中出现空指针 即把数
  • 移动通信关键技术-多址技术和复用技术

    移动通信网络简介 现在是2017年 4G已经使用很多年了 那么回顾一下移动通信的历史发展 1G 以AMPS ATCS为代表的模拟通信系统 主要技术是FDMA 主要业务是语音业务 2G 以GSM为代表的数字通信 主要技术TDMA是 IS 95
  • android任意函数绘制_Android布局优化技巧大盘点

    欢迎关注专栏 里面定期分享Android和Flutter架构技术知识点及解析 还会不断更新的BATJ面试专题 欢迎大家前来探讨交流 如有好的文章也欢迎投稿 Android高级进阶 zhuanlan zhihu com 开始 继上一篇卡顿优化
  • mysql leave iterator_c++迭代器(iterator)详解

    1 迭代器 iterator 是一中检查容器内元素并遍历元素的数据类型 1 每种容器类型都定义了自己的迭代器类型 如vector vector iterator iter 这条语句定义了一个名为iter的变量 它的数据类型是由vector定
  • 自作JavaScript飞机大战小游戏

    不会canvas画板标签小朋友们的福音来啦 用标签也能制作简单小游戏哦 飞机大战GitHub源码链接 https github com shunyue1320 fjdz git 做游戏就要有素材的啦 以下是在爱给网找到的素材 首先3个页面的
  • MobileNet(二)

    MobileNets MobileNetv1 深度可分离卷积 深度学习的经典网络模型 如ResNet VGG GooogleNet等已经达到了不错的效果 但存在一个问题 即模型庞大 参数较多 计算量较大 在一些实际的场景如移动或嵌入式设备中
  • git 查看远程地址 与 远程地址的设置

    一 查看远程地址 git remote v 如果绑定好远程地址的话 会有两条地址 fetch 和 push 那么 fetch 表示我们要获取到的地址 push则表示我们要推送的地址 二 远程地址的设置 1 添加远程地址 git remote
  • Prometheus 集成 Node Exporter

    文章首发于公众号 程序员果果 地址 https mp weixin qq com s 40ULB9UWbXVA21MxqnjBxw 简介 Prometheus 官方和一些第三方 已经把一些常用数据库 系统 中间件等的指标数据的采集做成了一个
  • 图像处理常用插值方法总结

    常用的插值方法 1 最邻近元法 这是最简单的一种插值方法 不需要计算 在待求象素的四邻象素中 将距离待求象素最近的邻象素灰度赋给待求象素 设i u j v i j为正整数 u v为大于零小于1的小数 下同 为待求象素坐标 则待求象素灰度的值
  • 矩阵运算库

    gt Android Java矩阵计算的架包Jama Jama是一个基本的线性代数Java包 包括一个基本的Matrix类和5个矩阵分解类 Matrix类提供了基本的线性代数数值运算的功能 不同的构造函数可以构造双精度和浮点精度的二维数组
  • 什么是DHCP?有什么优缺点

    DHCP 代表动态主机配置协议 它是存在于应用层的网络管理协议 在它的帮助下 可以将 Internet 协议 IP 地址动态分配给网络上的任何设备或节点 以便它们可以使用该 IP 进行通信 网络管理员的任务是为网络中的所有设备手动分配大量
  • STM32组合设备实现USB转双串口

    USB转双串口 核心技术就在于组合设备 USB Composite 的实现 组合设备的实现 其核心技术在于描述符的实现 下面我们先给出描述符 设备描述符 C 纯文本查看 复制代码 00001 00002 00003 00004 00005