首页 > 系统相关 >普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境

普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境

时间:2023-01-14 16:23:35浏览次数:79  
标签:普冉 GCC VSCode PyOCD LL Link JLink pyocd arm

目录

以下介绍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错误

软件方面

环境配置和编译过程

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/

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

<DataBase> 中增加以下内容

  <!--                 -->
  <!-- Puya            -->
  <!--                 -->
  <Device>
    <ChipInfo Vendor="Puya" Name="PY32F002AX5"  WorkRAMAddr="0x20000000" WorkRAMSize="0xC00" Core="JLINK_CORE_CORTEX_M0"/>
    <FlashBankInfo Name="Flash_20K" BaseAddr="0x08000000" MaxSize="0x5000" Loader="Devices/Puya/PY32F0xx_20.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
  </Device>
  <Device>
    <ChipInfo Vendor="Puya" Name="PY32F002X5"  WorkRAMAddr="0x20000000" WorkRAMSize="0xC00" Core="JLINK_CORE_CORTEX_M0"/>
    <FlashBankInfo Name="Flash_20K" BaseAddr="0x08000000" MaxSize="0x5000" Loader="Devices/Puya/PY32F0xx_20.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
  </Device>
  <Device>
    <ChipInfo Vendor="Puya" Name="PY32F003X4"  WorkRAMAddr="0x20000000" WorkRAMSize="0x800" Core="JLINK_CORE_CORTEX_M0"/>
    <FlashBankInfo Name="Flash_16K" BaseAddr="0x08000000" MaxSize="0x4000" Loader="Devices/Puya/PY32F003xx_16.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
  </Device>
  <Device>
    <ChipInfo Vendor="Puya" Name="PY32F003X6"  WorkRAMAddr="0x20000000" WorkRAMSize="0x1000" Core="JLINK_CORE_CORTEX_M0"/>
    <FlashBankInfo Name="Flash_32K" BaseAddr="0x08000000" MaxSize="0x8000" Loader="Devices/Puya/PY32F003xx_32.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
  </Device>
  <Device>
    <ChipInfo Vendor="Puya" Name="PY32F003X8"  WorkRAMAddr="0x20000000" WorkRAMSize="0x2000" Core="JLINK_CORE_CORTEX_M0"/>
    <FlashBankInfo Name="Flash_64K" BaseAddr="0x08000000" MaxSize="0x10000" Loader="Devices/Puya/PY32F003xx_64.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
  </Device>
    <Device>
    <ChipInfo Vendor="Puya" Name="PY32F030X4"  WorkRAMAddr="0x20000000" WorkRAMSize="0x800" Core="JLINK_CORE_CORTEX_M0"/>
    <FlashBankInfo Name="Flash_16K" BaseAddr="0x08000000" MaxSize="0x4000" Loader="Devices/Puya/PY32F030xx_16.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
  </Device>
  <Device>
    <ChipInfo Vendor="Puya" Name="PY32F030X6"  WorkRAMAddr="0x20000000" WorkRAMSize="0x1000" Core="JLINK_CORE_CORTEX_M0"/>
    <FlashBankInfo Name="Flash_32K" BaseAddr="0x08000000" MaxSize="0x8000" Loader="Devices/Puya/PY32F030xx_32.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
  </Device>
  <Device>
    <ChipInfo Vendor="Puya" Name="PY32F030X7"  WorkRAMAddr="0x20000000" WorkRAMSize="0x1800" Core="JLINK_CORE_CORTEX_M0"/>
    <FlashBankInfo Name="Flash_48K" BaseAddr="0x08000000" MaxSize="0xC000" Loader="Devices/Puya/PY32F030xx_48.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
  </Device>
  <Device>
    <ChipInfo Vendor="Puya" Name="PY32F030X8"  WorkRAMAddr="0x20000000" WorkRAMSize="0x2000" Core="JLINK_CORE_CORTEX_M0"/>
    <FlashBankInfo Name="Flash_64K" BaseAddr="0x08000000" MaxSize="0x10000" Loader="Devices/Puya/PY32F030xx_64.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
  </Device>

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

这个例子会展示

  • 驱动 PB5 上的LED灯亮灭, 如果你使用的型号不带 PB5 pin, 需要修改一下 main.c, 换成其它的pin.
  • PA2, PA3 通过UART输出echo字符串, 需要接在 USB2TTL 上通过PC端串口软件查看, Ubuntu下可以用 Screen 或 CuteCOM 等软件

尝试其它例子

Examples 目录下有更多的代码示例, 可以复制替换掉 User 目录下的文件, 然后编译烧录查看运行效果

标签:普冉,GCC,VSCode,PyOCD,LL,Link,JLink,pyocd,arm
From: https://www.cnblogs.com/milton/p/17051966.html

相关文章

  • 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介
    目录普冉PY32系列(一)PY32F0系列32位CortexM0+MCU简介普冉PY32系列(二)UbuntuGCCToolchain和VSCode开发环境PY32F0系列上市其实相当长一段时间了,样品已经吃灰......
  • Windows安装mingw/gcc64位
    先到mstorsjo/llvm-mingw下载mingw的压缩包64位选下图框出的下载之后解压放到任意位置,例如E:\mingw然后配置环境变量计算机-属性-高级系统设置-环境变量在[系统变量]......
  • 10个值得收藏的VSCode插件(推荐)
    本篇文章给大家推荐10个值得收藏的VSCode插件。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。【推荐学习:《vscode教程》】1 ImportCost在开发过程......
  • 使用vscode调试PHP底层C源码
    使用vscode调试PHP底层C源码一直想着有机会调试一下php底层代码来着,这周正好心血来潮,就跟着教程配置了一下。本篇文章是基于macOS,可能在编译php源码之前的步骤对使用windo......
  • 美国电动自行车GCC认证详情
    自行车&电动自行车GCC认证办理流程如果你在亚马逊美国站上架成人自行车、儿童自行车、电动车等类目产品均需上传16CFR1512测试报告,否则将会被亚马逊进行下架产品、罚款等......
  • 【论文阅读|浅读】GCC: Graph Contrastive Coding for Graph Neural Network Pre-Train
    目录​​前言​​​​简介​​​​ABSTRACT​​​​1INTRODUCTION​​​​2RELATEDWORK​​​​2.1VertexSimilarity​​​​2.2ContrastiveLearning​​​​2.3Gra......
  • MegCC 新版本来啦!新增 Benchmark 等工具,性能大幅提升!有奖征文活动同步启动
    最新版MegCC新鲜出炉,新工具,新体验,本次版本针对用户使用体验以及模型推理性能进行全面提升,主要的提升包括:新增Benchmark工具,用于用于快速Benchmark常用模型的推理......
  • vscode中文设置后重启还是英文解决(设置中文)Vetur插件
    第一步:快捷键ctrl+shift+p选择ConfigureDisplayLanguage第二步:修改“locale”属性重启还是英文是因为你没有安装中文插件安装后再重启重启解决安装Vetur插件功能表......
  • VSCode配置Go语言开发环境
    1.下载安装go语言环境下载安装下载链接Go安装包下载选择自己系统对应的版本下载测试下载安装过后测试goversion命令是否可以使用配置包管理镜像gomodule是Go......
  • ESP-IDF4.4 VScode安装问题
    一般安装ESP-IDF的环境是不会出错的,一路点击下去即可【ESP-IDFv4.4.3-OfflineInstaller下载地址】。主要是VScode安装ESP-IDF插件的时候会有以下两个问题WARNING:Y......