☰
两块钱的 CH32V003,引脚到底够不够用
2026/10/19 19:37:35 网站建设 项目流程

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 的库头

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询