kai迪皮 发表于 2025-7-1 19:17

国内首款M52内核:G32R501 EVAL板卡开箱记录

本帖最后由 kai迪皮 于 2025-7-1 19:21 编辑

# 1. 背景:M52 内核的登场

最近,随着物联网和智能控制场景越来越复杂,MCU 行业也在不断涌现新生力量,各种高性能的处理器内核五花八门。但绝大多数我们熟悉的是 Cortex®-M4、M7 乃至近年火热的 RISC-V 系列。这次 Geehy 推出的 G32R501,主打“国内首款 Arm® Cortex®-M52 双核”,并且通过自研紫电数学指令扩展及对 Helium(Arm v8.1-M 架构中的 MVE 矢量扩展)的支持,大幅强化了对 DSP 运算、矢量运算的处理能力,尤其适合需要高实时性和复杂算法处理的应用,比如工业控制、新能源车载逆变器、工控自动化等。

前段时间我向官方申请了一块 G32R501 EVAL板卡,等待过程就像小孩盼新玩具一样。本篇博客就先和各位分享一下我拿到 G32R501 EVAL的第一手体验:开箱、资源浏览、SDK 以及 MDK 环境搭建等。从零见证这块板子的魅力。

---

# 2. 初次见面:板卡开箱

## 2.1 包装盒与开箱

打开快递盒后,看到一个纸质包装。和以往那种塑料外壳相比,纸盒子看着更“环保”一点,也让人感觉有点“仪式感”。

!(data/attachment/forum/202507/01/191100n5572inesipfad02.png "image-20250701183843536.png")

里头的内容很精简:

* 一个穿着静电袋的小板卡;
* 一张简短的说明纸,介绍主要资源和特色。

!(data/attachment/forum/202507/01/191124h57gr58rz7g8v6z6.png "image-20250701184121988.png")

一拿出来就闻到那种新 PCB 的“电子香气”,这不禁勾起了我对板卡内部结构的好奇。

赶紧把静电袋撕开,把板子拿在手里仔细端详。板卡的颜色是 常见的那种深蓝样式,做工不错,接口排布也相对整齐。正面部分印有主控芯片 G32R501DVYT7,那颗就是本次的主角——Arm® Cortex®-M52 双核,搭配紫电扩展单元。

!(data/attachment/forum/202507/01/191137qfio4q57r3of3u5q.png "image-20250701184251197.png")

## 2.2 板卡资源一览

这块 G32R501 EVAL的主要资源包括:

1. **主控芯片 G32R501DVYT7**

   * 国内首款基于 Arm® v8.1-M 架构 Cortex®-M52 双核。
   * 支持自研紫电数学指令扩展单元和 Arm Helium。
2. **板载 Geehy-Link 调试器**

   * 省去外置调试器费用,通过 USB 线即可对芯片进行烧写和调试。
   * 支持 CMSIS-DAP,当下流行且常用。
3. **2×LED 指示灯**

   * 相当于常见的板载小灯,方便点灯测试。
4. **1×外接 VREFHI**

   * 供 ADC 参考电压之用,利于精度测试。
5. **1 组 QSPI 接口**

   * 可以外接大容量存储器,做固件扩展或资源加载。
6. **1×CAN 收发器**

   * 工业、汽车领域常用的 CAN 通信,在这块板子上也能轻松测试。
7. **2×QEP 接口**

   * 用于电机控制场景中捕获正交编码器信号做精准转速和位置检测。
8. **1×80 引脚的 ExpandPack**

   * 官方命名的扩展接口,未来若 Geehy 推出相应“扩展模块套件”,就能直插直用。
9. **拨码开关**

   * 用于多种 GPIO 配置切换或工作模式选择(如 Boot 模式、接口复用等)。

!(data/attachment/forum/202507/01/191158ndxf00xwppnanpxw.png "image-20250701185118350.png")

