【沁恒 CH32V208 开发板免费试用】RTT 纯命令行(makefile) 和 点灯测试

描述

title: 【沁恒 CH32V208 开发板免费试用】RTT 纯命令行(makefile)  点灯测试
date: 2023-05-24 18:24:01
tags: 嵌入式

概述

沁恒 CH32V208 开发板是一款基于risc-v内核的微控制器,具有丰富的外设资源和高性能的处理能力。本文介绍了如何使用makefile进行编译,并提供了一个简单的点灯测试程序示例,以验证开发板的基本功能是否正常。通过本文的介绍,读者可以快速上手使用沁恒 CH32V208 开发板进行开发。

RT-Thread

环境/工具

需要借助一些软件和硬件相结合,做出项目.

软件

  • Windows10 (其他平台没测试)
  • VScode
  • make (针对makefile编译)
  • risc-v 8.2.0 工具箱 (github有提供riscv-none-embed-XXX压缩包)
  • WCHISPTOOLS (沁恒自带烧录工具)
  • SERIAL DEBUG (查看调试日志)

RT-Thread

首先,让我们来了解一下如何使用makefile进行编译。makefile是一种常用的自动化构建工具,它可以根据指定的规则自动化地生成目标文件和可执行文件。在使用makefile之前,需要安装GNU Make工具,并在项目目录下创建一个名为Makefile的文件。所以不借助平台来编译,只用纯命令行来执行,所以锻炼自己能力哈。

硬件

  • CH32V208开发板

  • wch-link (快递赠的)

    RT-Thread

RT-Thread

测试

接下来,让我们来看一下如何进行点灯测试。点灯测试是一种常用的测试方法,可以验证开发板的基本功能是否正常。在沁恒 CH32V208 开发板上,可以通过GPIO口控制LED灯的亮灭。

实例

用makefile来编译

TARGET := 01LED

include config.mk
include src.mk

CFLAGS += $(CPPPATHS)
CXXFLAGS += $(CPPPATHS)
AFLAGS += $(CPPPATHS)

CFLAGS += $(DEFINES)
CXXFLAGS += $(DEFINES)
AFLAGS += $(DEFINES)



TOOLCHAIN    = riscv-none-embed-
CC           = $(TOOLCHAIN)gcc
SZ           = $(TOOLCHAIN)size
CP           = $(TOOLCHAIN)objcopy
AS           = $(TOOLCHAIN)gcc
HEX          = $(CP) -O ihex
BIN          = $(CP) -O binary -S

# IOT position
ROOT_DIR := ../../../..
# bsp position
BSP_DIR := .
BUILD_DIR = $(BSP_DIR)/build
LD_FILES = $(ROOT_DIR)/bsp/CH32V208/libraries/Ld/link.lds



FLAGS += -march=rv32imac -mabi=ilp32 -msmall-data-limit=8 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized  -g -std=gnu99 -DCH32V20x_D8W 



C_FLAGS += $(CC) $(CFLAGS) -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
AS_FLAGS += $(CC) $(AFLAGS) -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"

LINK_FLAGS += $(CC) $(LFLAGS) $(EXTERN_LIB)
# --specs=nano.specs 


all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin



OBJECT = $(addprefix $(BUILD_DIR)/,$(notdir $(S_FILES:.S=.o)))
vpath %.S $(sort $(dir $(S_FILES)))
OBJECT += $(addprefix $(BUILD_DIR)/,$(notdir $(C_FILES:.c=.o)))
vpath %.c $(sort $(dir $(C_FILES)))

OBJECTS += $(sort $(OBJECT))


$(BUILD_DIR)/%.o:%.S Makefile | $(BUILD_DIR)
	$(AS_FLAGS)

$(BUILD_DIR)/%.o:%.c Makefile | $(BUILD_DIR)
	$(C_FLAGS)

$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) | Makefile
	$(LINK_FLAGS) $(OBJECTS) -o $@
	$(SZ) --format=berkeley $@

$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
	$(HEX) $< $@

$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
	$(BIN)  $< $@

$(BUILD_DIR):
	@echo $(OBJECTS)
	mkdir $@

DATE = $(shell date)
push:
	git add $(RTT_ROOT)
	git commit -m "update :$(DATE)"
	git push origin/main

c:
	rmdir	 /s /q build

其中include config.mkinclude src.mk这2个在Bsp项目同一个文件夹下新建,内容是追加头文件,目标C后缀源代码,还有一些编译选项等等。

拿官方的例子,来验证测试是否正常,毕竟是用makefile,不确定这个项目编译是否有效果?

#define LED0 rt_pin_get("PA.0")

int main(void)
{
    rt_pin_mode(LED0,PIN_MODE_OUTPUT);
    rt_kprintf("MCU-CH32V208WBU6\\r\\n");
    while(1)
    {
        rt_pin_write(LED0, PIN_HIGH);
        rt_thread_mdelay(500);
        rt_pin_write(LED0, PIN_LOW);
        rt_thread_mdelay(500);
    }
}

演示

RT-ThreadRT-Thread

代码

传送门: github->01LED

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分