普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境
目录
以下介绍PY32F0系列在Ubuntu下如何使用GCC Arm Embedded Toolchain环境进行开发和烧录
项目模板
GitHub 仓库地址: https://github.com/IOsetting/py32f0-template
仓库文件结构
├── Build # 编译结果
├── Docs # 数据手册和用户手册
├── Examples
│ ├── FreeRTOS # FreeRTOS 例子(暂时为空)
│ ├── Raw # 非 FreeRTOS 的例子
│ └── Raw_LL # 非 FreeRTOS 的例子, 基于LL外设库
├── Libraries
│ ├── BSP # delay 和 printf 的 BSP 库
│ ├── BSP_LL # delay 和 printf 的 BSP 库, 基于LL外设库
│ ├── CMSIS
│ ├── LDScripts # 链接描述文件
│ ├── PY32F0xx_HAL_Driver # 外设驱动库
│ └── PY32F0xx_LL_Driver # LL(low layer)外设驱动库
├── Makefile # Make设置
├── Misc
│ ├── Flash
│ │ ├── Devices # 全系列 Flash 算法文件
│ │ └── Sources # Flash 算法文件源代码
│ └── SVD # SVD 文件, 用于 Debug
├── README.md
├── rules.mk # 预置的 make 规则
└── User # 用户项目代码目录
环境准备
硬件方面
- PY32F0 开发板, 或任何基于 PY32F002/003/030 系列的电路
- 烧录工具(任一)
- J-Link: J-Link OB programmer
- PyOCD: DAPLink or J-Link
注: STLink测试不成功, 写入会有Timeout错误
软件方面
- SEGGER J-Link 软件 https://www.segger.com/downloads/jlink/
- 或者 PyOCD https://pyocd.io/
- GNU Arm Embedded Toolchain
环境配置和编译过程
1. 安装 GNU Arm Embedded Toolchain
根据你的PC架构, 从 Arm GNU Toolchain Downloads 下载工具链, 然后解压文件到合适的目录下, 例如
sudo mkdir -p /opt/gcc-arm/
sudo tar xvf arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi.tar.xz -C /opt/gcc-arm/
cd /opt/gcc-arm/
sudo chown -R root:root arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/
2. (选项一) 安装 SEGGER J-Link
从 J-Link / J-Trace Downloads 下载并安装 SEGGER JLink
# installation command for .deb
sudo dpkg -i JLink_Linux_V770a_x86_64.deb
默认的安装路径是 /opt/SEGGER
将目录 [项目目录]/Misc/Flash/Devices/Puya 下的所有Flash算法文件(.FLM 文件), 复制到 [JLink 安装目录]/Devices/Puya 目录下
cd py32f0-template
sudo cp -r Misc/Flash/Devices/* /opt/SEGGER/JLink/Devices/
编辑 JLinkDevices.xml
sudo vi /opt/SEGGER/JLink/JLinkDevices.xml
在
中增加以下内容
2. (选项二): 安装 PyOCD
不要使用Ubuntu自带的apt仓库里的PyOCD, 这个版本 0.13.1+dfsg-1 太低, 无法识别 JLink OB
从Pip安装PyOCD
pip uninstall pyocd
这样会将 PyOCD 安装到这些目录
/home/[user]/.local/bin/pyocd
/home/[user]/.local/bin/pyocd-gdbserver
/home/[user]/.local/lib/python3.10/site-packages/pyocd-0.34.2.dist-info/*
/home/[user]/.local/lib/python3.10/site-packages/pyocd/*
在 Ubuntu 中, .profile 会自动把 .local 加入 PATH, 所以只需要执行一下 source ~/.profile
就能用 pyocd 命令了
3. 导出这个模板仓库
Clone到本地目录下
git clone https://github.com/IOsetting/py32f0-template.git
4. 修改 Makefile
根据自己本地环境, 修改Makefile
- 确认 ARM_TOOCHAIN 指向的是正确的 arm-none-eabi-gcc 路径
- 如果使用 J-Link, FLASH_PROGRM 可以用 jlink 或 pyocd
- 如果使用 DAPLink, 要把 FLASH_PROGRM 设为 pyocd
- ST-LINK 还不支持. ST-LINK 在 Windows Keil5 下可以使用, 但是在 Ubuntu 烧录 PY32 会报错
- Puya 提供了两套外设驱动库, HAL lib 和 LL lib, 可以在 USE_LL_LIB 选项中切换, 默认的 User 应用使用的是 HAL 库
- ENABLE_PRINTF_FLOAT 用于对 printf 中的
%f
增加支持, 会在连接参数中增加-u _printf_float
, 会大大增加最后生成的烧录文件尺寸.
##### Project #####
PROJECT ?= app
# The path for generated files
BUILD_DIR = Build
##### Options #####
# 是否使用 LL 库
USE_LL_LIB ?= y
# 是否启用 printf float %f 支持, y:yes, n:no
ENABLE_PRINTF_FLOAT ?= n
# 是否使用 CMSIS DSP 函数, y:yes, n:no
USE_DSP ?= n
# 编程器选择, jlink 或 pyocd
FLASH_PROGRM ?= pyocd
##### Toolchains #######
ARM_TOOCHAIN ?= /opt/gcc-arm/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin
# JLinkExe 的路径
JLINKEXE ?= /opt/SEGGER/JLink/JLinkExe
# JLink 设备类型, 选项:
# PY32F002AX5, PY32F002X5,
# PY32F003X4, PY32F003X6, PY32F003X8,
# PY32F030X4, PY32F030X6, PY32F030X7, PY32F030X8
JLINK_DEVICE ?= PY32F003X8
# PyOCD 路径
PYOCD_EXE ?= pyocd
# PyOCD 设备类型, 选项:
# py32f002ax5, py32f002x5,
# py32f003x4, py32f003x6, py32f003x8,
# py32f030x3, py32f030x4, py32f030x6, py32f030x7, py32f030x8
# py32f072xb
PYOCD_DEVICE ?= py32f003x8
##### Paths ############
# Link descript file: py32f003x6.ld, py32f003x8.ld, py32f030x6.ld, py32f030x8.ld
LDSCRIPT = Libraries/LDScripts/py32f003x8.ld
# Library 编译附加参数:
# PY32F002x5, PY32F002Ax5,
# PY32F003x4, PY32F003x6, PY32F003x8,
# PY32F030x3, PY32F030x4, PY32F030x6, PY32F030x7, PY32F030x8,
# PY32F072xB
LIB_FLAGS = PY32F003x8
5. 编译和烧录
编译执行
# clean source code
make clean
# build
make
# or make with verbose output
V=1 make
写入, 会根据前面的配置调用对应的烧录方法
# flash
make flash
尝试其它例子
在 Examples 目录下有更多的代码示例, 可以复制替换掉 User 目录下的文件, 然后编译烧录查看运行效果