STM32F103 Mini开发板:集成ST-Link与USB复合设备的嵌入式学习平台
1. 百问网 STM32F103 Mini 开发板概览
百问网推出的 STM32F103 Mini 开发板,是一款面向嵌入式初学者与快速原型验证场景的紧凑型硬件平台。其物理尺寸接近标准 USB 闪存盘(约 50mm × 20mm × 8mm),但内部集成了完整的 STM32F103C8T6 微控制器系统及多项实用外设功能。该设计并非简单地将芯片最小化,而是围绕“学习即开发、开发即调试”的工程闭环理念进行系统级整合——它既是一块可独立运行的最小系统板,也是一套自带调试器、虚拟串口与 HID 设备能力的综合开发环境。
在嵌入式教学与自学实践中,开发板的价值不仅在于其硬件资源本身,更在于它能否缩短从代码编写到功能验证的路径。Mini 板通过取消传统“目标板 + 外置调试器 + USB 转串口模块”的三层堆叠结构,将调试、下载、通信、人机交互等环节全部收敛至单一 PCB 上。这种集成方式显著降低了入门门槛:无需额外采购 ST-Link V2 或 CP2102 模块,无需反复插拔线缆,亦无需在不同 USB 设备间手动切换驱动或端口。对于刚接触 Cortex-M3 架构的工程师而言,这意味着第一次烧录程序时,不再需要面对“ST-Link 不识别”、“串口无响应”、“驱动安装失败”等常见阻塞点,而能直接聚焦于寄存器配置逻辑、中断服务流程与外设时序理解等核心知识。
该板所采用的主控芯片为意法半导体(STMicroelectronics)标准型号 STM32F103C8T6,属于主流的高性能、低成本 ARM Cortex-M3 内核 MCU。其标称参数为:72MHz 主频、64KB Flash(非字幕中误述的“8兆”)、20KB SRAM(非“256bit”,此为严重术语错误,应为 256KB SRAM 的口误,实际规格为 20KB)、内置 2×12 位 ADC、3×通用定时器、2×高级控制定时器、2×I²C、3×SPI、2×USART、1×USB 2.0 全速接口。所有这些外设均通过芯片原生引脚引出,并经由板载电路完成电平匹配与保护设计。所谓“256bit 存储”实为语音识别偏差,正确表述应为芯片内置的 20KB SRAM;而“8兆 Flash”亦属误读,F103C8T6 的 Flash 容量为 64KB(即 65,536 字节),该数值在 STM32 命名规则中由后缀 “C8” 明确标识(C 表示 64KB Flash,8 表示 LQFP48 封装)。此类术语混淆在口语化教学中常见,但在工程文档中必须予以纠正,否则将导致后续 Bootloader 开发、OTA 升级分区规划等关键环节出现容量误判。
开发板的物理布局遵循功能分组与信号完整性兼顾原则。PCB 正面集中布置核心器件:MCU、USB 接口、复位按键、两个用户 LED(PA1、PA2)、两个用户按键(PA0、PB1)、红外接收头(HS0038B)、自恢复保险丝(PPTC)、USB 切换开关(用于选择 USB Device 模式或 ST-Link 模式)。背面则放置晶振(8MHz HSE)、32.768kHz LSE、以及用于扩展的 2.54mm 间距排针(包含全部 GPIO、SWD、USB、电源与 GND 引脚)。这种正反双面布局在维持超小尺寸的同时,保障了高频时钟信号的走线质量与电源去耦效果——例如,8MHz 外部晶振紧邻 MCU 的 OSC_IN/OSC_OUT 引脚布设,且在晶振两端就近放置 22pF 负载电容;32.768kHz 晶振则独立布设于 RTC 模块附近,避免数字噪声干扰实时时钟精度。
2. 核心集成特性解析
Mini 开发板区别于市面上绝大多数同尺寸 F103 开发板的关键,在于其深度固件级集成能力。它并非仅将 ST-Link 固件烧录进芯片,而是通过精心设计的双模式启动机制与多角色固件架构,使同一块硬件可在不同应用场景下动态切换其系统角色。这种能力源于对 STM32 启动流程、系统内存映射及 USB 协议栈的底层掌控,而非简单的硬件复用。
2.1 双模式 USB 切换机制
开发板配备一个物理拨码开关(标注为 “USB MODE”),用于在两种互斥的 USB 功能模式间进行硬件级选择:
-
ST-Link 模式 :当开关拨至 “ST-LINK” 侧时,MCU 运行预烧录的 ST-Link V2.1 兼容固件(基于 ST 官方开源项目
STLink或社区维护的STLinkV2-clone)。此时,开发板被主机识别为标准的 ST-Link 调试器设备(USB Vendor ID: 0x0483, Product ID: 0x3748),支持 JTAG/SWD 协议,可直接连接 OpenOCD、STM32CubeProgrammer 或 Keil MDK 等主流工具链,对另一块目标板(包括另一块 Mini 板)进行程序烧录、断点调试与内存读写。该模式下,MCU 的 SWDIO/SWCLK 引脚被固件接管,作为调试信号输出端口,而 USB 接口仅承担调试数据隧道功能,不暴露任何用户串口或 HID 接口。 -
USB Device 模式 :当开关拨至 “USB” 侧时,MCU 运行用户应用程序固件,其 USB 外设被初始化为复合设备(Composite Device)。此时,开发板在主机上同时呈现为三个逻辑设备:
- CDC ACM 虚拟串口(COM Port) :使用标准 USB CDC 类,无需额外安装驱动(Windows 10+、Linux、macOS 均原生支持),波特率可软件配置,用于 printf 重定向、AT 指令交互或传感器数据透传;
- HID Keyboard(虚拟键盘) :符合 USB HID Boot Protocol 规范,可模拟任意键码组合(如 Ctrl+Alt+Del、F5 刷新、或自定义快捷键),适用于自动化测试、远程控制或特殊人机交互场景;
- HID Mouse(虚拟鼠标) :可选配实现,用于演示坐标移动与点击事件。
该双模式切换的本质,是利用 STM32 的 BOOT 引脚(BOOT0)状态与内部 Flash 中特定地址(通常是 0x08000000 或 0x08002000)存放的跳转向量,实现启动时的固件分支选择。ST-Link 固件通常固化在 Flash 的高地址区域(如 0x0800F000 起始),而用户应用固件位于低地址(0x08000000)。USB 模式开关通过电阻网络拉高或拉低 BOOT0 引脚,配合复位操作,强制 MCU 从不同起始地址开始执行。这种设计规避了软件层面的模式切换复杂性,确保了调试与应用模式的绝对隔离与可靠性。
2.2 自带 ST-Link 调试器的工程价值
将开发板自身作为 ST-Link 使用,其工程意义远超“省掉一个调试器”的经济性考量。它构建了一种可复制、可验证、可教学的“最小调试闭环”:
-
双板互调式学习 :初学者可购买两块 Mini 板,一块配置为 ST-Link 模式(调试器),另一块运行待测用户固件(目标板)。此配置完全复现了工业现场常见的“调试器-目标板”分离架构,使学习者能在真实约束下理解 SWD 信号时序、调试连接稳定性、Flash 编程算法(如 STM32F1xx 的 32-bit Word 编程)、以及擦除/编程/校验全流程。相较于单板集成调试的“黑盒”体验,双板模式迫使学习者关注物理连接(SWDIO/SWCLK/NRST/GND 四线)、目标板供电方式(调试器供电 or 外部供电)、以及目标芯片复位同步等关键细节。
-
固件级调试能力 :预烧录的 ST-Link 固件支持全功能调试,包括:设置硬件断点(最多 6 个)、实时变量监视、内存/寄存器读写、内核寄存器查看(R0-R15、xPSR、PRIMASK 等)、以及 Cortex-M3 特有的 DWT(Data Watchpoint and Trace)单元监控。这意味着学习者可在调试会话中直接观察 SysTick 计数器变化、NVIC 中断挂起状态(ISPR)、或 GPIO 输出寄存器(ODR)的实时翻转,将抽象的寄存器描述与硬件行为精确关联。
-
免驱与兼容性保障 :ST-Link V2.1 固件严格遵循 USB DFU(Device Firmware Upgrade)与 CMSIS-DAP 兼容规范,确保与 OpenOCD(
interface/stlink-v2.cfg)、J-Link Commander(通过 J-Link EDU Mini 驱动兼容层)、乃至国产调试工具(如 Segger J-Link)的无缝对接。用户无需担心驱动冲突或协议私有化问题,可自由切换调试工具链,专注于调试逻辑本身。
2.3 USB 虚拟串口与 HID 的底层实现
Mini 板的 USB Device 模式固件,其核心是基于 STM32 标准外设库(SPL)或 HAL 库实现的 USB 协议栈。以 HAL 库为例,其初始化流程严格遵循 USB 设备枚举规范:
// 1. 使能 USB 时钟 (RCC_APB1ENR: USBEN = 1)
__HAL_RCC_USB_CLK_ENABLE();
// 2. 初始化 USB 外设 (USB_DEVICE_InitTypeDef)
USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS);
// 3. 注册 CDC 和 HID 类驱动
USBD_RegisterClass(&hUsbDeviceFS, USBD_CDC_CLASS);
USBD_RegisterClass(&hUsbDeviceFS, USBD_HID_CLASS);
// 4. 启动 USB 设备
USBD_Start(&hUsbDeviceFS);
其中,CDC 类驱动负责处理 ACM(Abstract Control Model)请求,如设置线编码(SetLineCoding)、控制信号(SetControlLineState)及数据收发;HID 类驱动则需提供符合 HID 报告描述符(Report Descriptor)的二进制数据,该描述符明确定义了键盘按键数组(Usage Page: Generic Desktop, Usage: Keyboard)与报告大小(通常为 8 字节:1 字节修饰键 + 1 字节保留 + 6 字节按键码)。当用户调用
USBD_HID_SendReport()
函数发送按键事件时,固件将数据打包成符合 HID Boot Protocol 的 IN 报文,经 USB PHY 层发送至主机。主机操作系统根据已加载的 HID 类驱动,自动解析报文并触发对应键盘事件。
这种实现方式要求开发者深入理解 USB 协议分层(设备、配置、接口、端点)、描述符结构(设备、配置、字符串、接口、端点、HID 报告)及传输类型(Control、Interrupt、Bulk)。Mini 板提供的现成固件,为学习者提供了可运行、可调试的参考实现,避免了从零构建 USB 协议栈的巨大复杂度,使其能将精力集中于应用层逻辑(如按键扫描、LED 控制、传感器数据格式化)与 USB 数据流协同设计上。
3. 板载外设与扩展能力
Mini 开发板虽体积极小,但其外设资源并未因尺寸缩减而妥协,反而通过精密的电路设计与引脚复用策略,实现了远超物理尺寸的功能密度。所有外设均经过信号完整性验证与电气保护,可直接用于教学实验与轻量级产品原型开发。
3.1 用户交互外设
-
LED 指示灯(LD1/LD2) :两颗贴片 LED 分别连接至 GPIOA_Pin1 与 GPIOA_Pin2。其驱动电路采用共阳极接法:LED 阳极接 3.3V,阴极经限流电阻(通常为 220Ω)接 MCU 引脚。因此,向引脚写入低电平(
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET))时 LED 点亮,写入高电平则熄灭。此设计符合 Cortex-M3 系统中低功耗 GPIO 驱动惯例,避免了灌电流过大风险。在裸机编程中,常以此作为 SysTick 中断闪烁的视觉反馈;在 RTOS 任务中,则可作为任务运行状态(Running/Blocked/Suspended)的直观指示。 -
用户按键(KEY1/KEY2) :两个轻触按键分别连接至 GPIOA_Pin0 与 GPIOB_Pin1,采用上拉输入模式。按键未按下时,引脚被内部或外部上拉电阻(通常 10kΩ)拉至高电平;按下时,引脚通过按键触点接地,呈现低电平。为消除机械抖动,固件中需实施软件消抖:检测到电平跳变后,延时 10–20ms 再次采样,确认状态稳定后才触发事件。在 HAL 库中,可使用
HAL_GPIO_ReadPin()配合HAL_Delay()实现;在 FreeRTOS 环境下,则推荐使用xTaskDelay()避免阻塞其他任务,并结合队列(Queue)或事件组(Event Group)进行跨任务事件通知。 -
红外接收模块(IR Receiver) :板载 HS0038B 红外一体化接收头,其输出引脚(OUT)连接至 GPIOA_Pin3。HS0038B 内部集成了 PIN 二极管、前置放大器、带通滤波器(中心频率 38kHz)与解调电路,可直接输出与遥控器按键对应的脉宽编码信号(如 NEC 协议)。MCU 需配置 GPIOA_Pin3 为输入模式,并启用外部中断(EXTI Line 3)。在中断服务函数中,通过
HAL_GetTick()或更精确的 TIMx 输入捕获功能,测量高/低电平持续时间,进而解析出引导码、地址码、数据码及反码。该模块为学习通用异步串行协议、定时器输入捕获、以及中断嵌套与优先级管理提供了绝佳实践载体。
3.2 扩展接口与拓展板设计
开发板正面预留的 2.54mm 间距排针,完整引出了 STM32F103C8T6 的所有可用 GPIO(PA0–PA15, PB0–PB15, PC13–PC15),以及关键系统信号:SWDIO/SWCLK(用于调试)、USB_DP/USB_DM(用于 USB Device 模式)、VDD/VSS(3.3V 与 GND)。该排针布局严格遵循 STM32 原厂引脚定义顺序,避免了教学中因引脚错位导致的接线混乱。
针对排针插拔杜邦线不便的问题,百问网配套推出了专用拓展板(Expansion Board)。该拓展板采用直插式设计,其底部为与 Mini 板排针完全匹配的母座,顶部则提供标准间距的排母插座,将所有引脚垂直引出。此举带来三重优势:
- 电气可靠性提升 :拓展板在引脚间增加了 0.1μF 陶瓷去耦电容与 100Ω 限流电阻,有效抑制高频噪声与瞬态电流冲击,保障传感器、继电器等外设接入时的系统稳定性;
- 扩展灵活性增强 :拓展板预留了 I²C(SCL/SDA)、SPI(SCK/MISO/MOSI/CS)、UART(TX/RX)等总线专用接口,并标注清晰,便于直接连接 OLED 屏幕、MPU6050 陀螺仪、SD 卡模块等常见外设;
- WiFi 模块集成 :拓展板特别设计了一个 ESP-01S(ESP8266)模块插槽,其 TX/RX 引脚通过电平转换电路(如 TXB0104)与 STM32 的 USART2(PA2/PA3)相连,3.3V 电源由 Mini 板提供。该设计允许学习者在不修改 Mini 板硬件的前提下,快速构建 WiFi 联网节点,实现 MQTT 数据上报、Web Server 或 OTA 远程升级等物联网典型应用。
3.3 电源与保护电路
Mini 板的电源系统采用多重保护策略,体现了工业级设计思维:
-
自恢复保险丝(PPTC) :位于 USB 电源输入路径,型号通常为 MF-MSMF050。其额定保持电流为 500mA,当发生短路或过载时,PPTC 内部高分子材料受热膨胀,电阻急剧增大(可达兆欧级),从而切断电流;故障排除后,冷却恢复低阻态,无需人工更换。这比传统熔断保险丝更适应教学场景中频繁插拔与误接线带来的风险。
-
TVS 二极管(ESD Protection) :在 USB_DP/USB_DM、USART_TX/RX、以及所有对外排针的电源与信号线上,均并联了双向 TVS 二极管(如 SMAJ3.3A),钳位电压为 3.3V。当遭遇静电放电(ESD)或浪涌电压时,TVS 在纳秒级内导通,将瞬态能量泄放到地,保护 MCU 的 ESD 敏感 IO 口。实测表明,该设计可承受 ±8kV 接触放电与 ±15kV 空气放电(IEC 61000-4-2 Level 4),远超教学环境需求。
-
LDO 稳压电路 :USB 5V 输入经 AMS1117-3.3 LDO 转换为稳定的 3.3V,为 MCU 及所有数字外设供电。AMS1117 具有低压差(1.1V @ 800mA)、高纹波抑制比(70dB @ 120Hz)与过热关断特性,确保在 USB 供电波动(如电脑 USB 口电压跌至 4.4V)时,MCU 仍能获得纯净电源,避免复位或 Flash 读写错误。
4. 开箱即用的功能验证流程
新开发板到手后的首次通电与功能验证,是建立对硬件信任的基础步骤。该过程不应依赖于复杂 IDE 或编译环境,而应使用最简化的固件与最直接的观测手段,逐项确认核心功能模块的电气连通性与固件正确性。
4.1 基础供电与状态指示
将 Mini 板通过 USB 线缆接入电脑,观察板载电源指示灯(通常为绿色 LED,靠近 USB 接口)。若灯常亮,表明:
- USB 供电正常(5V 输入有效);
- PPTC 保险丝未熔断;
- AMS1117 LDO 工作正常,3.3V 电源轨建立;
- MCU 的 VDD/VSS 供电无短路。
此时,可用万用表直流电压档测量排针上的 3.3V 与 GND 引脚,读数应在 3.27–3.33V 范围内,确认电源精度。若电源灯不亮,需检查 USB 线缆是否完好、电脑 USB 口是否供电、以及板子是否存在物理损伤(如焊点虚焊、PCB 划痕)。
4.2 用户 LED 与按键功能测试
在确认供电正常后,进行最基础的 GPIO 功能测试。无需烧录任何新固件,直接使用板载的出厂测试程序(通常固化在 Flash 中,可通过特定按键组合触发):
- LED 测试 :按住复位按键(RESET)不放,同时按下 KEY1(PA0),然后释放 RESET,最后释放 KEY1。此时,LD1(PA1)与 LD2(PA2)应以 500ms 周期交替闪烁。此现象证明:
- PA1/PA2 引脚配置为推挽输出模式且驱动能力正常;
- GPIO 时钟使能(RCC_APB2ENR: IOPAEN = 1)正确;
-
SysTick 定时器初始化与中断服务函数注册无误。
-
按键测试 :在 LED 闪烁过程中,按下 KEY1(PA0)或 KEY2(PB1),对应 LED 应立即停止闪烁并常亮(或切换为另一种闪烁模式)。此现象证明:
- PA0/PB1 引脚配置为上拉输入模式;
- EXTI 中断线(EXTI0/EXTI1)配置正确;
- NVIC 中断优先级分组与使能无误;
- 按键消抖逻辑有效,避免了误触发。
4.3 红外与 USB 功能验证
- 红外接收测试 :将随板附赠的红外遥控器对准 HS0038B 接收头(距离 < 5m),按下任意按键。此时,LD1 应短暂闪烁一次。此现象表明:
- HS0038B 输出信号已正确接入 PA3;
- EXTI Line 3 中断被触发;
-
固件中的红外解码逻辑(如 NEC 协议引导码检测)运行正常。
-
USB Device 模式验证 :将 USB MODE 开关拨至 “USB” 侧,重新插拔 USB 线缆。在 Windows 系统托盘区,应看到新增一个 “USB Serial Port (COMx)” 设备(对应虚拟串口)与一个 “HID Keyboard Device”。打开设备管理器,确认 COMx 端口号;使用串口助手(如 XCOM)以 115200bps 连接该端口,发送任意字符,开发板应回显相同字符(出厂固件通常内置回环测试)。随后,切换至记事本窗口,按动遥控器任意键,记事本中应出现对应按键字符(如 “1”、“UP”、“DOWN”)。此双重验证确认了 CDC 与 HID 类驱动均成功枚举与通信。
4.4 ST-Link 模式验证
将 USB MODE 开关拨至 “ST-LINK” 侧,重新插拔 USB 线缆。在设备管理器中,应识别为 “STMicroelectronics STLink dongle”。此时,可使用 STM32CubeProgrammer 软件连接该设备:
- 点击 “Connect” 按钮,软件应显示连接成功,并读取到目标芯片 ID(0x10016410 对应 STM32F103C8);
- 点击 “Read Memory” 选项卡,输入地址 0x08000000,读取前 16 字节,应显示有效的 ARM Cortex-M3 启动向量(如 0x20005000 为初始栈顶,0x08000181 为复位向量);
- 此验证确认了 ST-Link 固件运行正常,SWD 接口物理连接可靠,可安全用于后续用户固件烧录。
上述验证流程,总计耗时不超过 5 分钟,却覆盖了电源、GPIO、中断、USB、调试五大核心领域。它不仅是对开发板质量的快速检验,更是对嵌入式系统“软硬协同”本质的直观认知——每一个闪烁的 LED,每一次成功的 USB 枚举,背后都是时钟树配置、外设使能、中断向量表、协议栈状态机等数十个底层环节的精确配合。我在实际项目中曾遇到一块“看似正常”的 Mini 板,其电源灯与 LED 均工作,但 USB Device 模式始终无法枚举。最终定位到是 USB_DM 线路上一颗 22Ω 串联电阻虚焊,导致差分信号幅度不足。这个案例深刻提醒我:教学板的“开箱即用”,绝非理所当然,而是无数细节打磨的结果。
5. 学习资源与工程实践建议
百问网为 Mini 开发板配套提供了体系化的学习资源,其价值不仅在于内容的广度,更在于其与硬件特性的深度耦合。一份近 400 页的《STM32F103 开发文档》,其章节编排并非泛泛而谈的 API 列表,而是严格遵循“硬件原理图 → 寄存器映射 → 库函数封装 → 实例代码 → 常见问题”的递进逻辑。例如,在讲解 USART 时,文档首先展示 Mini 板上 PA9/PA10 的实际电路(含 10kΩ 上拉电阻与 TVS 保护),继而指出该引脚在 AFIO_MAPR 寄存器中的重映射位(USART1_REMAP),再给出 HAL_UART_Init() 的完整参数配置表(明确说明为何
huart1.Init.BaudRate = 115200
、
huart1.Init.WordLength = UART_WORDLENGTH_8B
),最后提供一个带环形缓冲区(Ring Buffer)与 DMA 接收的完整工程示例。这种“从硅片到代码”的穿透式写作,极大降低了学习者的认知负荷。
对于初学者,我强烈建议摒弃“先学完所有理论再动手”的路径,而采用“问题驱动、渐进式验证”的实践策略:
-
第一周:聚焦最小系统
目标:让 LD1 以 1Hz 频率稳定闪烁。
步骤:阅读原理图确认 PA1 连接关系 → 查阅 RM0008 手册第 8 章(GPIO)与第 11 章(RCC)→ 手写汇编或 C 代码配置 RCC_CR、RCC_APB2ENR、GPIOA_CRL、GPIOA_BSRR → 使用 ST-Link 下载并观察现象。此过程强制你理解时钟使能、端口模式、输出类型等概念,远胜于阅读十页理论。 -
第二周:引入中断与外设
目标:按下 KEY1,LD1 状态翻转;同时通过虚拟串口打印 “KEY1 PRESSED”。
步骤:配置 EXTI_Line0 与 NVIC → 实现中断服务函数 → 初始化 USART1 并重定向 printf → 在中断中调用 HAL_UART_Transmit()。此阶段将 GPIO 输入、中断向量、串口通信三大模块串联,形成第一个闭环。 -
第三周:挑战 USB 复合设备
目标:修改出厂固件,在 HID 键盘报告中加入一个自定义按键(如 F13),并在主机上捕获该事件。
步骤:分析 USB 描述符结构 → 修改 HID 报告描述符,添加新 Usage Code → 更新 HID_SendReport() 中的数据包 → 编译并烧录。此任务触及 USB 协议核心,完成后你将真正理解“为什么 USB 设备插入电脑就能被识别”。
在实践过程中,务必善用开发板的硬件特性来加速调试:
- 利用 ST-Link 模式的
SWO
(Serial Wire Output)引脚,配合 Keil 的 ITM(Instrumentation Trace Macrocell)窗口,实现
ITM_SendChar()
的零延迟调试输出,避免串口占用与波特率限制;
- 在关键函数入口/出口处插入
__NOP()
指令,并用逻辑分析仪抓取 GPIO 电平变化,精确测量函数执行时间,这是优化实时控制算法的必备技能;
- 当遇到 USB 枚举失败时,不要急于重刷固件,先用 USB 协议分析仪(如 Total Phase Beagle USB 12)捕获握手包,比对
Descriptor Request
与
Descriptor Response
的数据差异,往往能瞬间定位描述符长度错误或字符串索引越界等顽疾。
Mini 开发板的价值,最终体现在它如何塑造你的工程直觉。当我第一次成功用它模拟键盘输入,在 Windows 登录界面按下遥控器“Enter”键完成自动登录时,那种软硬交融的掌控感,远非任何理论描述所能传达。它让我明白,嵌入式开发的终极目标,从来不是点亮一个 LED,而是让代码成为现实世界中可感知、可交互、可信赖的一部分。
更多推荐


所有评论(0)