两块钱的 CH32V003,引脚到底够不够用

CH32V003F4 标称 18 个 IO,能自由用的只有 16 个

这几天在给一块小板子挑型号,CH32V003F4P6 看着挺合适:TSSOP20、48 MHz、16 KB Flash、两毛钱。我查看引脚表,准备排一下要接的东西——三个按键、一个 I2C 传感器、一路串口、一路 PWM。
看到第三列就发现不对劲了:

  • 官方宣传页写「18 个 I/O 口,映像一个外部中断」。18 个我是信的,但 18 个脚分布在PA / PC / PD三个口上,而PA 口只有 PA1 和 PA2 两个脚——PA0、PA3 到 PA7 全都不存在。
  • 「映像一个外部中断」这句话我一开始以为写错了。翻到 EXTI 章节才发现更别扭:它有 8 条边沿检测线,但 8 条线共用一个中断入口,而且同一个线号在三个端口之间只能选一个。
  • 更麻烦的是封装。同一颗芯片四种封装,GPIO 数是18 / 18 / 14 / 6——SOP16 少 4 个,SOP8 直接少 12 个。少的不是随机几个,少的正好是PC5(SPI 的 SCK),所以SOP16 和 SOP8 根本没有 SPI。

这篇就是我把数据手册查看了一遍后,整理出来的引脚账。全是手册和源码里查得到、可以自己复核的东西。


一、18 个 IO 的功能

先看这 18 个引脚的功能。下表是 V003 能做到的、和"脚"直接相关的事,以及每件事要吃几个脚:

想做的事大概要几个脚靠什么
点灯、驱动继电器、读按键1 个脚 / 一路GPIO 推挽输出、上拉输入
串口和电脑通信2 个(TX/RX)USART1,有 4 种引脚组合
接 EEPROM、OLED、传感器2 个(SCL/SDA)I2C1,有 3 种引脚组合
接 Flash、LCD、SD 卡3~4 个SPI1,只有 20 脚印出来
采集电压、电位器、NTC1 个脚 / 一路ADC,最多 8 路外部通道
放大/比较小信号2~3 个内置 OPA/比较器
调光、调速、控电机1~6 个TIM1 互补 PWM + 死区
按键立刻响应、低功耗唤醒1 个脚 / 一路EXTI,最多 8 条线
红外接收、测转速、读编码器1~2 个输入捕获 / 计数器
软件模拟任何时序(单总线、WS2812)1 个脚纯 GPIO 翻转

看起来不少。但要注意:这些能力不是各自独占一堆脚,而是全都挤在同样那 18 个脚上互相抢。比如串口默认的 PD5/PD6,同时也是 ADC 的 A5/A6;I2C 的 PC2 同时是 TIM1 的刹车输入;OPA 的正输入 OPP1 干脆就长在复位脚 PD7 上。

所以 V003 的引脚问题不是"够不够多",而是**“能不能同时要”**。往下看就明白了。


二、18 个引脚在哪

三个端口,数量极不均匀:

端口有哪些脚数量备注
PAPA1、PA22没有 PA0,也没有 PA3~PA7
PCPC0~PC78完整 8 位
PDPD0~PD78完整 8 位

PA 口只有两个脚,这不是我漏抄——数据手册的引脚表里 PA 就只有这两位。它们同时是外部晶振的 OSCI/OSCO,也是 ADC 的 A1/A0,还是 OPA 的负/正输入。

18 个 pad 的完整档案:

Pad复位后的主功能默认复用功能5V 容忍
PA1PA1A1 / T1CH2 / OSCI / OPN0否
PA2PA2A0 / T1CH2N / OSCO / OPP0否
PC0PC0T2CH3 / UTX_3 / NSS_1 / T1CH3_1否
PC1PC1SDA/ NSS / T1BKIN_1 / T2CH4_1 / URX_3是(FT)
PC2PC2SCL/ URTS / T1BKIN / T2CH2_1 / AETR_1是(FT)
PC3PC3T1CH3 / T1CH1N_1 / UCTS_1否
PC4PC4A2 / T1CH4 / MCO / T1CH2N_1否
PC5PC5SCK/ T1ETR / T1CH3_3 / SCL_2是(FT)
PC6PC6MOSI/ T1CH1_1 / UCTS_2 / SDA_2是(FT)
PC7PC7MISO/ T1CH2_1 / T2CH2_3 / URTS_2否
PD0PD0T1CH1N / UTX_1 / SDA_1 / OPN1否
PD1PD1SWIO/ T1CH3N / AETR2 / URX_1 / SCL_1否
PD2PD2A3 / T1CH1 / T2CH3_1否
PD3PD3A4 / AETR / T1CH4_1 / T2CH2_2 / UCTS否
PD4PD4A7 / T2CH1ETR / UCK / OPO否
PD5PD5A5 /UTX/ T2CH4_3否
PD6PD6A6 /URX/ T2CH3_3否
PD7PD7NRST/ T2CH4 / UCK_1 / OPP1否

