[技术文档] HK32F030MF4P6的Linux GCC工具链开发环境

[复制链接]
 楼主| 略略u 发表于 2023-1-28 16:05 | 显示全部楼层 |阅读模式
HK32F030MF4P6简介
931563d4d71c4fdeb.png
航顺的 HK32F030MF4P6, TSSOP20封装,

1565563d4d72a80eb0.png
Arm Cortex M0 内核, 内建32MHz时钟, 16K Flash, 2K RAM(实际上可用的有4K).
这个型号的目的应该是硬件替换 STM8S003, 管脚和 STM8S003 兼容(和 STM32F030 兼容的型号是 HK32F030F4P6). HK32F030MF4P6 可能是当前市场上最便宜的 Cortex M0 芯片了, 单价0.9元不到. 一个32位的Arm M0芯片, 烧录能用普通编程器, 参数也还可以, 常用的外设I2C, SPI, UART, PWM, ADC都有, 甚至还有I2S, 性价比相当不错.

合宙也在放风要出1元的M0, 配置4K RAM, 256K Flash, M0这个级别很快就会进入一元的市场, 8bit系列按现在的价格, 如果不降到比M0低, 可能只剩下存量项目和教学用途了.

评论

———————————————— 版权声明:本文为CSDN博主「IOsetting」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/michaelchain/article/details/126923710  发表于 2023-1-28 16:06
 楼主| 略略u 发表于 2023-1-28 16:07 | 显示全部楼层
项目模板地址:

    GitHub: https://github.com/IOsetting/hk32f030m-template
    Gitee: https://gitee.com/iosetting/hk32f030m-template

相关资料下载:

    HK32F030Mxx系列开发资料 下载地址 https://ifxz.lanzoui.com/b015xbcoh 密码:fqnv
    航顺MCU相关软件 下载地址 https://ifxz.lanzoui.com/b015ynwri 密码:ajnh
 楼主| 略略u 发表于 2023-1-28 16:09 | 显示全部楼层
相关链接

    CMake项目 https://github.com/monoliths-uni/HK32F030MXX_CMAKE_PRO
    Nerd Ralph 对 HK32F030MF4P6 的hack记录
        http://nerdralph.blogspot.com/2020/12/trying-to-test-ten-cent-tiny-arm-m0-mcu.html
        http://nerdralph.blogspot.com/2021/01/trying-to-test-ten-cent-tiny-arm-m0-mcu.html
        https://github.com/nerdralph/HK32F030M
    JLink 设备支持 https://wiki.segger.com/HK32F030xx
    国产替代 MCU 踩坑记 https://xw.qq.com/cmsid/20210402A015N900
 楼主| 略略u 发表于 2023-1-28 16:09 | 显示全部楼层
HK32F030MF4P6 的外设库

对比 HK32F030M 的外设库和 STM32F0xx_StdPeriph_Lib_V1.5.0, 格式几乎是照抄的, 定义前者比后者有一些缩水而已, 因为端口和功能上确实少一些. 所以熟悉 STM32F0 的人很容易上手. 相比较之前介绍的华大 HC32 系列, HC32 这个系列就有很明显的 STC 寄存器风格, 和 STM 不是一条路线.
 楼主| 略略u 发表于 2023-1-28 16:10 | 显示全部楼层
Linux GCC Arm Embedded 开发环境

Windows下的开发环境已经有很多资料了, 前面的资料下载里有很详细的文档. 这里主要介绍一下 Linux (再准确点, Ubuntu) 下的开发环境. 以下介绍 HK32F030MF4P6 这个芯片使用 Linux GCC Arm Embedded 工具链的开发环境.
 楼主| 略略u 发表于 2023-1-28 16:15 | 显示全部楼层
硬件环境

    带 HK32F030MF4P6 的开发板. 这个芯片不需要外围元件, 直接用 TSSOP20 转接板接出即可
    JLink OB, 最常见最便宜的那种 JLink 烧录器
 楼主| 略略u 发表于 2023-1-28 16:16 | 显示全部楼层
JLink接线

## JLINK
VCC -> #9  VCC
GND -> #7  GND
CLK -> #11
SWD -> #2
 楼主| 略略u 发表于 2023-1-28 16:16 | 显示全部楼层
软件环境
烧录软件 JLink

JLink7.70 已经内建对 HK32F030M 系列的支持, 安装后直接可用
GCC ARM工具链

在GCC ARM网站下载工具链接https://developer.arm.com/downloads/-/arm-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/\
 楼主| 略略u 发表于 2023-1-28 16:19 | 显示全部楼层
检查版本:
  1. /opt/gcc-arm/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/bin/arm-none-eabi-gcc --version
  2. arm-none-eabi-gcc (GNU Toolchain for the Arm Architecture 11.2-2022.02 (arm-11.14)) 11.2.1 20220111
  3. Copyright (C) 2021 Free Software Foundation, Inc.
  4. This is free software; see the source for copying conditions.  There is NO
  5. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 楼主| 略略u 发表于 2023-1-28 16:20 | 显示全部楼层
HK32F030M外设库

从 https://bbs.21ic.com/icview-3236132-1-1.html 下载, 需要其中的外设库.
示例项目导出和编译

