国民技术
直播中

知之为知之zhl

5年用户 107经验值
擅长:可编程逻辑 电源/新能源
私信 关注

【国民技术N32项目移植】开发板开箱、获取资料、vscode环境搭建

开发板开箱

  • 开发板正面,两个miniUSB接口,五颗静音按键,三颗LED灯。

view3.jpg

  • 开发板背面

view2.jpg

  • 板载的调试器,是一个DAP-Link调试器

view1.jpg

资料获取

根据手册访问ftp://58.250.18.138 获取资料,我电脑的Explorer访问ftp://58.250.18.138 访问不了,所以用FileZilla来远程访问FTP服务器。

ftp.png

使用FileZilla来访问FTP服务器:

  • 选择协议为FTP
  • 主机设置为58.250.18.138
  • 登陆类型选择匿名
  • 连接即可

FileZilla.png

连接成功,因为我申请的是N32G457这款单片机,所以资料是放在2-Microcontrollers里面,然后就是漫长的下载过程。。。。

files.png

开发环境搭建(vscode + GCC + pyocd(python3.11) + gdb)

版本信息

  • vscode 1.74.2
  • arm-none-eabi-gcc 10.2.1
  • python 3.11.1
  • pyocd 0.34.3
  • arm-none-eabi-gdb 10.1.90.20201028-git

python 包的安装

这里需要用到两个python的包:

  • compiledb 用于导出 compile_commands.json 来支持补全
  • pyocd 用于启动一个 gdbserver

直接pip一键安装即可 pip install compiledb pyocd

pyocd 导入 pack 包

在工程目录下创建 pyocd.yaml 来指定 pack 包的位置

pack:

  - ./tools/Nationstech.N32G45x_DFP.1.0.5.pack

运行一行命令来查看N32的pack是否导入成功 pyocd list --targets | grep n32g457

list.png

整理工程,配置vscode工作区

将官方给出的vscode示例工程文件复制到本目录,一番整理后工程目录如下

proj.png

相对应的 Makefile脚本也需要修改,修改后的内容如下:

# ------------------------------------------------

#

# [url=home.php?mod=space&uid=1455510]@file[/url] Makefile (based on gcc)

# [url=home.php?mod=space&uid=40524]@author[/url] Dewin

# [url=home.php?mod=space&uid=644434]@version[/url] v1.0.0

#

# ChangeLog :

#   2021-07-20

# ------------------------------------------------

  

######################################

# target

######################################

TARGET = output

  

######################################

# building variables

######################################

# debug build

ifeq ($(release), y)

DEBUG = 0

else

DEBUG = 1

endif

# optimization

OPT = -Os

  

#######################################

# Build path

#######################################

BUILD_DIR = build

  

######################################

# chip platform info

######################################

TARGET_PLATFORM := n32g45x

DEFS += -DN32G45X

DEFS += -DUSE_STDPERIPH_DRIVER

  

######################################

# Algo libs

######################################

USELIB = 0

  

######################################

#TOOLS CHAIN

######################################

CROSS_COMPILE = arm-none-eabi-

  

######################################

#PATH DEFINE

######################################

  

CODE_PATH = code

BSP_PATH = bsp

FIRMWARE_PATH = firmware

  

######################################

# C sources

######################################

C_DIRS += ${CODE_PATH}/src

C_DIRS += ${BSP_PATH}/src

C_DIRS += ${FIRMWARE_PATH}/CMSIS/device

C_DIRS += ${FIRMWARE_PATH}/$(TARGET_PLATFORM)_std_periph_driver/src

#C_DIRS += ${FIRMWARE_PATH}/$(TARGET_PLATFORM)_usbfs_driver/src