一个很多人不知道的点:数据手册的绝对最大额定值表写得很清楚——

  • FT(5V 容忍)引脚:输入电压 −0.3 ~5.5 V
  • 其他引脚:输入电压 −0.3 ~VDD + 0.3 V

而引脚表里标了 FT 的只有PC1、PC2、PC5、PC6这 4 个(正好是 I2C 和 SPI 那几根线)。所以在 3.3 V 供电时,剩下 14 个脚都不是 5V 容忍的,直接接 5 V 信号源会顶到 ESD 二极管上,靠串限流电阻赌运气。网上"V003 全脚 5V 容忍"的说法,和手册这张表对不上。


三、四种封装各自砍掉了什么

这颗芯片有四个型号,资源和封装如下(数据来自数据手册的型号资源表):

型号封装引脚数GPIOADC 通道SPII2CUSART
CH32V003F4P6TSSOP2020188111
CH32V003F4U6QFN2020188111
CH32V003A4M6SOP1616146无11
CH32V003J4M6SOP8866无11

缺的不是随便砍的,缺的是特定的 pad:

封装少了哪些 pad后果
TSSOP20 / QFN20一个不少18 个全给
SOP16PC5、PD0、PD2、PD3少了 PC5 =没有 SCK,SPI 直接没了
SOP8除 PD6/PA2/PC1/PC2/PC4/PD1 外全部只剩 6 个,连复位脚都没有

SOP16 为什么没有 SPI

这个值得单独说,因为它经常被误解成"资源表印错了"。

V003 的 SPI1 引脚是固定的一组:SCK=PC5、MOSI=PC6、MISO=PC7、NSS=PC1。而 SPI 的重映射(GPIO_Remap_SPI1)只把 NSS 从 PC1 挪到 PC0,SCK/MOSI/MISO 三个一动不动。

SOP16 恰好没有 PC5。SCK 无处可去 → SPI 用不了 → 资源表老老实实写-。

对比一下 20 脚封装:SCK/MOSI/MISO 一个不少,所以 SPI 能用。这就是"同一颗芯片,换个封装少个外设"的真实原因——不是外设被裁了,是它的时钟脚没引出来。

SOP8 那 6 个脚

J4M6 的引出脚(两处独立来源交叉核对的结果):

脚号Pad说明
1PD6也是 ADC A6、USART RX
2VSS地
3PA2也是 ADC A0、OSC
4VDD电源
5PC1I2C SDA(FT)
6PC2I2C SCL(FT)
7PC4ADC A2
8PD1SWIO,下载调试就靠它

这 6 个脚带来两个后果,都挺硬:

  • 没有 NRST。SOP8 上根本没有复位脚,复位只能靠上电复位(POR)或者软件复位,想加个复位按键都没地方接。
  • 默认的串口 TX(PD5)没引出来。剩下 6 个脚里没有 PD5,而 USART 的另外几种重映射落点(PD0、PC0)也都没引出。所以SOP8 上串口实际只能收(PD6),发不出去——要用 TX 只能软件模拟,或者换封装。这条是我按封装图推出来的,务必自己再核一遍。

20 脚的两种封装

TSSOP20 和 QFN20 的pad 完全一样,只是引脚排列不同(QFN 的 VSS 是 4 号脚 + 背面散热焊盘)。所以从 TSSOP20 换到 QFN20,代码一行不用改,只改 PCB。


四、脚号对照

画板子和查原理图时最常翻的就是这张表。空着的格子表示这个封装没有这个 pad。

PadSOP16TSSOP20QFN20
PA11252
PA21363
PC016107
PC11118
PC22129
PC331310
PC441411
PC5—1512
PC651613
PC761714
PD0—85
PD171815
PD2—1916
PD3—2017
PD48118
PD59219
PD610320
PD71141
VDD1596
VSS1474(+EP)

注意三件事:

  1. 引脚排列不是按端口顺序来的。TSSOP20 的 1 号脚是 PD4,20 号脚是 PD3,中间夹着 PA1/PA2/VDD/VSS——完全不是 PA 一段、PC 一段的直观排法。
  2. QFN20 的 4 号脚是 VSS,而且背面还有一片散热焊盘(EP),通常也要接地。只接 4 号脚、把 EP 悬空,是 QFN 封装最常见的翻车方式。
  3. SOP16 的 1、2 号脚是 PC1 和 PC2,正好是 I2C。想用 SOP16 接 I2C 传感器,这两根线挨在一起,走线很省事——这是 SOP16 唯一的"引脚友好"之处。

五、看其余引脚

"18 个 IO"是芯片内部的 pad 数,不是你能随便用的数。有三个脚有特殊身份:

1. PD1 = SWIO(单线调试/下载)

V003 没有 JTAG,也没有 SWD 的两根线,只有一根SWIO,就长在 PD1 上。WCH-Link 靠这根线下载和调试。

  • 想拿 PD1 当普通 IO?库里有开关:GPIO_PinRemapConfig(GPIO_Remap_SDI_Disable, ENABLE)。
  • 但关了之后WCH-Link 就再也连不上了,除非你手里有"上电瞬间抢占"的办法。实际项目里 PD1 就当它是死的。

