第1章 开发环境搭建:从零开始点亮第一颗LED

各位同学,咱们正式开始。做嵌入式开发,第一件事就是把家伙事儿备齐。MounRiver Studio 这个 IDE,说白了就是沁恒官方为 RISC-V 芯片量身定做的开发环境。我刚开始用的时候也觉得它界面有点「复古」,但用顺手了会发现,它对 CH32 系列的支持确实是最到位的。

1.1 MounRiver Studio 安装与配置

安装过程其实没什么玄学,但有几个细节我建议你留意一下。

  • 下载地址:去沁恒官网找 MounRiver Studio,目前最新版是 MRS v1.9x 系列。别去第三方下载站,我吃过亏,下载了个捆绑了广告的版本。
  • 安装路径:我个人习惯装到 D:\MounRiver 这种纯英文路径下。为什么?因为有些插件对中文路径支持不好,你想想看,万一编译报错是因为路径里有中文,排查起来多冤枉。
  • 驱动安装:安装完成后,插上开发板,系统会自动识别 WCH-Link 调试器。如果没识别,去安装目录下的 Driver 文件夹手动装一下。嗯,这里要注意:Windows 10/11 需要先禁用驱动签名强制,不然驱动装不上。
我的经验:第一次装驱动时,我折腾了半小时没反应。后来发现是 USB 线的问题——有些线只能充电,不能传数据。换了一根带屏蔽的数据线,立马识别。所以,别在 USB 线上省钱。

1.2 CH32V307 开发板快速认识

咱们课程用的是 CH32V307VCT6 核心板。这块板子性价比很高,RISC-V 内核跑 144MHz,带以太网、USB、CAN 等外设,做物联网节点绰绰有余。

项目 参数 备注
主控芯片 CH32V307VCT6 RISC-V RV32IMAC
主频 144MHz 实际可超频到 160MHz
Flash 256KB 够用,但别浪费
SRAM 64KB 注意堆栈分配
调试接口 WCH-Link (SWD) 板载,无需额外购买
板载 LED PC0 (红灯) 咱们第一个程序就点它

板子背面有个跳线帽,用来选择供电方式。我建议用 USB 供电,省事。如果你用外部电源,注意电压别超过 5V,否则芯片会冒烟——别问我怎么知道的。

1.3 第一个LED闪烁程序

好,现在咱们写代码。打开 MounRiver Studio,新建一个 CH32V307 工程。模板选「CH32V307_StdPeriph_Template」,这是官方标准外设库。

代码其实很简单,就是操作 GPIO 寄存器。我直接贴核心部分:

#include "ch32v30x.h"

void Delay(uint32_t count) {
    while(count--);
}

int main(void) {
    // 使能 GPIOC 时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

    // 配置 PC0 为推挽输出,50MHz
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    while(1) {
        GPIO_SetBits(GPIOC, GPIO_Pin_0);   // 点亮 LED
        Delay(500000);
        GPIO_ResetBits(GPIOC, GPIO_Pin_0); // 熄灭 LED
        Delay(500000);
    }
}
关键点:RCC_APB2PeriphClockCmd 这个函数必须调用。我见过不少新手忘了开时钟,结果 GPIO 死活没反应。记住:RISC-V 的外设时钟默认是关闭的,你得手动打开。

编译一下,按 Ctrl+B。如果没报错,你会看到控制台输出 Build Finished。嗯,到这里代码部分就完成了。

1.4 调试器连接与验证

接下来是最激动人心的环节——下载程序。把开发板通过 USB 线连到电脑,打开设备管理器,确认出现 WCH-Link 设备。

  1. 在 MRS 里点击 Debug 按钮(绿色小虫子图标)。
  2. 第一次调试会弹出配置窗口,选择 WCH-Link 调试器,接口选 SWD。
  3. 点击 Debug,程序会自动下载并停在 main 函数入口。
  4. 按 F8 全速运行。

如果一切顺利,板子上的红色 LED 会以大约 1 秒的间隔闪烁。

避坑指南:我曾经遇到过一次下载失败,提示 Cannot connect to target。排查了半天,发现是调试器的 SWD 接口被板子上的其他外设占用了。解决办法:按住板子上的 RST 键,再点击 Debug,等开始下载时松手。这叫「冷启动下载」,对付顽固情况很管用。

1.5 本章知识体系

为了让你对整个流程有个全局印象,我画了一张图。这张图把从安装 IDE 到 LED 闪烁的完整链路串起来了。

CH32 开发环境搭建与验证流程 下载 MounRiver Studio 安装驱动与工具链 连接开发板 新建工程模板 编写 LED 闪烁代码 编译(Ctrl+B) 点击 Debug 下载 全速运行(F8) LED 闪烁验证 提示:如果下载失败,尝试按住 RST 键再点击 Debug,松手时机是关键

这张图从左到右、从上到下,把整个流程分成了三个阶段:环境准备、代码开发、下载验证。你跟着这个流程走,基本不会出大问题。

1.6 常见问题与排查

最后,我列几个我实际遇到过的坑,你心里有个数:

  • 编译报错找不到头文件:检查工程路径是否包含中文或空格。我建议所有工程都放在 D:\Workspace\CH32 这种路径下。
  • 下载成功但 LED 不亮:先确认板子供电正常,再用万用表量一下 PC0 引脚电平。如果一直是高电平,检查代码里有没有把引脚配置成复用功能。
  • 调试器连接不稳定:换一根短一点的 USB 线,或者加一个 USB 磁环。我在现场调试时经常遇到干扰问题,磁环是神器。
一个小技巧:如果你手头有逻辑分析仪,可以抓一下 PC0 的波形。看看高低电平的持续时间是否和代码里的 Delay 参数一致。这能帮你验证延时函数是否准确。

好了,第一章的内容就到这里。你跟着操作一遍,把 LED 点亮了,这节课就算过关了。后面咱们会在这个基础上,逐步加入更多外设和通信协议。