沁恒CH32V103 边玩边学1-开发环境与GPIO项目

本文介绍了选择RISC-V架构的CH32V103C8T6开发板的原因,包括其开源、可扩展和易于定制的特点。文章详细阐述了如何使用MRSIDE、WCH-Link工具进行编程和烧录,并通过修改GPIO代码实现LED闪烁,为初学者提供了一个快速上手的教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么选择这块板子?

它基于 RISC-V 架构,来看看 GPT 给出的介绍:

RISC-V 是一种开源的指令集架构(ISA),与 x86 和 ARM 相似。它具有以下主要特点
• 简单 - RISC-V 采用精炼而简单的 RISC 指令设计,只有一些基本的常用指令。这使得 RISC-V 体系结构相对便于实现。
• 可扩展 - RISC-V 定义了多个 ISA 方案,从最基础的只有 32 个指令的 RV32I,到带浮点的 RV64GC 等。这提供了不同需求的选择。
• 开源 - RISC-V 的 ISA 及其相关规范完全开源和免费。任何人都可以在不必支付许可费用的情况下实现和使用 RISC-V。
• 硬件/软件定制可控 - 由于 RISC-V 是开源的,所以硬件和软件设计人员可以定制和优化 RISC-V implementations 以满足其需要。
• 跨平台 - RISC-V 可以实现在不同类型硬件平台上,如标准 CPU、SOC、FPGA 和 ASIC 等。这提供了很大的灵活性。
• 被广泛采用 - 许多公司和组织已经采用 RISC-V 来设计 CPU、SOC 甚至超级计算机。RISC-V 也已在嵌入式场景应用广泛。


虽然沁恒已经给出了对应开发板的示例项目,但是对应库函数介绍或者内核介绍可以说几乎没有,甚至 WCH-Link 配置过程也相当简略而不透彻。

但是其使用的库函数与 STM32 基本一致,内核结构等也无差别,可以通过该板子快速上手库函数开发,了解一些简单的概念,比如 GPIO ADC/DAC 看门狗 定时器 中断 PWM 等核心知识点,之后再转 STM32,就会更加简单了


CH32V103C8T6

还没有拿到沁恒开发板的小伙伴可以移步这里进行样品申请(板子免费但是运费顺丰到付):样品索取

我这里到手的是 CH32V103C8T6 评估板,运气不太好,有更高级的 30 系列的拿不到

去这里下载芯片手册和数据手:手册下载

我们还需要一个官方 ISP 工具:WCHISPStudio


MRS

MRS 全称 MounRiver Studio,专门为沁恒系列产品开发而设计的一款基于 Eclipse 的 IDE

在这里下载 IDE

我选择的是社区版,最顶上的那个其实也可以,看个人需求;

安装过程就是一直下一步就好了;


安装完毕我们来到 IDE 的根目录下,有几个重要的文件夹需要大家知晓

ExTool 存放烧写工具等其余实用工具
LinkDev 存放 WCH-Link 的驱动文件

在这里插入图片描述


WCH-Link

Link 工具可以使用以下两种方式安装:

  • 方法一:如果在此之前我们已经安装了 MRS,那么 WCHLinkUtility 可以在 MRS 根目录下找到:
    ..\MRS_Community\ExTool\SWDTool
  • 方法二:前往官网下载对应的 Link 烧录工具以及说明书:点击前往

在 MRS 根目录下找到驱动安装文件位置(上一小节已经提到过)
..\MRS_Community\LinkDrv\WCHLink

双击文件内的 SETUP.EXE 运行驱动安装程序,程序打开后点击安装驱动即可
安装成功会弹出对应窗口


当我们拿到沁恒寄付的样品时,会默认拿到一个 Link,该版本是 WCH-Link-R1-1V1

我们直接把他插到电脑的 USB 接口上去,你会发现出现两种亮灯情况

  • 只亮红灯:表示 Link 处于 RISC-V 状态
  • 同时亮红灯和蓝灯,表示 Link 处于 ARM 状态

此时打开设备管理器(右键电脑->管理->设备管理器)
看见端口识别且外部接口出现 WCH-LinkXX 字样即可(XX 根据你选择的架构师 RISC-V 还是 ARM 的不同而不同)

在这里插入图片描述

如果发现在“其他设备”一栏内部出现 WCH-Link,表示你的驱动还没有安装,windows 识别不了,安装一下然后重新插拔 Link 即可