看完这些资源,我的直观印象是:这块板非常注重“高性能控制和运算需求”。像双 QEP、150ps 分辨率的 PWM 通道等等,都对实时控制场景非常友好,也难怪官方将其定位在工业、新能源、车载领域。

---

# 3. SDK 资源介绍

要真正“点亮”我们的开发板,就得先翻翻可用的官方 SDK。根据资料,Geehy 这边也提供了 G32R501 专属的 SDK 包,可从官网“资料下载”区获取。官方还给了快速上手指南:《AN1125\_G32R501 SDK 快速上手指南 V1.1.pdf》。里面简明扼要展示了如何在 MDK Keil 环境下导入包、编译、调试等流程。下完 SDK 大概结构如下:

!(data/attachment/forum/202507/01/191215cuo96j35fouhhi5x.png "PixPin_2025-07-01_16-44-09.png")

主要包含:

1. **boards**:板子的硬件原理图,贼方便——特别是想研究具体引脚时无需自己测量。
2. **device\_support**:整个 G32R501 的位域结构体定义。喜欢用寄存器“骚操作”的老铁们,可以直观地用这个操作硬件。
3. **docs**:一些应用笔记和说明文档。
4. **driverlib**:G32R501 标準外设库,对绝大部分常用外设(GPIO、UART、SPI 等)封装了函数接口,极大降低了手动写寄存器的复杂度。
5. **examples**:各种例程集合,你想要的 LED 闪灯、UART、CAN、PWM、QEP 等示例都可以在这翻到,是不是很贴心?
6. **kernel**:官方提供的RTOS。
7. **libraries**:一些数学库和 Flash API 的集合,尤其在 M52 + Helium 场景下,矢量运算或 DSP 算法估计大有可为。
8. **package**:MDK 的 pack 文件,可以配置 MDK 环境。
9. **utilities**:一些工具脚本,具体还需要结合文档继续探索。

从这里能看出,官方确实对这个芯片做了比较系统的资料支撑,基本从硬件、驱动到应用都有示例。对于初次接触 G32R501 的工程师而言,这无疑是个福音,拿来就能快速上手。

---

# 4. MDK 环境搭建

接下来就是重头戏:我要让板卡“跑起来”并点亮 LED,小试牛刀!Geehy 官方有整理一整套“MDK pack + 示例”的方案,我在这里把过程简单概括一下:

## 4.1 MDK版本需求

**根据MDK官方支持,M52内核的支持在MDK5.40及以上版本。这意味着我们调试G32R501需要下载5.40以后的MDK。这个大家不要忽略了。**

## 4.2 安装 pack

在 MDK Keil 中加载 G32R501 的 pack 文件:

1. 我们直接双击“Geehy.G32R5xx\_DFP.1.0.1.pack”进行安装。
2. 安装完成后,你就可以在 Keil 的 “Device” 里看到 G32R501 相关的器件支持。

!(data/attachment/forum/202507/01/191234mbat58tt88rrtr89.png "image-20250701185349605.png")

### 4.3 打开例程

我这里直接打开“G32R501\_SDK\_V1.1.0\driverlib\g32r501\examples\eval\led\led\_ex1\_blinky\project\MDK\project.uvprojx”。或者可以直接复制一份例程到你自己的工作区,避免不小心改坏官方原例程。

### 4.4 下载程序

1. 连接板卡到电脑,使用 USB 线(板子上自带 Geehy-Link 调试器)。
2. 在 MDK 里进入 “Project -> Options for Target -> Debug”,选择调试器为 “CMSIS-DAP”。
3. 在 “Utilities” 面板同样选 “CMSIS-DAP”,然后点击“Settings”,看看是否能正确识别到设备。

!(data/attachment/forum/202507/01/191249yrj1xj7isci00d8c.png "image-20250701185531727.png")

## 4.5 启动仿真

1. 在 debug选项卡配置里,选择官方给的仿真脚本 r501.ini,这保证了加载正确的调试配置。

   !(data/attachment/forum/202507/01/191350xpdph599znw525ff.png "image-20250701185747316.png")