导出项目

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

    1

将下载的外设库放到 Libraries/HK32F030M_Driver 目录下
 楼主| 略略u 发表于 2023-1-28 16:23 | 显示全部楼层
  1. 根据自己的环境参数修改 Makefile

  2. PROJECT     ?= app
  3. # path to gcc arm (or should be specified in PATH)
  4. ARM_TOOCHAIN  ?= /opt/gcc-arm/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/bin
  5. # path to JLinkExe (or should be specified in PATH)
  6. JLINKEXE    ?= /opt/SEGGER/JLink/JLinkExe
  7. # MCU type: HK32F030MD4P6, HK32F030MF4U6, HK32F030MF4P6 or HK32F030MJ4M6
  8. DEVICE      ?= HK32F030MF4P6
  9. # The path for generated files
  10. BUILD_DIR     = Build
 楼主| 略略u 发表于 2023-1-28 16:23 | 显示全部楼层
项目中带了一个LED Blink的演示, 接线

  1. ## LED
  2. LED1 -> #18 PD1
  3. LED2 -> #17 PC7
  4. LED3 -> #6  PA2
 楼主| 略略u 发表于 2023-1-28 16:25 | 显示全部楼层
编译

make clean
make

    1
    2

烧录

make flash
 楼主| 略略u 发表于 2023-1-28 16:39 | 显示全部楼层
项目模板目录结构

项目模板结构
  1. ├── Build                       # 编译结果文件目录
  2. ├── Examples                    # 示例代码
  3. ├── flash.jlink                 # JLink 下载脚本
  4. ├── Libraries
  5. │   ├── CMSIS
  6. │   ├── Debug                   # SysTick 延时函数, printf 支持
  7. │   ├── HK32F030M_Driver        # MCU 外设库
  8. │   └── LDScripts
  9. ├── LICENSE
  10. ├── Makefile                    # Make 配置
  11. ├── README.md
  12. ├── rules.mk                    # Makefile 预设的编译规则
  13. └── User                        # 用户应用代码
 楼主| 略略u 发表于 2023-1-28 16:40 | 显示全部楼层
其中并未包含外设库, 和STM32的太像了, 放上去感觉不妥, 怕有版权问题, 还是删掉了. 自己下载也很方便.
 楼主| 略略u 发表于 2023-1-28 16:40 | 显示全部楼层
编译参数

rules.mk 中, 预设的包含文件和目录为
  1. # C source folders
  2. CDIRS := User \
  3.     Libraries/CMSIS/HK32F030M/Source \
  4.     Libraries/HK32F030M_Driver/src \
  5.     Libraries/Debug
  6. # C source files (if there are any single ones)
  7. CFILES :=

  8. # ASM source folders
  9. ADIRS := User
  10. # ASM single files
  11. AFILES  := Libraries/CMSIS/HK32F030M/Source/startup_hk32f030mf4p6.s

  12. # Include paths
  13. INCLUDES  := Libraries/CMSIS/CM0/Core \
  14.       Libraries/CMSIS/HK32F030M/Include \
  15.       Libraries/HK32F030M_Driver/inc \
  16.       Libraries/Debug \
  17.       User
 楼主| 略略u 发表于 2023-1-28 16:41 | 显示全部楼层
其中 CDIRS, ADIRS, INCLUDES 对应的都是目录, CFILES 和 AFILES 对应的是单独的源文件.
如果引入其它的库或者源文件, 对应修改这部分即可.
 楼主| 略略u 发表于 2023-1-28 16:42 | 显示全部楼层
编译参数如下所示
# 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-m0 -mthumb

### c flags ###
TGT_CFLAGS  += $(ARCH_FLAGS) $(addprefix -D, $(LIB_FLAGS))

### asm flags ###
TGT_ASFLAGS += $(ARCH_FLAGS)

### ld flags ###
TGT_LDFLAGS += --specs=nosys.specs -mcpu=cortex-m0 -mthumb -Wl,--gc-sections -Wl,-Map=$(BDIR)/$(PROJECT).map -Wl,--print-memory-usage
# Use newlib-nano instead of newlib for smaller flash size
TGT_LDFLAGS += --specs=nano.specs
# Exclude standard initialization actions, when __libc_init_array exists, this should be omit, \
   otherwise it will generate "undefined reference to `_init'" error. \
   **Remove** `bl __libc_init_array` from startup.s if you want to enable this.
# TGT_LDFLAGS += -nostartfiles
 楼主| 略略u 发表于 2023-1-28 16:42 | 显示全部楼层
因为使用了__libc_init_array, 默认不使用-nostartfiles, 如果取消注释, 需要到 startup_hk32f030mf4p6.s 中删除这行, 否则会报错.

bl __libc_init_array
 楼主| 略略u 发表于 2023-1-28 16:43 | 显示全部楼层
Startup 和 LD 代码

startup_hk32f030mf4p6.s 移植自 STM32F0 的 startup 代码, 没有什么特别的, 中断向量和手册是一致的. LD文件中
  1. MEMORY
  2. {
  3.   RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 4K
  4.   FLASH (rx)     : ORIGIN = 0x08000000, LENGTH = 16K
  5. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

666

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部