此步骤也可以在 MRS 中实现,所以你可以跳过这一步

打开 WCHLinkUtility 工具

首先按照下图所示,先点击 Refresh 检测 Link,检测到了会出现对应名称
然后点击下方的 Get,获取当前 Mode,我这边默认的是 WCH-LinkRV 模式

你可以任选一个,比如 DAP 模式,然后点击 Set,即可更改 Mode

更改时 Link 处于工作状态,此时蓝灯不断闪烁,红灯熄灭

在这里插入图片描述


第一个程序!


连线

元件准备:

  • 一个 WCH-Link 版本:WCH-Link-R1-1V1
  • 一个沁恒评估板 版本:CH32V103C-R1-1V1
  • 一条 Type-C 数据线
  • 四条母对母杜邦线

在开始之前,我们需要分析一下原理图;
打开原理图手册CH32V103SCH.pdf 他放在我们下载的数据包 EVT/PUB下面

我们找到该评估板对应原理图,发现比较抽象的是,板子上的 LED 并没有直接和芯片引脚链接,也就是说我们没法直接通过设置芯片 GPIO 高低电平直接控制 LED,还是需要引出一条外部跳线到下图所示的的 P4 上面,才可以控制对应 LED(连线图在后续会给出)

在这里插入图片描述


拿出我们的 Link,按照下述使用三条母对母线连接评估板上对应针脚

  • SWCLK 连 PA13
  • SWDIO 连 PA14
  • GND 连 GND

为避免电流波动,我们改为使用 type-c 数据线给电
把数据线连接到板子上唯一一个 type-c 口,我这边用的是 5V,不知道 3V 可不可以,大家可以试试

打开板子上的开关,此时红灯点亮,成功给电

在使用另外一根杜邦线,把 PA4 和 P4 上的 LED1 针脚链接

最终我们会呈现下图所示的状况(下图展示的是整个 GPIO 项目完成后的结果)

在这里插入图片描述


GPIO 项目

打开官方自带的 GPIO 项目

点击 IDE 左上方的 file->open project from file system
注意,我们选择打开工程时,直接选择整个工程文件夹,不要学着 keil 的样子打开工程目录文件夹下的 wvproj 文件

在这里插入图片描述


打开文件 User/main.c

对于学过 STM32 的同学来说,第一段代码块肯定很熟悉,对对应 GPIO 口进行初始化

简单读一下默认程序,发现它初始化的是 RCC_APB2Periph_GPIOA 下的 GPIO_Pin_0
说人话就是初始化 PA0

但是我们需要对其进行测试,则将输出 pin 改为 4 口,即 GPIO_Pin_4 ,下方即为最终代码

/**
 * @brief 初始化用于GPIO切换的GPIO引脚
 */
void GPIO_Toggle_INIT(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0}; // 定义GPIO初始化结构体

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIOA的时钟

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; // 设置GPIO引脚为Pin_4
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 设置GPIO工作模式为推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 设置GPIO输出速度为50MHz

    GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化GPIOA引脚,应用上述设置
}


进入 main 函数块

我们想要实现的功能很简单,就是让 LED1 每隔一秒闪烁一次,直接使用沁恒提供的延迟库函数即可实现
故将源代码改为如下内容

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 配置中断优先级分组为Group 2
    Delay_Init(); // 初始化延时函数
    USART_Printf_Init(115200); // 初始化串口打印函数,波特率为115200
    printf("SystemClk:%d\r\n", SystemCoreClock); // 打印系统时钟频率

    printf("GPIO Toggle TEST\r\n"); // 打印测试提示信息
    GPIO_Toggle_INIT(); // 初始化GPIO引脚用于切换

    while(1)
    {
        Delay_Ms(1000); // 延时1秒
        GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_SET); // 设置GPIO引脚输出为高电平
        Delay_Ms(1000); // 延时1秒
        GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_RESET); // 设置GPIO引脚输出为低电平
    }
}

完整 main.c 代码清单