2. PD7 = NRST(复位)

PD7 复位后的主功能就是 NRST。它同时也是 TIM2 的 CH4、OPA 的正输入 1。

  • V003 的库头

相关新闻

Claude Code最佳实践:从Vibe Coding到AI原生开发的实战路线图

Claude Code最佳实践:从Vibe Coding到AI原生开发的实战路线图

每天翻开源项目有一段时间了,今天轮到第70篇。这个 claude-code-best-practice 是我收藏夹里躺了很久的一个项目。每次有人问我“AI 编程到底怎么从玩具走向生产力”,我基本都会把它丢过去。它不是一份堆满术语的官方文档,也不是那种“教你三…

2026/10/19 19:37:56 阅读更多 →
CANN异构计算下向量算子开发:ATVOSS从设计到调优实战

CANN异构计算下向量算子开发:ATVOSS从设计到调优实战

最开始让我产生自己动手写向量算子的念头,是因为一次很普通的模型迁移。模型跑在GPU上的时候,融合了自定义的量化截断和动态缩放,迁移到基于CANN的异构计算环境之后,框架自带算子库没有完全匹配的组合算子,只能拆成好几…

2026/10/19 19:37:56 阅读更多 →
分词、词性标注与命名实体识别:NLP核心任务工程实践指南

分词、词性标注与命名实体识别:NLP核心任务工程实践指南

做NLP相关项目也有几年时间了,从最开始用正则表达式硬匹配,到后来用统计模型,再到现在折腾预训练模型,绕了一大圈发现:不管上层玩法怎么变,底层的分词、词性标注、命名实体识别这些核心任务始终是绕不开的基…

2026/10/19 19:36:55 阅读更多 →

最新新闻

UDP+TCP+多线程+Swing:局域网P2P即时通信课设全解析

UDP+TCP+多线程+Swing:局域网P2P即时通信课设全解析

简介:广东工业大学计算机网络课程设计项目,实现基于P2P的局域网即时通信系统,面向计网课设、Java网络编程与P2P应用开发者。系统采用P2P架构,程序既是服务器又是客户端,通过3333端口扫描局域网在线对等方,完…

2026/10/19 20:29:26 阅读更多 →
约束路径规划+改进ICP:复杂曲面点云配准误差降88.2%

约束路径规划+改进ICP:复杂曲面点云配准误差降88.2%

1. 从一组实测数据说起:为什么基础ICP在复杂曲面上总是“差一口气”先把标题里那组数字摆出来:平均误差0.599mm,RMSE 0.826mm,相比基础ICP下降88.2%。做过三维重建的人看到这组数字,第一反应大概率是“降得有点狠”&am…

2026/10/19 20:29:26 阅读更多 →
基于SpringBoot+小程序的掌上智慧医疗预约挂号系统设计

基于SpringBoot+小程序的掌上智慧医疗预约挂号系统设计

1. 项目背景与选题价值每年毕设季都有大量同学私信问同一个问题:想做小程序类的管理系统,又怕撞题、怕做不出来、怕答辩被刁难。我给出的建议向来很直接——B端后台 C端小程序是毕业设计里性价比最高的组合,而这个"基于springboot小程序…

2026/10/19 20:28:21 阅读更多 →
五种经典边缘检测算子详解:从Roberts到Canny的MATLAB实现与对比

五种经典边缘检测算子详解:从Roberts到Canny的MATLAB实现与对比

1. 边缘检测与图像分割的整体思路做图像处理的人应该都有过这样的经历:拿到一张图,最先想知道的往往不是整幅图的颜色分布,而是“这张图里什么东西在哪个位置”。边缘检测就是回答这个问题的基础手段。所谓边缘,说白了就是图像中灰…

2026/10/19 20:28:21 阅读更多 →
中级开发者AI能力升级路线图:从会用AI到会评AI

中级开发者AI能力升级路线图:从会用AI到会评AI

给中级开发者的 AI 能力升级路线图这两年 AI 编程工具发展太快,几乎每隔几个月就有新东西出来。不少中级开发者心里其实挺焦虑的:一边是网上铺天盖地的“AI 取代程序员”论调,一边是各种新工具、新模型层出不穷,感觉不学就要掉队。…

2026/10/19 20:28:21 阅读更多 →
SSM+Vue仓库管理系统开发实战:毕业设计源码与部署指南

SSM+Vue仓库管理系统开发实战:毕业设计源码与部署指南

简介:这是基于SSMVueHTML的Java仓库管理信息系统毕业设计资源,面向正在准备毕业设计、需要参考完整前后端分离项目或学习SSM框架整合的在校生。系统后台采用SSM框架,管理页面由Vue实现,前端展示页面为HTML,数据库使用M…

2026/10/19 20:28:21 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →