沁恆CH32V103C8T6開發環境筆記

CH32V103C8T6

CH32V103C8T6是沁恆的RISC-V內核MCU, 基於RISC-V3A處理器, 內核採用2級流水線處理,設置了靜態分支預測、指令預取機制,支持DMA. 主要參數如下

  • CPU: 32位RISC-V3A, RV32IMAC指令集, 最高80MHz, 典型72MHz
  • RAM: 20KB
  • Flash: 64KB
  • BootLoader: 3.75KB 系統引導程序存儲區
  • 供電: 2.7V – 5.5V (兼容3.3V和5V)
  • Timer: 通用3, 高級1, 看門狗2, 系統時鐘1
  • ADC: 12bit, 10CH
  • SPI: 2
  • I2C: 2
  • UART: 3
  • USBHD: 1
  • 封裝: LQFP48

硬件部分

需要準備一片 WCH-Link 用於燒錄沁恆的芯片. 市面上有兼容 DAP-Link 和 WCH-Link 的燒錄器. 注意看燒錄器的說明, 其模式在加電前通過按鍵可以切換. 燒錄 CH32V103 時, 必須處於 WCH-Link的狀態

開發板 Bluepill

因為 CH32V103C8T6 引腳布局與 STM32F103C8T6, CH32F103C8T6 完全一致, 硬件設計通用,PIN對PIN兼容, 所以可以直接使用 STM32F103C8T6 核心板(Bluepill)作為開發板.
手裡正好有一片 STM32F103C6T6 的開發板, 電路和 STM32F103C8T6 是一樣的, 只是芯片型號不同, 於是用熱風焊將C6T6吹下來, 把 CH32V103C8T6 換上去.

熱風槍溫度設置成290度, MCU加上助焊油, STM32F103C6T6 吹掉之後的焊盤

焊上了 CH32V103C8T6, 第一次放得有點歪

又吹了一遍, 這次小心放正了

事後感覺有些PIN虛焊了, 所以又用電烙鐵拖了一遍

連線

WCH-Link -> Bluepill
3V3 -> 3V3
GND -> GND
SWD -> SWIO
SCK -> SWCLK

軟件部分

軟件部分其實就是 MounRiver Studio, 下載完解壓後安裝. MounRiver Studio 是基於 Eclipse 的擴展開發環境, 對於熟悉 Eclipse 的人用起來還比較方便. 安裝 MounRiver Studio 的同時, WCH-Link 的驅動就裝上了, 不需要再另外安裝.

測試項目

創建項目

下面建一個測試項目, 通過GPIO驅動板子上的PC13 LED

File -> New -> MounRiver Project, 在對話框中

  • 選擇芯片型號 WCH -> CH32V103 [RIsC-V] -> CH32V103C8T6
  • 輸入Project Name, 例如 Test001
  • 勾選 Use default location, 如果需要放到其他目錄, 這裡可以不勾選, 自行選擇
  • Template Type 選擇 NoneOS, 因為這只是個簡單測試, 只需要while循環即可
  • 點擊 Finish

在項目 Project Explorer 中會出現目錄結構,

編輯代碼

用戶代碼在 User 目錄下, 展開 User, 打開 main.c 將內容修改為

#include "debug.h"


void GPIO_Toggle_INIT(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}


int main(void)
{
    u8 i = 0;

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    Delay_Init();
    USART_Printf_Init(115200);
    printf("SystemClk:%d\r\n", SystemCoreClock);
    printf("GPIO Toggle TEST\r\n");
    GPIO_Toggle_INIT();

    while(1)
    {
        Delay_Ms(500);
        GPIO_WriteBit(GPIOC, GPIO_Pin_13, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));
    }
}

編譯項目

使用圖標欄中的編譯按鈕, 或者按F7編譯項目(完整編譯使用Shift+F7)

燒錄

首先在設備管理器中查看 Ports (COM & LPT), 如果燒錄器處於WCH-Link狀態並且已經連接電腦, 會出現 WCH-LinkRV SERIAL(COMx) 這樣的設備

使用圖標欄中的下載按鈕(Download), 或者按F8燒錄.

參考