2. 点击 Download后再点击Debug ,就能烧写程序并启动仿真。

   !(data/attachment/forum/202507/01/191410ccrbmddpdddpd3hl.png "image-20250701185852959.png")

等到程序跑起来,你就能在板载指示灯那里看到“闪啊闪”,这就是最简单的测试了。

---

# 5. 串口输出:printf 重定向技巧

光看灯闪有点寂寞,如果能看到日志输出或打印变量,就更好了。幸运的是,SDK 也提供了 UART 驱动示例,帮我们快速完成 printf 重定向。

### 5.1 UART 初始化示例

在我们截取官方例程中的UART初始化:

```c
void UART_Init(void)
{
    //
    // GPIO28 is the UART Rx pin.
    //
    GPIO_setMasterCore(DEVICE_GPIO_PIN_UARTRXDA, GPIO_CORE_CPU0);
    GPIO_setPinConfig(DEVICE_GPIO_CFG_UARTRXDA);
    GPIO_setDirectionMode(DEVICE_GPIO_PIN_UARTRXDA, GPIO_DIR_MODE_IN);
    GPIO_setPadConfig(DEVICE_GPIO_PIN_UARTRXDA, GPIO_PIN_TYPE_STD);
    GPIO_setDrivingCapability(DEVICE_GPIO_PIN_UARTRXDA,GPIO_DRIVE_LEVEL_VERY_HIGH);
    GPIO_setQualificationMode(DEVICE_GPIO_PIN_UARTRXDA, GPIO_QUAL_ASYNC);

    //
    // GPIO29 is the UART Tx pin.
    //
    GPIO_setMasterCore(DEVICE_GPIO_PIN_UARTTXDA, GPIO_CORE_CPU0);
    GPIO_setPinConfig(DEVICE_GPIO_CFG_UARTTXDA);
    GPIO_setDirectionMode(DEVICE_GPIO_PIN_UARTTXDA, GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(DEVICE_GPIO_PIN_UARTTXDA, GPIO_PIN_TYPE_STD);
    GPIO_setDrivingCapability(DEVICE_GPIO_PIN_UARTTXDA,GPIO_DRIVE_LEVEL_VERY_HIGH);
    GPIO_setQualificationMode(DEVICE_GPIO_PIN_UARTTXDA, GPIO_QUAL_ASYNC);

    //
    // Initialize UARTA and its FIFO.
    //
    UART_performSoftwareReset(UARTA_BASE);
    UART_setConfig(UARTA_BASE, DEVICE_LSPCLK_FREQ, 115200,
                   (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
    UART_resetChannels(UARTA_BASE);
    UART_resetRxFIFO(UARTA_BASE);
    UART_resetTxFIFO(UARTA_BASE);
    UART_clearInterruptStatus(UARTA_BASE, UART_INT_TXFF | UART_INT_RXFF);
    UART_enableFIFO(UARTA_BASE);
    UART_enableModule(UARTA_BASE);
    UART_performSoftwareReset(UARTA_BASE);
}
```

可以看到,这里是以 GPIO28 / GPIO29 分别作为 UART Rx / Tx 引脚,并设置波特率 115200。

### 5.2 重定向 fputc

以下函数可让 printf(…) 输出的字符自动从 UARTA\_BASE 发送出去:

```c
int fputc(int ch, FILE* f)
{
    if (ch == '\n')
    {
      UART_writeCharBlockingNonFIFO(UARTA_BASE, (uint8_t)'\r');
    }

    UART_writeCharBlockingNonFIFO(UARTA_BASE, (uint8_t)ch);
    return (ch);
}
```

这样一来,只要 `UART_Init()` 调用成功,在你的 main() 或其他函数里直接写:

```c
printf("G32R501 EVAL Hello World!\n");
```

就能在串口终端上看到对应字串。