SRC_OBJS_DIRS += $(foreach DIR, $(C_DIRS), $(wildcard $(DIR)/*.c))

C_SOURCES = $(SRC_OBJS_DIRS)

  

######################################

# ASM sources

######################################

ASM_SOURCES = ${FIRMWARE_PATH}/CMSIS/device/startup/startup_$(TARGET_PLATFORM)_gcc.s

  

######################################

# C includes

######################################

C_INCS += ${CODE_PATH}/inc

C_INCS += ${BSP_PATH}/inc

C_INCS += ${FIRMWARE_PATH}/CMSIS/core

C_INCS += ${FIRMWARE_PATH}/CMSIS/device

C_INCS += ${FIRMWARE_PATH}/$(TARGET_PLATFORM)_std_periph_driver/inc

#C_INCS += ${FIRMWARE_PATH}/$(TARGET_PLATFORM)_usbfs_driver/inc

INCS_OBJS_DIR = $(foreach DIR2, $(C_INCS), $(wildcard $(DIR2)/*.h))

INCS_OBJS_PATH = $(sort $(dir $(INCS_OBJS_DIR)))

C_INCLUDES = $(addprefix -I,$(INCS_OBJS_PATH))

  

######################################

# Lib files

######################################

ifeq ($(USELIB), 1)

SRC_LIB_DIR += ${FIRMWARE_PATH}/$(TARGET_PLATFORM)_algo_lib/src

INC_LIB_DIR += ${FIRMWARE_PATH}/$(TARGET_PLATFORM)_algo_lib/inc

LIB_SOURCES = $(foreach DIR3, $(SRC_LIB_DIR), $(wildcard $(DIR3)/*.lib))

LIB_SOURCES_L = $(addprefix -L,$(LIB_SOURCES))

C_LIBS = $(LIB_SOURCES_L)

LIB_INCS = $(foreach DIR4, $(INC_LIB_DIR), $(wildcard $(DIR4)/*.h))

LIB_INCS_PATH = $(sort $(dir $(LIB_INCS)))

LIB_INCS_PATH_I = $(addprefix -I,$(LIB_INCS_PATH))

C_INCLUDES += $(LIB_INCS_PATH_I)

endif

  

######################################

# Compile & Link flags

######################################

# cpu

CPU = -mcpu=cortex-m4

# fpu

FPU = -mfpu=fpv4-sp-d16

# float-abi

FLOAT-ABI = -mfloat-abi=hard

# mcu

MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)

#CFLAGS

CFLAGS += $(MCU) -Wall

CFLAGS += $(OPT)

CFLAGS += -ffunction-sections -fdata-sections

#DEBUG

ifeq ($(DEBUG), 1)

CFLAGS += -g -gdwarf-2

endif

# Generate dependency information

CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"

#LFLAGS

LFLAGS += $(MCU)

LFLAGS += -Wl,--gc-sections

LFLAGS += --specs=nosys.specs

LFLAGS += -Xlinker -Map=$(BUILD_DIR)/$(TARGET).map

# link script

LDSCRIPT = ${FIRMWARE_PATH}/CMSIS/device/$(TARGET_PLATFORM)_flash.ld

  

######################################

# Objects

######################################

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

  

# list of objects

OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))

vpath %.c $(sort $(dir $(C_SOURCES)))

# list of ASM program objects

OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o)))

vpath %.s $(sort $(dir $(ASM_SOURCES)))

  

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

    $(CROSS_COMPILE)gcc $(CFLAGS) $(DEFS) $(C_INCLUDES) $(C_LIBS) -c -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@

  

$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)

    $(CROSS_COMPILE)gcc $(CFLAGS) -c $< -o $@

  

$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile

    $(CROSS_COMPILE)gcc $(OBJECTS) $(LFLAGS) -T$(LDSCRIPT) -o $@

    $(CROSS_COMPILE)size $@

  

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

    $(CROSS_COMPILE)objcopy -O binary -S $< $@

  

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

    $(CROSS_COMPILE)objcopy -O ihex -S $< $@

  

$(BUILD_DIR):

    @-mkdir $@

  

#######################################

# clean up

#######################################

clean:

    @-rm -rf $(BUILD_DIR)

  

#######################################

# dependencies

#######################################

-include $(wildcard $(BUILD_DIR)/*.d)

  

download:

    @pyocd flash --target=N32G457VEL7 --erase=auto --frequency=1000000 .\build\output.bin

    @echo "Download Completed!"

  

db:

    @compiledb make -j8 all

  

# *** EOF ***

运行 make db 命令,导出 compile_commands.json 文件,并且移动到 build目录

编写最重要的 Demo.code-workspace 文件:

{

  "folders": [

    {

      "path": "."

    }

  ],

  "settings": {

    /* 文件排除 */

    "files.exclude": {

      // 文件夹

      "**/.settings": true,

      "**/Debug": true,

      "**/Objects": true,

      "**/objects": true,

      "**/Listings": true,

      "**/listings": true,

      "**/Output": true,

      "**/output": true,

      // 文件

      "**/*.map": true,

      "**/.config*": true,

      "**/.project*": true,

      "**/.cproject*": true,

      "**/*.POMIN": true,

      ".gitattributes": true

    },

    /* 编码 */

    "files.encoding": "utf8",

    /* 字体 */

    "editor.fontFamily": "Consolas, OPPOSans",

    /* 自定义 Shell */

    "terminal.integrated.profiles.windows": {},

    /* 默认 Shell */

    "terminal.integrated.defaultProfile.windows": "PowerShell",

    /* 代码风格 */

    "C_Cpp.formatting": "clangFormat",

    "C_Cpp.clang_format_style": "{ BasedOnStyle: Google, IndentWidth: 4 }",

    /* 补全模式 */

    "C_Cpp.default.intelliSenseMode": "gcc-x86",

    /* c/cpp 标准 */

    "C_Cpp.default.cppStandard": "c++14",

    "C_Cpp.default.cStandard": "c99",

    /* c/cpp 宏 */

    "C_Cpp.default.defines": [],

    "C_Cpp.default.compilerPath": "D:/Maker/Console/arm-gcc/bin/arm-none-eabi-gcc.exe",

    /* c/cpp 包含 */

    "C_Cpp.default.includePath": ["${workspaceFolder}/**"],

    "C_Cpp.default.forcedInclude": [],

    "C_Cpp.default.compileCommands": "${workspaceFolder}/build/compile_commands.json",

    "cortex-debug.variableUseNaturalFormat": false,

    "files.associations": {

  

    }

  },

  "tasks": {

    "version": "2.0.0",

    "tasks": [

      {

        "label": "build",

        "type": "shell",

        /* 命令 & 参数 */

        "command": ["make"],

        "args": ["-j8", "all"]

      }

    ]

  },

  "launch": {

    "version": "0.2.0",

    "configurations": [

      {

        /* launch 任务名字 */

        "name": "N32 pyocd dbg",

        /* cortex-debug */

        "type": "cortex-debug",

        /* 工作目录 */

        "cwd": "${workspaceRoot}",

        /* 调试对象 */

        "executable": "./build/output.elf",

        /* 请求种类 */

        "request": "launch",

        /* 入口点 */

        "runToEntryPoint": "main",

        /* 服务器种类 */

        "servertype": "pyocd",

        /* 目标芯片 */

        "targetId": "n32g457vel7",

        /* svd 路径 */

        "svdFile": "./tools/N32G457.svd",

        "showDevDebugOutput": "both",

        /* 预执行任务 */

        "preLaunchTask": "build",

        /* pack 包目录 */

        "cmsisPack": "./tools/Nationstech.N32G45x_DFP.1.0.5.pack"

      }

    ]

  }

}

重启vscode,完美补全

printf.png

完美 debug,在SRAM基址偏移100KB的位置写入字符串,在memory窗口显示

debug.png

更多回帖

发帖
×
20
完善资料,
赚取积分