您好,欢迎访问沃航(武汉)科技有限公司官方网站
记录通过gcc编译cw32l010的方法
2025-11-25 22:32:15

由于keil的授权费太高,我们公司一直秉持着使用gcc作为单片机编译器的传统。最新研究一款新的国产超高性价比单片机---cw32l010,拥有媲美ch32v003、py32f002b等单片机的价格,还有着更好的技术支持(主要他们与我们都在武汉)。但是官方例程仅仅提供了keil与iar的编译器库,为了将其移植到gcc上编译,包括以后移植到linux上编译,因此小沃我可是亲自去他们公司武汉研发中心去请教了啊。现在就记录一下一直过程。

1、首先下载cw32官方技术论坛的帖子:传送门

下载附件,提取附件中的startup_cw32l010.S与cw32l010x8_flash.ld这三个文件,分别是芯片的汇编启动代码以及分区映射文件ld。

以及core_cm0plus.h、core_cmFunc.h与core_cmInstr.h这三个文件方便调用。

2、下载cw32的固件库:传送门

提取Libraries到自己工程中,方便后续调用。

3、创建自己的工程目录

Libraries文件夹、core_cm0plus.h、core_cmFunc.h与core_cmInstr.h、startup_cw32l010.S与cw32l010x8_flash.ld放到目录中

4、工程目录创建自己的Makefile

力源的工程文件没有Makefile,但是他们的工程师提供了一份CMake文件给我,我自己改成了Makefile如下:

PROJECT_NAME = app
CFLAGS = -mfloat-abi=soft -mcpu=cortex-m0plus -march=armv6-m -mthumb -mlittle-endian -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -D__VTOR_PRESENT -D__DEBUG -std=gnu11 -Os -I"main" -I"Libraries/inc" -I"Device/Include"
ASFLAGS = -mfloat-abi=soft -mcpu=cortex-m0plus -march=armv6-m -mthumb -mlittle-endian -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -D__VTOR_PRESENT -D__DEBUG -std=gnu11 -Os -x assembler-with-cpp
CC = arm-none-eabi-gcc
LDFLIE = Device/Source/GCC/linker/cw32l010x8_flash.ld

OBJS = \
Device/Source/GCC/startup_cw32l010.o \
main.o \
Libraries/src/cw32l010_gpio.o \
Libraries/src/cw32l010_sysctrl.o \
Libraries/src/system_cw32l010.o

all: ${PROJECT_NAME}.bin ${PROJECT_NAME}.hex

${PROJECT_NAME}.bin: ${PROJECT_NAME}.elf
    arm-none-eabi-objcopy -O binary $^ $@

${PROJECT_NAME}.hex: ${PROJECT_NAME}.elf
    arm-none-eabi-objcopy -O ihex $^ $@

${PROJECT_NAME}.elf: $(OBJS)
    $(CC) -T${LDFLIE} -Xlinker --gc-sections -Wl,--print-memory-usage,-Map=${PROJECT_NAME}.map --specs=nano.specs --specs=nosys.specs -mcpu=cortex-m0plus -mthumb -Os -o $@ $^

clean:
    rm ${PROJECT_NAME}.hex ${PROJECT_NAME}.bin ${PROJECT_NAME}.elf ${PROJECT_NAME}.map $(OBJS)

其中-I"main" -I"Libraries/inc" -I"Device/Include"是头文件的位置,比如core_cm0plus.h、core_cmFunc.h、core_cmInstr.h与Libraries文件夹中的头文件。

Device/Source/GCC/linker/cw32l010x8_flash.ld是链接文件的路径。

PROJECT_NAME = app代表生成的二进制文件叫做app.bin与app.hex。

OBJS后跟着的就是C语言源文件。

5、下载arm-none-eabi-gcc

下载地址为:传送门,根据自己的操作系统安装合适的版本即可,小沃安装的是14.3.rel1。

6、编写自己的代码

下面是小沃编写的一个gpio翻转的代码

#include "cw32l010_gpio.h"
#include "cw32l010_sysctrl.h"

void main(void)
{
    __SYSCTRL_GPIOB_CLK_ENABLE();
    GPIO_InitTypeDef pb03 = {0};
    SYSCTRL_HSI_Enable(SYSCTRL_HSIOSC_DIV1); // 48MHz
    pb03.IT = GPIO_IT_NONE;
    pb03.Mode = GPIO_MODE_OUTPUT_PP;
    pb03.Pins = GPIO_PIN_3;
    GPIO_Init(CW_GPIOB, &pb03);
    while (1)
    {
        GPIO_TogglePin(CW_GPIOB, GPIO_PIN_3); // 1k方波
        SysTick->LOAD = 0xffffff;
        SysTick->VAL = 0;
        SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk;
        while (0x1000000 - SysTick->VAL < 48000000 / 1000 / 2); // 48MHz下是延时0.5ms
        SysTick->CTRL = 0;
    }
}

// 下面4句话,不加编译会提示warning
void _close(void) {}
void _lseek(void) {}
void _read(void) {}
void _write(void) {}

7、打开终端运行make

windows如果不带make,可以尝试安装tdm-gcc,并使用里面的mingw32-make,编译效果如下图


文章作者:沃航科技

联系我们
地址:
武汉市洪山区蓝晶国际7栋903
QQ:
932773931
电话:
027-59761089-806
手机:
13397158231
邮箱:
jevian_ma@worldflying.cn
×
物联网组态平台
试用账号:123456
试用密码:123456
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn
×
积木编程平台
试用方式:试用手机号码注册即可使用
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn