【MCU】【CH32】基于CH32F103C8T6离线固件库和MDK环境下的工程模板搭建(纯手动)

一、简介

CH32F103C8T6 是南京沁恒微电子(WCH)推出的一款 32 位微控制器,兼容 STM32F103C8T6(意法半导体的经典型号),采用 ARM Cortex-M3 内核,性能与成本平衡,适合替代 STM32 在各类嵌入式项目中的应用。以下是其核心特性和应用场景:

(1)核心参数

  • 内核与性能

    • 32 位 ARM Cortex-M3 内核,最高 72MHz 主频,支持 Thumb-2 指令集。
    • 1.25DMIPS/MHz,内置硬件乘法器和除法器。
  • 存储与外设

    • 64KB Flash(支持 ICP/IAP)、20KB SRAM。
    • 丰富通信接口:3 个 USART、2 个 SPI、2 个 I2C、1 个 USB 2.0 全速(12Mbps)、CAN 2.0B。
    • 1 个 12 位 ADC(16 通道,最高 1MHz 采样率)、2 个 12 位 DAC。
    • 7 个定时器(包括高级定时器),支持 PWM 输出和编码器接口。
  • 工作条件

    • 供电电压:2.0V~3.6V,工作温度:-40°C~+85°C(工业级)。
    • 低功耗模式:睡眠、停止、待机。

(2)与 STM32F103C8T6 的兼容性

  • 硬件引脚兼容:完全兼容 STM32F103C8T6 的 LQFP48 封装,可直接替换。
  • 软件兼容:支持标准库(需使用 WCH 提供的固件库)和 HAL 库,大部分 STM32 代码可无缝移植。
  • 工具链支持
    • 开发环境:Keil MDK、IAR、GCC(如 OpenOCD)。
    • 调试接口:支持 SWD/JTAG(与 STM32 相同)。

(3)应用场景

  • 工业控制:电机控制、传感器数据采集、PLC 模块。
  • 消费电子:智能家居设备、手持设备、无线充电。
  • 通信设备:串口转 USB/CAN 转换器、网关。
  • 替代方案:在 STM32 缺货或成本敏感场景中作为直接替代品。

(4)优势与注意事项

  • 优势

    • 成本更低:价格通常低于 STM32F103C8T6。
    • 国产支持:供货稳定,技术支持响应快。
    • 扩展特性:部分型号增加了 USB 和 CAN 等接口(如 CH32F103xC 系列)。
  • 注意事项

    • 固件库差异:虽然 API 与 STM32 类似,但细节可能不同,需参考 WCH 官方文档。
    • 生态资源较少:第三方库和教程不如 STM32 丰富。
    • 性能微调:部分外设(如 ADC)的精度和稳定性可能略逊于 STM32。

(5)开发资源

  • 官方资源
    • 沁恒官网(www.wch.cn)提供固件库、数据手册和开发工具(如 WCH-Link)。
    • 支持标准的 ARM 开发工具链(如 Keil、GCC)。
  • 社区支持:国内开源社区(如 STM32 论坛)有部分 CH32 移植经验分享。

CH32F103C8T6的官方示例链接

安装CH32F103C8T6的MDK支持包

二、工程搭建

1.新建文件夹CH32_Example,然后再在其内新建文件夹

 2.\CH32资料\CH32F103\GPIO_PC13LED Project下的ch32f10x_conf.h放到我们的工程文件夹下的config文件夹下

       使用了商家给的示例工程方便来移植整理,官方的其实也可以,但是外设源码是分开的需要自己整理,所以这里我就使用了商家给的来移植。

3.将.s启动文件放到startup文件夹下

4.将\CH32资料\CH32F103\GPIO_PC13LED Project\SRC\CMSIS下的内核文件放到cmsis文件夹下

5.将\CH32资料\CH32F103\GPIO_PC13LED Project下的system_ch32f10x.h/c系统文件放到system文件夹下

6.将\CH32资料\CH32F103\GPIO_PC13LED Project\SRC\StdPeriphDriver下的外设头文件和c文件放到firmware下

7.将\CH32资料\CH32F103\GPIO_PC13LED Project下的ch32f10x_it.h/c和main.c的文件放到user下

8.打开MDK新建工程在Project下,并选择CH32的支持包

9.重新建立工程结构

10.添加文件

11.添加商家给的额外的库

12.添加文件路径

13.移去ch32f10x_usb_host.c

14.编译完成

三、代码编写

/********************************** (C) COPYRIGHT *******************************
* File Name          : main.c
* Author             : WCH
* Version            : V1.0.0
* Date               : 2019/10/15
* Description        : Main program body.
*******************************************************************************/ 
#include "debug.h"

/* Global define */


/* Global Variable */ 


/*******************************************************************************
* Function Name  : GPIO_Toggle_INIT
* Description    : Initializes GPIOA.0
* Input          : None
* Return         : None
*******************************************************************************/
void GPIO_Toggle_INIT(void)
{
	GPIO_InitTypeDef  GPIO_InitStructure;

	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);                  
}

/*******************************************************************************
* Function Name  : main
* Description    : Main program.
* Input          : None
* Return         : None
*******************************************************************************/
int main(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	Delay_Init();
	//USART_Printf_Init(115200);
	GPIO_Toggle_INIT();
	//printf("SystemClk:%d\r\n",SystemCoreClock);
	//printf("GPIO Toggle TEST\r\n");
    
	while(1)
	{
		Delay_Ms(1000);
		GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET);
		Delay_Ms(1000);
		GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET);
	}
}



四、实验效果

示例工程链接:

https://github.com/Molesidy/CH32.githttps://github.com/Molesidy/CH32.git

posted @ 2025-07-09 22:53  Molesidy  阅读(6)  评论(0)    收藏  举报  来源
//雪花飘落效果