CANopen TPDO 配置详解:对象 1800h、1A00h 与实践指南

CANopen TPDO 配置详解:对象 1800h、1A00h 与实践指南

目录

  • [CANopen TPDO 配置详解:对象 1800h、1A00h 与实践指南](#CANopen TPDO 配置详解:对象 1800h、1A00h 与实践指南)
    • 目录
    • 引言
    • [TPDO 通讯参数详解 (对象 1800h)](#TPDO 通讯参数详解 (对象 1800h))
      • [1800h/00h: 子索引数量](#1800h/00h: 子索引数量)
      • [1800h/01h: COB-ID used by PDO](#1800h/01h: COB-ID used by PDO)
      • [1800h/02h: Transmission Type](#1800h/02h: Transmission Type)
      • [1800h/03h: Inhibit Time](#1800h/03h: Inhibit Time)
      • [1800h/04h: Compatibility Entry](#1800h/04h: Compatibility Entry)
      • [1800h/05h: Event Timer](#1800h/05h: Event Timer)
      • [1800h/06h: Sync Start Value](#1800h/06h: Sync Start Value)
    • [TPDO 映射参数详解 (对象 1A00h)](#TPDO 映射参数详解 (对象 1A00h))
      • [1A00h/00h: 映射的对象个数](#1A00h/00h: 映射的对象个数)
      • [1A00h/01h1A00h/08h: PDO 映射条目](#1A00h/01h 至 1A00h/08h: PDO 映射条目)
    • [TPDO1 配置实例:一步步指南](#TPDO1 配置实例:一步步指南)
      • 准备工作
      • 配置步骤
        • [1. 禁用 TXPDO1 的发送](#1. 禁用 TXPDO1 的发送)
        • [2. 清除 TXPDO1 当前的映射条目](#2. 清除 TXPDO1 当前的映射条目)
        • [3. 配置 TXPDO1 的第一个映射条目 (当前位置 6064h)](#3. 配置 TXPDO1 的第一个映射条目 (当前位置 6064h))
        • [4. 配置 TXPDO1 的第二个映射条目 (当前速度 6069h)](#4. 配置 TXPDO1 的第二个映射条目 (当前速度 6069h))
        • [5. 设置 TXPDO1 的映射对象个数为 2](#5. 设置 TXPDO1 的映射对象个数为 2)
        • [6. 配置 TXPDO1 的传输类型](#6. 配置 TXPDO1 的传输类型)
        • [7. 配置 TXPDO1 的抑制时间 (Inhibit Time)](#7. 配置 TXPDO1 的抑制时间 (Inhibit Time))
        • [8. 配置 TXPDO1 的事件定时器 (Event Timer)](#8. 配置 TXPDO1 的事件定时器 (Event Timer))
        • [9. 使能 TXPDO1 的发送](#9. 使能 TXPDO1 的发送)
      • 预期结果与验证
      • 故障排除提示
    • 总结

引言

在stm32上配置电机驱动器的CANOPEN,各种报文配置特别是配置TPDO真的是件很麻烦的事,对着文档进行配置都要配半天,现在越来越多的机器人开始用伺服驱动了,最近因为项目原因又复习了下CANOPEN的知识,整理成文章,以便日后忘了能直接看自己写的文章,大部分伺服驱动的对象字典都是通用的,可能也就各个索引子索引的默认值不一样而已,因此学会本文就能学会市面上所有主流的伺服驱动器的CANOPEN配置了,由于SDO太简单了本文不讲,就讲解PDO最关键的两个对象1800和1A00。

CANopen 是一种基于 CAN (Controller Area Network) 总线的高层通信协议和设备规范,广泛应用于自动化领域。在 CANopen 网络中,过程数据对象 (Process Data Objects, PDO) 用于实时传输过程数据。其中,传输 PDO (Transmit PDO, TPDO) 由设备主动发送给网络上的其他设备,例如传感器发送测量值,驱动器反馈状态等。

正确配置 TPDO 对于确保 CANopen 系统中数据交换的效率和可靠性至关重要。TPDO 的配置主要涉及两个核心对象:通讯参数对象(如 1800h 系列,用于定义 TPDO 如何 发送)和映射参数对象(如 1A00h 系列,用于定义 TPDO 包含什么数据)。

本文将详细解释与 TPDO1 相关的通讯参数对象 1800h 和映射参数对象 1A00h 的各个子索引及其含义,并通过一个具体的配置实例,一步步指导读者如何通过服务数据对象 (Service Data Objects, SDO) 来配置 TPDO1。


TPDO 通讯参数详解 (对象 1800h)

对象索引 1800h (通常代表 TxPDO1 Communication Parameter) 用于配置第一个发送过程数据对象 (TXPDO1) 的通信设置。它定义了 TXPDO1 如何发送,例如使用哪个 CAN ID,什么时候发送(传输类型),以及发送的最小间隔等。该对象包含一系列子索引,下面分别介绍。

1800h/00h: 子索引数量

  • 含义: 子索引数量 (Number of sub-indices)。
  • 数据类型: UNSIGNED8 (1 字节)。
  • 作用: 表示此对象 (1800h) 有效的子索引数量。根据 CiA402 标准和常见的对象字典,TXPDO 通讯参数通常包含 6 个子索引 (01h06h),因此这个值通常是 6。

1800h/01h: COB-ID used by PDO

  • 含义: 该 TXPDO 的 CAN 标识符 (COB-ID)。
  • 数据类型: UNSIGNED32 (4 字节)。
  • 作用: 这是 TXPDO1 报文在 CAN 总线上使用的唯一标识符。通常,低 11 位(对于标准帧)或低 29 位(对于扩展帧)是实际的 CAN-ID。此 32 位值中的 Bit 31 是一个重要的标志位:
    • 如果 Bit 31 置 1 (逻辑值,对应十六进制值的最高位为 8,例如 80000000h),表示禁用该 TXPDO 的发送 (PDO is not valid)。
    • 如果 Bit 31 置 0 (逻辑值,对应十六进制值的最高位为 0,例如 00000000h),表示使能该 TXPDO 的发送 (PDO is valid and active)。
    • CiA301 标准规定了默认的 TPDO COB-ID 分配方案。例如,TPDO1 的默认 COB-ID 通常是 180h + Node ID。然而,许多驱动器(如 CiA402)使用 280h + Node ID 作为 TPDO1 的默认值。请务必查阅您设备的手册以确认准确的默认值
    • 示例:假设节点 ID 为 1,且设备使用 280h + Node ID 作为 TPDO1 默认值,则默认 COB-ID 为 281h。要使能发送,写入的值是 00000281h;要禁用发送,写入的值是 80000281h

1800h/02h: Transmission Type

  • 含义: 该 TXPDO 的传输类型。
  • 数据类型: UNSIGNED8 (1 字节)。
  • 作用: 定义了设备何时发送该 TXPDO 报文:
    • 0: 同步循环传输 (Synchronous Cyclic) - 收到 SYNC 报文后发送。每收到一个 SYNC 或每 n 个 SYNC (n 由子索引 06h SYNC Start Value 定义,但通常用于控制 SYNC 计数器匹配) 发送一次。更准确地说,当 06h 为 0 时,PDO 在每个 SYNC 后发送;当 06h 为 n (1-240) 时,PDO 在第 n 个 SYNC 后发送,然后是第 2n, 3n... (此解释有待商榷,CiA301 中 06h 定义为 sync start value,而 "every n SYNCs" 更像是通过 1006h (Communication Cycle Period) 与 1005h (SYNC COB-ID) 的关系来实现,或者通过 RTR 方式)。对于循环同步,通常值 0 表示在每个 SYNC 后发送。
    • 1-240: 同步循环传输 (Synchronous Cyclic) / 周期性同步 - 收到 SYNC 报文后发送。数字 n 代表每收到 n 个 SYNC 报文后发送一次。例如,值为 1 表示每个 SYNC 后发送,值为 2 表示每隔一个 SYNC 发送一次。
    • 252: 同步,仅 RTR (Synchronous, RTR only) - 仅在收到远程传输请求 (RTR) 且该 RTR 的 CAN ID 与此 PDO 的 COB-ID 匹配时,并在下一个 SYNC 之后发送。(不常用)
    • 253: 异步,仅 RTR (Asynchronous, RTR only) - 仅在收到远程传输请求 (RTR) 且该 RTR 的 CAN ID 与此 PDO 的 COB-ID 匹配时发送。(不常用)
    • 254: 异步,事件驱动,制造商特定 (Asynchronous, event-driven, manufacturer specific) - 当映射到此 PDO 的一个或多个应用对象的数值发生变化时,PDO 被发送。具体行为可能由制造商定义,但通常受抑制时间 (1800h/03h) 限制。
    • 255 (FFh): 异步,事件驱动,设备行规特定 (Asynchronous, event-driven, device profile specific) - 当映射到此 PDO 的一个或多个应用对象的数值发生变化时,PDO 被发送。这是最常用的异步传输类型之一,用于实时反馈。发送行为受抑制时间 (1800h/03h) 和事件定时器 (1800h/05h) 的影响。

1800h/03h: Inhibit Time

  • 含义: 抑制时间。
  • 数据类型: UNSIGNED16 (2 字节)。
  • 作用: 设置该 TXPDO 连续两次发送之间的最小时间间隔。单位是 100 微秒 (µs) 。例如,要设置 10 毫秒 (10000 微秒) 的抑制时间,需要写入的值是 100 (十六进制 0064h)。这用于防止 PDO 报文因数据频繁变化而发送过于频繁,从而占用过多总线带宽。如果设置为 0,则抑制时间无效。

1800h/04h: Compatibility Entry

  • 含义: 兼容性条目。
  • 数据类型: UNSIGNED8 (1 字节)。
  • 作用: 此子索引保留,通常用于兼容性目的,在 CiA402 等常见的设备行规中通常未使用或值为 0。

1800h/05h: Event Timer

  • 含义: 事件定时器。
  • 数据类型: UNSIGNED16 (2 字节)。
  • 作用: 对于事件驱动的传输类型 (例如 254255),事件定时器提供了一个额外的周期性发送机制。即使映射的数据没有发生变化,如果自上次发送以来超过了事件定时器设定的时间,PDO 也会被发送。单位是 1 毫秒 (ms) 。例如,设置 100 毫秒的事件定时器,需要写入的值是 100 (十六进制 0064h)。如果设置为 0,则事件定时器无效。

1800h/06h: Sync Start Value

  • 含义: SYNC 起始值。
  • 数据类型: UNSIGNED8 (1 字节)。
  • 作用: 主要与同步传输类型 (如 0240) 相关。它定义了一个计数器值,当 SYNC 对象的计数器达到此值时,PDO 才被发送。如果此值为 0,则 PDO 在每个相应的 SYNC 事件后发送(取决于传输类型 0 还是 1-240)。CiA301 对此的描述是 "This parameter defines the value of the SYNC counter, when this PDO is transmitted synchronously."。对于传输类型 0 (acyclic/event-driven synchronous),此参数通常不使用或为0。对于传输类型 1-240 (cyclic synchronous),此参数与 SYNC 计数器一起决定 PDO 的发送时机。

TPDO 映射参数详解 (对象 1A00h)

对象索引 1A00h (通常代表 TxPDO1 Mapping Parameter) 用于定义第一个发送过程数据对象 (TXPDO1) 报文数据段的具体内容。它包含一个子索引 00h 用于记录映射对象的数量,以及多个用于存放实际映射条目的子索引 (例如 01h08h,最多可以映射 8 个对象,组成最多 64 位的数据)。

1A00h/00h: 映射的对象个数

  • 含义: 映射的对象个数 (Number of mapped application objects in PDO)。
  • 数据类型: UNSIGNED8 (1 字节)。
  • 作用: 指示 TXPDO1 报文的数据段中实际包含了多少个来自对象字典的应用对象的数值。这个值也间接决定了该 PDO 数据段的总长度(所有映射对象的数据长度之和)。例如,如果映射了两个 INT32 (每个 4 字节) 对象,那么映射对象个数就是 2,PDO 数据段长度就是 8 字节。
    • 配置注意: 在配置或修改 PDO 映射时,CiA301 标准建议的标准流程是:
      1. 首先将此子索引 (1A00h/00h) 的值设为 0。这会使 PDO 失效并允许修改映射条目。
      2. 然后配置或修改子索引 01h08h 中的具体映射条目。
      3. 最后,将此子索引 (1A00h/00h) 的值设为实际映射的对象数量,以使新的映射生效。PDO 的总长度不能超过 8 字节。

1A00h/01h1A00h/08h: PDO 映射条目

  • 含义: 具体的 PDO 映射条目。

  • 数据类型: UNSIGNED32 (4 字节)。

  • 作用: 每个子索引 (1A00h/01h, 1A00h/02h, ..., 最多到 1A00h/08h,取决于设备能力和子索引 00h 的值) 存储一个 32 位的数值。这个数值定义了 PDO 数据段中对应位置的数据是来自驱动器对象字典中的哪个对象、哪个子索引,以及该数据的位长度。这个 32 位值的结构是标准的 CiA 格式:

    • Bit 31 - Bit 16 (高 16 位): 对象索引 (Object Index)。要映射的对象的索引号(例如 6064h 表示当前位置反馈值,6069h 表示当前速度反馈值)。
    • Bit 15 - Bit 08 (中间 8 位): 子索引 (Sub-index)。要映射的对象的子索引号(例如 00h)。如果对象本身没有子索引(是一个简单变量),则此值为 00h
    • Bit 07 - Bit 00 (低 8 位): 数据大小 (Length of object in bits)。该对象数据在 PDO 报文中所占的 数(例如 INT32 是 32 位,对应十六进制 20hINT16 是 16 位,对应 10hBOOLEANUNSIGNED8 是 8 位,对应 08h)。
  • 例子: 如果要将"实际位置值" (Position actual value, 对象索引 6064h, 子索引 00h, 数据类型 INTEGER32, 长度 32 位) 映射到 TXPDO1 的第一个位置,需要向 1A00h/01h 写入的 32 位映射条目值为:

    • 对象索引: 6064h
    • 子索引: 00h
    • 数据大小 (位): 32 (十进制) = 20h (十六进制)
    • 组合起来的 32 位十六进制值就是 60640020h
    • SDO 传输注意: 当通过 SDO 报文写入这个 60640020h 值时,由于 CANopen 通常使用小端序 (Little-endian) 传输多字节数据,所以在 SDO 数据段中,这个值会按字节倒序排列为:20 00 64 60

通过正确配置 1800h (通讯参数) 和 1A00h (映射参数) 对象及其子索引,用户可以完全控制驱动器(或其他 CANopen 设备)通过 TXPDO1 发送什么数据以及何时、如何发送这些数据。


TPDO1 配置实例:一步步指南

本章节将通过一个具体的 SDO 指令序列,演示如何配置一个典型的 TXPDO1,使其能够发送两个对象的数据:例如伺服驱动器的当前位置 (6064h) 和当前速度 (6069h)。

准备工作

配置 TPDO 参数通常需要在 CANopen 节点(例如伺服驱动器)处于 NMT (Network Management) Pre-operational 状态下进行。在此状态下,节点可以进行对象字典的读写操作,但不能进行 PDO 通信。

完成所有 SDO 配置后,需要将节点切换到 NMT Operational 状态,节点才会根据新的配置开始发送 TPDO 报文。

以下配置示例假设:

  • 目标节点 ID 为 1
  • SDO 客户端(例如主站或配置工具)的 COB-ID 为 600h + Node ID,因此用于向节点 1 发送 SDO 请求的 COB-ID 为 601h
  • 节点 1 的 SDO 服务器响应 COB-ID 为 580h + Node ID,即 581h
  • TPDO1 的默认 COB-ID 将被配置为 180h + Node ID280h + Node ID (这里我们以 280h + Node ID 为例,即 281h)。

配置步骤

以下是配置 TXPDO1 映射和通讯参数的典型 SDO 报文序列。所有多字节数值在 SDO 报文数据段中均以低字节在前 (Little-endian) 的方式排列。

1. 禁用 TXPDO1 的发送

在修改 TPDO 参数之前,通常先禁用它。这是通过设置其 COB-ID (1800h/01h) 的 Bit 31 为 1 来实现的。

  • 操作描述: 向对象 1800h 的子索引 01h (COB-ID) 写入 TXPDO1 的目标 COB-ID (例如 281h,即 00000281h) 并将 Bit 31 置 1。因此写入的值为 80000281h

  • SDO 命令: 写 4 字节数据 (例如 SDO command specifier 22h,尽管 23h 更标准表示4字节,但文档中常用 22h,具体以CANopen规范或设备手册为准,这里沿用所提供文档的示例)。

  • 报文 Bytes (COB-ID + SDO 数据段):

    复制代码
    COB-ID: 601h (Request to Node 1)
    Data:   22 00 18 01 81 02 00 80
    • 601: COB-ID (SDO 请求发往节点 1)
    • 22: SDO 命令 (写 4 字节,根据示例)
    • 00 18: 索引 1800h (低字节 00 在前, 高字节 18 在后)
    • 01: 子索引 01h
    • 81 02 00 80: 数据 80000281h (低字节 81 在前, ..., 高字节 80 在后)

2. 清除 TXPDO1 当前的映射条目

根据 CiA301规范,修改映射前应先将映射对象个数 (1A00h/00h) 设置为 0。

  • 操作描述: 将对象 1A00h 的子索引 00h (Number of mapped objects) 设为 0。

  • SDO 命令: 写 1 字节数据 (SDO command specifier 2Fh)。

  • 报文 Bytes:

    复制代码
    COB-ID: 601h
    Data:   2F 00 1A 00 00 00 00 00
    • 601: COB-ID
    • 2F: SDO 命令 (写 1 字节)
    • 00 1A: 索引 1A00h (低字节 00 在前)
    • 00: 子索引 00h
    • 00: 数据 00h (其余字节为填充,根据SDO协议,对于 expedited transfer,可能不需要额外填充)

3. 配置 TXPDO1 的第一个映射条目 (当前位置 6064h)

  • 操作描述: 向对象 1A00h 的子索引 01h 写入第一个映射条目。假设我们要映射当前位置对象 6064h/00h,数据类型 INT32 (32 位)。映射条目值为 60640020h

  • SDO 命令: 写 4 字节数据 (SDO command specifier 22h,示例用法)。

  • 报文 Bytes:

    复制代码
    COB-ID: 601h
    Data:   22 00 1A 01 20 00 64 60
    • 601: COB-ID
    • 22: SDO 命令 (写 4 字节)
    • 00 1A: 索引 1A00h
    • 01: 子索引 01h
    • 20 00 64 60: 数据 60640020h (低字节 20 在前)

4. 配置 TXPDO1 的第二个映射条目 (当前速度 6069h)

  • 操作描述: 向对象 1A00h 的子索引 02h 写入第二个映射条目。假设我们要映射当前速度对象 6069h/00h,数据类型 INT32 (32 位)。映射条目值为 60690020h

  • SDO 命令: 写 4 字节数据 (SDO command specifier 22h,示例用法)。

  • 报文 Bytes:

    复制代码
    COB-ID: 601h
    Data:   22 00 1A 02 20 00 69 60
    • 601: COB-ID
    • 22: SDO 命令 (写 4 字节)
    • 00 1A: 索引 1A00h
    • 02: 子索引 02h
    • 20 00 69 60: 数据 60690020h (低字节 20 在前)

5. 设置 TXPDO1 的映射对象个数为 2

在配置完所有映射条目后,更新映射对象个数 (1A00h/00h) 为实际映射的数量。

  • 操作描述: 将对象 1A00h 的子索引 00h 设为 2 (因为我们映射了两个对象)。

  • SDO 命令: 写 1 字节数据 (SDO command specifier 2Fh)。

  • 报文 Bytes:

    复制代码
    COB-ID: 601h
    Data:   2F 00 1A 00 02 00 00 00
    • 601: COB-ID
    • 2F: SDO 命令 (写 1 字节)
    • 00 1A: 索引 1A00h
    • 00: 子索引 00h
    • 02: 数据 02h

6. 配置 TXPDO1 的传输类型

  • 操作描述: 配置传输类型 (1800h/02h)。通常设置为异步事件驱动,例如传输类型 255 (FFh),表示数据变化时发送,并受抑制时间限制。

  • SDO 命令: 写 1 字节数据 (SDO command specifier 2Fh)。

  • 报文 Bytes:

    复制代码
    COB-ID: 601h
    Data:   2F 00 18 02 FF 00 00 00
    • 601: COB-ID
    • 2F: SDO 命令 (写 1 字节)
    • 00 18: 索引 1800h
    • 02: 子索引 02h
    • FF: 数据 FFh (即 255)

7. 配置 TXPDO1 的抑制时间 (Inhibit Time)

  • 操作描述: 设置 PDO 发送的最小间隔 (1800h/03h)。单位 100 微秒。例如设置 10ms (10000 微秒),对应写入值为 100 (十进制) = 0064h (十六进制)。

  • SDO 命令: 写 2 字节数据 (SDO command specifier 2Bh)。

  • 报文 Bytes:

    复制代码
    COB-ID: 601h
    Data:   2B 00 18 03 64 00 00 00
    • 601: COB-ID
    • 2B: SDO 命令 (写 2 字节)
    • 00 18: 索引 1800h
    • 03: 子索引 03h
    • 64 00: 数据 0064h (低字节 64 在前)

8. 配置 TXPDO1 的事件定时器 (Event Timer)

  • 操作描述: (可选) 当传输类型为 255 时,事件定时器 (1800h/05h) 可用于确保至少周期性地发送 PDO,即使数据没有变化。单位 1 毫秒。例如设置 10ms,对应写入值为 10 (十进制) = 000Ah (十六进制)。

  • SDO 命令: 写 2 字节数据 (SDO command specifier 2Bh)。

  • 报文 Bytes:

    复制代码
    COB-ID: 601h
    Data:   2B 00 18 05 0A 00 00 00
    • 601: COB-ID
    • 2B: SDO 命令 (写 2 字节)
    • 00 18: 索引 1800h
    • 05: 子索引 05h
    • 0A 00: 数据 000Ah (低字节 0A 在前)

9. 使能 TXPDO1 的发送

最后,通过设置 COB-ID (1800h/01h) 的 Bit 31 为 0 来使能 TPDO。

  • 操作描述: 向对象 1800h 的子索引 01h (COB-ID) 写入 TXPDO1 的目标 COB-ID (例如 281h,即 00000281h) 并确保 Bit 31 为 0 (使能发送)。写入值为 00000281h

  • SDO 命令: 写 4 字节数据 (SDO command specifier 22h,示例用法)。

  • 报文 Bytes:

    复制代码
    COB-ID: 601h
    Data:   22 00 18 01 81 02 00 00
    • 601: COB-ID
    • 22: SDO 命令 (写 4 字节)
    • 00 18: 索引 1800h
    • 01: 子索引 01h
    • 81 02 00 00: 数据 00000281h (低字节 81 在前)

预期结果与验证

完成以上 SDO 配置序列后,将驱动器从 NMT Pre-operational 状态切换到 NMT Operational 状态。如果配置成功,您应该能通过 CAN 分析工具捕获到 COB-ID 为 281h (假设 Node ID 为 1 且默认基址为 280h) 的 TPDO1 报文。

其数据段应包含 8 个字节:

  • 前 4 个字节:当前位置反馈值 (来自对象 6064h),INT32 类型,低字节在前。
  • 后 4 个字节:当前速度反馈值 (来自对象 6069h),INT32 类型,低字节在前。

当这两个映射的对象 (6064h6069h) 的值发生变化时,或者当事件定时器超时(如果配置了且数据未变),TPDO1 就会被发送(同时受抑制时间约束)。

故障排除提示

如果在配置过程中遇到问题,并且上述标准 SDO 格式报文未能成功,可能需要查阅特定设备的手册。某些设备可能对特定对象(如 PDO 参数)使用非标准的 SDO 访问方式或自定义的 SDO 字节格式。例如,原始文档中提及的 22 [custom_bytes] 格式,这种格式与 CiA301 标准不完全相符,需要仔细对照设备文档来确定正确的 custom_bytes。始终优先参考设备制造商提供的官方文档。


总结

CANopen TPDO 的配置是实现设备间高效数据交换的关键环节。其核心在于正确设定通讯参数(主要通过对象 1800h 系列)和映射参数(主要通过对象 1A00h 系列)。通讯参数决定了 TPDO 何时以及如何发送,而映射参数则定义了 TPDO 包含哪些具体的过程数据。

通过 SDO 服务,可以灵活地配置这些参数以满足特定的应用需求。理解每个参数的含义,并遵循正确的配置步骤(如先禁用PDO、清空映射、配置新映射、设置映射数量、配置传输特性,最后再使能PDO),是确保 CANopen 系统稳定可靠运行的基础。

最后,希望有人能对这种需要CANOPEN的项目提供一个SDK,反正在伺服驱动领域对象字典基本都已经有通用标准了,市面上有一些canopen的库我看了不咋地,如果下次我又接手了这种项目,我将自己写一个好用的。

相关推荐
吃货界的硬件攻城狮2 小时前
【STM32 学习笔记】ADC数模转换器
笔记·stm32·单片机·学习
憧憬一下8 小时前
stm32之DMA
stm32·单片机·嵌入式硬件·嵌入式
狄加山67510 小时前
STM32智能手表:基于FreeRTOS
stm32·嵌入式硬件·智能手表
小智学长 | 嵌入式19 小时前
单片机-STM32部分:6、不同编程方式-寄存器、标准库、HAL库、LL库
stm32·单片机·嵌入式硬件
狄加山6751 天前
STM32的网络天气时钟项目
网络·stm32·嵌入式硬件
负里551 天前
stm32常见错误
stm32·单片机·嵌入式硬件
仰泳之鹅1 天前
【STM32F1标准库】理论——通信协议:串口
stm32·单片机·嵌入式硬件
焦佩奇1 天前
STM32裸机开发问题汇总
stm32·单片机·嵌入式硬件
CircuitWizard1 天前
阿里云平台与STM32的物联网设计
stm32·物联网·阿里云