!(data/attachment/forum/202507/01/192137m200fev6d0d0w2vf.gif "PixPin_2025-07-01_19-20-56.gif")

---

# 6. G32R501 概述:性能、特色与更多可能

说了开箱与入门体验,也该详细看看 G32R501 本身有哪些“硬实力”吧。从官方给出的资料可见,它具有以下蛛丝马迹:

1. **Arm® Cortex®-M52 双核**   200MHz 主频,支持 v8.1-M 架构下的 Helium 矢量扩展(MVE)。简单来说,对 DSP 和矢量计算有着极大的性能提升。做电机控制或信号处理时会更游刃有余。
2. **自研紫电数学指令扩展单元**   中国本土厂商少有在 MCU 中自行扩展这些底层硬件指令集,理论上会带来更多定制化优化,例如加速一些 FFT、滤波、变换运算,在工业和新能源领域尤其显现优势。
3. **丰富的模拟外设**   三个 12-bit ADC,高达 3.45MSPS 的转换速率,外加 7 路内置 DAC 的比较器、缓冲 DAC 等。如此完整的模拟前端资源,对于高精度测量或闭环控制,非常受用。
4. **丰富的控制外设**   最惊艳的是它的 150ps 分辨率 PWM 通道(×16),QEP(×2),以及 Σ-Δ 滤波器模块 (SDF) 等,都为电机或功率变换领域带来了更高的灵活性。

未来如果你想要做复杂运动控制,这颗 M52 双核应该都能胜任。再加上官方的 SDK和具备调试方便性的 EVB,把原型验证周期进一步缩短。

---

# 7. 小结:双核 + Helium,开箱后更期待实战

本次 G32R501 EVAL板卡开箱记录就到这里了。从简单的包装,到拿起板子那一刻,再到跑通第一段 LED 闪灯+串口打印,整体体验可以说蛮顺畅。

作为国内首款基于 Arm® v8.1-M 架构 Cortex®-M52 双核的 MCU,G32R501 显然不止于简单的 LED 闪烁示例。后续我们可以更深入地研究它的 Helium 矢量扩展如何在 DSP 算法场景下大展拳脚,以及自研紫电指令单元怎么加速一些高强度数**算。

最后借用一句俗话:“一块好的开发板,带来的不单是硬件性能,还有对工程师无限创意的启发。” 这一次 G32R501 EVAL毫无疑问给了我很高的可玩度。希望这篇开箱分享能唤起你对国内高性能 MCU 的关注,让我们一起见证 M52 双核在嵌入式领域擦出的新火花吧!

感谢阅读,咱们下次再见!

kai迪皮 发表于 2025-7-1 19:24

#申请原创# @21小跑堂

Gfan 发表于 2025-7-2 09:33

给大佬点赞~~很细致的开箱帖,希望这个强力板子给大佬带来惊喜

kai迪皮 发表于 2025-7-2 09:56

Gfan 发表于 2025-7-2 09:33
给大佬点赞~~很细致的开箱帖,希望这个强力板子给大佬带来惊喜

感谢极海官方寄的板子,(#^.^#)

wangqy_ic 发表于 2025-7-2 14:59

会不会是全球首款?

jobszheng 发表于 2025-7-2 15:50

楼主 您怎么这么优秀呢!
这么高级的开发板,楼主计划做什么使用啊?

kai迪皮 发表于 2025-7-2 16:28

jobszheng 发表于 2025-7-2 15:50
楼主 您怎么这么优秀呢!
这么高级的开发板,楼主计划做什么使用啊?

我也是不断学习啦,我也不知道怎么用,用来学习一下Cortex®-M52内核的东西

kai迪皮 发表于 2025-7-2 19:25

wangqy_ic 发表于 2025-7-2 14:59
会不会是全球首款?

不晓得,但国内应该是首款
页: [1]
查看完整版本: 国内首款M52内核:G32R501 EVAL板卡开箱记录