目录

以下介绍Ubuntu下搭建用于HC32L110系列MCU的GCC工具链和VSCode的开发环境.

硬件准备

JLink-OB

前一篇中已经介绍, 用于Linux环境下烧录

基于HC32L110系列MCU的开发板

以下是 AS06-VTB07H 产品页链接. 这个开发板有新旧两个版本. 4.0使用的是STM8, 5.0使用的是HC32L110, 现在能买到的都是后者, pin脚全部引出, 有预留烧录口, 有一个功能按钮, 两个LED, 自带USB2TTL通信(P01, P02), 非常方便.

下面的介绍都基于这个开发板. 如果使用其他的板子, GPIO口自己调整一下就可以.

软件准备

烧录软件 JLink

JLink软件和对应的flash算法文件, 在前一篇中已经介绍

IDE VSCode

安装并配置好, 在网上有很多教程.

GCC ARM工具链

在GCC ARM网站下载工具链接https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/downloads, 然后解压到合适的目录

tar xvf gcc-arm-11.2-2022.02-x86_64-arm-none-eabi.tar.xz
cd /opt/gcc-arm/
sudo mv ~/Backup/linux/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/ .
sudo chown -R root:root gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/

检查版本

/opt/gcc-arm/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/bin/arm-none-eabi-gcc --version
arm-none-eabi-gcc (GNU Toolchain for the Arm Architecture 11.2-2022.02 (arm-11.14)) 11.2.1 20220111
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

示例项目导出和编译

导出项目

git clone https://github.com/IOsetting/hc32l110-template.git

根据自己的环境参数修改下Makefile

PROJECT 		?= app
# 改成本地的工具链路径
ARM_TOOCHAIN ?= /opt/gcc-arm/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/bin
# 改成本地的JLinkExe的路径
JLINKEXE ?= /opt/SEGGER/JLink/JLinkExe
# MCU型号, 这个是16K的版本, 如果是32K版本要改成 HC32L110x6, 对应下面的ld文件也要修改
DEVICE ?= HC32L110x4
# The path for generated files
BUILD_DIR = Build # Link descript file, hc32l110x4.ld or hc32l110x6.ld
LDSCRIPT = Libraries/LDScripts/hc32l110x4.ld
# ...

编译默认项目

目录 User 下有默认的点灯示例代码, 在上一步修改完Makefile后, 就可以编译了

make clean
make

如果想看到详细的命令行, 可以用

V=1 make

烧录

编译完成后, 执行下面的命令烧录

make flash

如果使用的是 AS06-VTB07H, 烧录完成后可以看到两个LED每隔一秒交替闪烁.

配置VSCode开发环境

作为Linux下的生产力工具, VSCode是要用起来的, 开发C语言项目, 需要配置的就是两个, c_cpp_properties.json 和 tasks.json

首先用VSCode打开项目目录, C/C++插件未安装会有提示, 按提示安装即可.

配置C/CPP: c_cpp_properties.json

快捷键Ctrl + Shift + P调出菜单, 输入 C/C++, 可以看到 C/C++ Edit Configurations (JSON), 回车, 在创建的模板中按以下内容编辑, 路径换成自己的

{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/opt/gcc-arm/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/bin/arm-none-eabi-gcc",
"cStandard": "gnu99",
"cppStandard": "gnu++14",
"intelliSenseMode": "gcc-arm",
"configurationProvider": "ms-vscode.makefile-tools"
}
],
"version": 4
}

配置Tasks: tasks.json

快捷键Ctrl + Shift + P调出菜单, 输入 Task, 可以看到 Config Task, 回车 -> Create tasks.json from template -> Others, 编辑创建的 tasks.json , 根据自己的习惯添加快捷方式

{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "clean, build",
"type": "shell",
"command": "make clean;make",
"problemMatcher": []
},
{
"label": "build, download",
"type": "shell",
"command": "make;make flash",
"problemMatcher": []
},
{
"label": "download",
"type": "shell",
"command": "make flash",
"problemMatcher": []
},
{
"label": "build",
"type": "shell",
"command": "make",
"problemMatcher": []
},
{
"label": "clean",
"type": "shell",
"command": "make clean",
"problemMatcher": []
},
]
}

平时使用时, 用Alt + Shift + F10就可以调出Task菜单, 快速执行编译和烧录等操作.

编译选项

项目中新增代码目录和单个C文件

User目录下的代码, Makefile已经覆盖, 会自动添加无需修改 Makefile. 如果新增其他的目录需要包含整个目录, 或包含单个源文件, 可以编辑Makefile中的这部分

# C source folders
CDIRS := User \
Libraries/CMSIS \
Libraries/HC32L110_Driver/src
# C source files (if there are any single ones)
CFILES :=

其中 CDIRS 用于目录的添加, CFILES 用于单个C源文件的添加.

除此以外, 如果有新增的 include 路径, 需要添加到 INCLUDES 这个变量中

# Include paths
INCLUDES := Libraries/CMSIS \
Libraries/HC32L110_Driver/inc \
User

如果编译与预期不符, 在make时增加V=1查看实际的命令行.

调整编译参数

编译的参数都在 rules.mk 文件中,

# Global compile flags
CFLAGS = -Wall -ggdb -ffunction-sections -fdata-sections
ASFLAGS = -g -Wa,--warn # Arch and target specified flags
OPT ?= -Os
CSTD ?= -std=c99
ARCH_FLAGS := -fno-common -mcpu=cortex-m0plus -mthumb # c flags
TGT_CFLAGS += $(ARCH_FLAGS) $(addprefix -D, $(LIB_FLAGS))
# asm flags
TGT_ASFLAGS += $(ARCH_FLAGS)
# ld flags
TGT_LDFLAGS += --specs=nano.specs -mcpu=cortex-m0plus -mthumb -nostartfiles -Wl,--gc-sections -Wl,-Map=$(BDIR)/$(PROJECT).map -Wl,--print-memory-usage