#include "debug.h"
 // 初始化GPIO PA4为输出模式,用于LED灯控制
 void GPIO_Toggle_INIT(void)
 {
     GPIO_InitTypeDef GPIO_InitStructure = {0};
     // 使能GPIOA时钟
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
     // 配置GPIOA的第4个引脚
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
     // 设置为推挽输出模式
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
     // 设置输出速度为50MHz
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     // 初始化GPIOA的第4个引脚
     GPIO_Init(GPIOA, &GPIO_InitStructure);
 }
 int main(void)
 {
     // 设置中断优先级分组为2
     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
     // 初始化延时函数
     Delay_Init();
     // 初始化USART printf函数,波特率为115200
     USART_Printf_Init(115200);
     // 打印系统时钟频率
     printf("SystemClk:%d\r\n", SystemCoreClock);
     // 打印GPIO Toggle测试的提示信息
     printf("GPIO Toggle TEST\r\n");
     // 初始化GPIOA的第4个引脚为输出模式
     GPIO_Toggle_INIT();
     while(1)
     {
         // 延时1秒
         Delay_Ms(1000);
         // 将GPIOA的第4个引脚设置为高电平
         GPIO_WriteBit(GPIOA,GPIO_Pin_4,Bit_SET);
         // 延时1秒
         Delay_Ms(1000);
         // 将GPIOA的第4个引脚设置为低电平
         GPIO_WriteBit(GPIOA,GPIO_Pin_4,Bit_RESET);
     }
 }

编译烧写

右键点击 Project Explore 下的项目根文件夹,点击 Build Project 即可自动进行编译构建

编译完毕后 obj 文件夹会多出很多文件,最关键的就是 hex 文件,如果没有的话可以参考这里的 IDE 官网说明书自行配置:看看说明书


按照下图,点击菜单栏的上的 Download 图标右侧小三角,下拉框选择 configuration 进入设置界面

如果我们之前使用 WCH-LinkUtility 设置了 Link 的模式为 WCH-LinkRV,那就不用管了,直接点击 query 后 apply 关闭页面即可

如果没有配置,我么需要先 query,然后在 target mode 内选好 WCH-LinkRV,再点击 apply 应用,会让你等一段时间以便更新固件,之后按照流程操作即可

在这里插入图片描述


最后一步!

确认开发板所有电路线都没有接错后,点击 Download 按钮,开始烧写;
此时 Link 蓝灯闪烁,烧写完成,蓝灯熄灭

可见,再所有步骤完毕后,开发板上 LED1 所在位置亮起了蓝灯,间隔 1s 后熄灭


### 关于沁恒图像处理技术及相关软件 南京沁恒微电子有限公司专注于嵌入式系统的开发,其产品和技术覆盖了多个领域,包括但不限于显示驱动、图像处理以及相关的软硬件解决方案。以下是关于沁恒图像处理技术和相关软件的一些详细介绍: #### 显示驱动图像处理支持 沁恒公司在其官方文档中提到,针对ST7789这类显示屏的驱动方案提供了详细的指导[^2]。这些方案不仅涵盖了基本的硬件连接方式,还涉及到了高级的功能实现,比如3D图像测试和优化。通过使用硬件SPIDMA加速技术,可以显著提升数据传输效率,从而改善图像渲染性能。 #### 去畸变色彩校正功能 基于引用中的描述,在某些特定版本或更新日志里提及了代码迁移到更现代框架下的改进措施[^1]。这其中包括加入了去畸变算法和支持保存高质量图片的能力,同时还解决了之前存在的颜色偏差问题。这意味着如果采用沁恒所提供的最新库文件或者工具链,则可以获得更加精确的颜色表现力以及更好的视觉体验效果。 #### 开发资源获取途径 对于想要深入了解沁恒所提供具体API接口定义及其背后原理的人来说,可以从以下几个方面入手寻找资料: - **官方网站**: 提供最权威的第一手资讯。 - **开源平台(GitHub)**: 查找是否有对应项目的公开仓库链接可供下载习。 - **开发者论坛(Stack Overflow 等社区)** : 当遇到实际操作过程中碰到难题时寻求同行解答建议。 ```python # 示例伪代码展示如何初始化一个可能由沁恒提供的图形界面类对象 class CHImageProcessor(): def __init__(self): self.display_driver = 'ST7789' def apply_distortion_correction(self, image_data): """ 应用去畸变逻辑 """ pass def save_image_with_color_calibration(self, file_path): """ 使用经过调整后的参数存储最终成果图 """ pass processor_instance = CHImageProcessor() ``` 以上仅为假设性的结构示意,并不代表真实存在此类Python模块;但确实反映了围绕该主题所构建应用程序可能会涉及到的主要组成部分之一。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhillerDev

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值