如果要优化编译的结果大小或执行速度, 需要修改OPT参数, -O0是无优化, -O1是基础优化, -Os是尺寸压缩, 具体优化项参考 https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

OPT			?= -Os

其中-ffunction-sections -fdata-sections-Wl,--gc-sections是非常重要的参数, 如果不使用这些参数, 编译的结果大概会超出HC32L110的16K字节限制.

HC32L110(三) HC32L110的GCC工具链和VSCode开发环境的更多相关文章

  1. HK32F030MF4P6的Linux GCC工具链和VSCode开发环境

    HK32F030MF4P6简介 航顺的 HK32F030MF4P6, TSSOP20封装, Arm Cortex M0 内核, 内建32MHz时钟, 16K Flash, 2K RAM(实际上可用的有 ...

  2. 更换gcc工具链

    title: 更换gcc工具链 date: 2019/1/16 19:27:51 toc: true --- 更换gcc工具链 下载后解压到一个临时目录先看看文件结构 mkdir tmp tar xj ...

  3. Mac OS安装Go语言及配置VSCode开发环境:一个工具(gopls)解千愁

    前言 截止到目前为止,Go语言已经更新到1.14.1,网上的很多教程均已经过时,我在此汇总并整理一下相关的教程,提供一个适合当下的Mac OS教程. 教程中使用了Go在1.11之后推出的依赖包管理工具 ...

  4. gcc工具链简述

    工具链软件包括BINUTILS.GCC.GLIBC.GDB等. BINUTILS是二进制程序处理工具,包括链接器.汇编器等目标程序处理的工具. GCC(GNU Compiler Collection) ...

  5. Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法

    一.安装ARM-Linux-GCC工具链 只需要一句命令: sudo apt-get install gcc-arm-linux-gnueabi 前提是你的Ubuntu系统版本是官网支持的最新的版本, ...

  6. 【转】Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法

    原文网址:http://www.cnblogs.com/muyun/p/3370996.html 一.安装ARM-Linux-GCC工具链 只需要一句命令: sudo apt-get install ...

  7. 为DS5添加新的gcc工具链

    环境: 步骤: 1.下载mingw32版本的工具链 下面有两个下载工具链的网站: ARM官网的: https://developer.arm.com/tools-and-software/open-s ...

  8. Android_开发工具的下载和开发环境的搭建

    一.Android开发工具的下载  Android开发者官网: http://developer.android.com/           Android开发工具:http://www.andro ...

  9. C/C++代码静态检查工具Cppcheck在VS2008开发环境中的安装配置和使用

    Cppcheck is an analysis tool for C/C++code. Unlike C/C++ compilers and many other analysis tools, it ...

随机推荐

  1. iPhone x 的区别

    最近入手两台iPhone x, 均从官网购买,两台分别是2017年和2018年生产,对比了一下,两台还有是一些差别: 首先苹果X使用起来还是非常爽的,没有HOME键,明显比按HOME键方便,因为按HO ...

  2. mac上使用Vmware Fusion虚拟机配置Centos的静态ip

    一.背景 本文简单记录一下,在mac arm 架构下使用 Vmware Fusion虚拟机下Centos7下如何配置静态ip地址.如果使用dhcp静态ip地址的动态分配,那么可能ip地址会发生变化,因 ...

  3. 基于web3D展示技术的煤矿巷道3D可视化系统

    地下开采离不开巷道工程.煤矿的生产.运输.排水.通风等各个环节都少不了巷道的支持.在煤矿智能化建设被提上日程的今天,巷道工程的智能化.可视化建设也成了行业趋势.尤其是复杂的井下作业环境,人员信息安全问 ...

  4. TypeScript ReadonlyArray(只读数组类型) 详细介绍

    1.ReadonlyArray 简介 在TypeScript中,除了Array<T>类型,还有一个ReadonlyArray<T>类型,ReadonlyArray类型和Arra ...

  5. NC14662 小咪买东西

    NC14662 小咪买东西 题目 题目描述 小咪是一个土豪手办狂魔,这次他去了一家店,发现了好多好多( \(n\) 个)手办,但他是一个很怪的人,每次只想买 \(k\) 个手办,而且他要让他花的每一分 ...

  6. 高精度10m/30米NPP净初级生产力分布数据

    数据下载链接:百度云下载链接​ 引言 第一性生产力是绿色植物呼吸后所剩下的单位面积单位时间内所固定的能量或所生产的有机物质,即是总第一性生产量减去植物呼吸作用所剩下的能量或有机物质.多种卫星遥感数据反 ...

  7. java通过注解指定顺序导入excel

    自定义的属性,用来判断顺序的 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; impor ...

  8. 003 Jwt登录流程图

    用户\角色\权限 用户是一个基本的单位 用户和角色的关系是多对多,所以要有一张保存用户和角色关系的中间表 角色也不能直接决定这个用户能做什么操作,有哪些权限, 需要再关联权限表决定 角色和权限也是多对 ...

  9. led的进化

    1.一个led亮100ns,灭400ns,循环 2.一个led亮2500ns,灭5000ns,亮7500ns,灭10000ns循环 3.以2500ns为变化周期,20000ns为一个循环,每个周期的亮 ...

  10. Nginx搭建简易文件服务器

    Nginx搭建简易文件服务器 1.安装nginx,此处略过 2.修改nginx配置文件 详细如下 # 此处为部分文件是否有权限,使用root,则不会出现403权限问题 user root; worke ...