[i=s] 本帖最后由 kai迪皮 于 2025-7-1 19:21 编辑 [/i]<br />
<br />
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 包装盒与开箱
打开快递盒后,看到一个纸质包装。和以往那种塑料外壳相比,纸盒子看着更“环保”一点,也让人感觉有点“仪式感”。

里头的内容很精简:
- 一个穿着静电袋的小板卡;
- 一张简短的说明纸,介绍主要资源和特色。

一拿出来就闻到那种新 PCB 的“电子香气”,这不禁勾起了我对板卡内部结构的好奇。
赶紧把静电袋撕开,把板子拿在手里仔细端详。板卡的颜色是 常见的那种深蓝样式,做工不错,接口排布也相对整齐。正面部分印有主控芯片 G32R501DVYT7,那颗就是本次的主角——Arm® Cortex®-M52 双核,搭配紫电扩展单元。

2.2 板卡资源一览
这块 G32R501 EVAL的主要资源包括:
-
主控芯片 G32R501DVYT7
- 国内首款基于 Arm® v8.1-M 架构 Cortex®-M52 双核。
- 支持自研紫电数学指令扩展单元和 Arm Helium。
-
板载 Geehy-Link 调试器
- 省去外置调试器费用,通过 USB 线即可对芯片进行烧写和调试。
- 支持 CMSIS-DAP,当下流行且常用。
-
2×LED 指示灯
-
1×外接 VREFHI
-
1 组 QSPI 接口
-
1×CAN 收发器
- 工业、汽车领域常用的 CAN 通信,在这块板子上也能轻松测试。
-
2×QEP 接口
- 用于电机控制场景中捕获正交编码器信号做精准转速和位置检测。
-
1×80 引脚的 ExpandPack
- 官方命名的扩展接口,未来若 Geehy 推出相应“扩展模块套件”,就能直插直用。
-
拨码开关
- 用于多种 GPIO 配置切换或工作模式选择(如 Boot 模式、接口复用等)。

看完这些资源,我的直观印象是:这块板非常注重“高性能控制和运算需求”。像双 QEP、150ps 分辨率的 PWM 通道等等,都对实时控制场景非常友好,也难怪官方将其定位在工业、新能源、车载领域。
3. SDK 资源介绍
要真正“点亮”我们的开发板,就得先翻翻可用的官方 SDK。根据资料,Geehy 这边也提供了 G32R501 专属的 SDK 包,可从官网“资料下载”区获取。 官方还给了快速上手指南:《AN1125_G32R501 SDK 快速上手指南 V1.1.pdf》。里面简明扼要展示了如何在 MDK Keil 环境下导入包、编译、调试等流程。下完 SDK 大概结构如下:

主要包含:
- boards:板子的硬件原理图,贼方便——特别是想研究具体引脚时无需自己测量。
- device_support:整个 G32R501 的位域结构体定义。喜欢用寄存器“骚操作”的老铁们,可以直观地用这个操作硬件。
- docs:一些应用笔记和说明文档。
- driverlib:G32R501 标準外设库,对绝大部分常用外设(GPIO、UART、SPI 等)封装了函数接口,极大降低了手动写寄存器的复杂度。
- examples:各种例程集合,你想要的 LED 闪灯、UART、CAN、PWM、QEP 等示例都可以在这翻到,是不是很贴心?
- kernel:官方提供的RTOS。
- libraries:一些数学库和 Flash API 的集合,尤其在 M52 + Helium 场景下,矢量运算或 DSP 算法估计大有可为。
- package:MDK 的 pack 文件,可以配置 MDK 环境。
- 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 文件:
- 我们直接双击“Geehy.G32R5xx_DFP.1.0.1.pack”进行安装。
- 安装完成后,你就可以在 Keil 的 “Device” 里看到 G32R501 相关的器件支持。

4.3 打开例程
我这里直接打开“G32R501_SDK_V1.1.0\driverlib\g32r501\examples\eval\led\led_ex1_blinky\project\MDK\project.uvprojx”。 或者可以直接复制一份例程到你自己的工作区,避免不小心改坏官方原例程。
4.4 下载程序
- 连接板卡到电脑,使用 USB 线(板子上自带 Geehy-Link 调试器)。
- 在 MDK 里进入 “Project -> Options for Target -> Debug”,选择调试器为 “CMSIS-DAP”。
- 在 “Utilities” 面板同样选 “CMSIS-DAP”,然后点击“Settings”,看看是否能正确识别到设备。

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

-
点击 Download后再点击Debug ,就能烧写程序并启动仿真。

等到程序跑起来,你就能在板载指示灯那里看到“闪啊闪”,这就是最简单的测试了。
5. 串口输出:printf 重定向技巧
光看灯闪有点寂寞,如果能看到日志输出或打印变量,就更好了。幸运的是,SDK 也提供了 UART 驱动示例,帮我们快速完成 printf 重定向。
5.1 UART 初始化示例
在我们截取官方例程中的UART初始化:
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 发送出去:
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() 或其他函数里直接写:
printf("G32R501 EVAL Hello World!\n");
就能在串口终端上看到对应字串。

6. G32R501 概述:性能、特色与更多可能
说了开箱与入门体验,也该详细看看 G32R501 本身有哪些“硬实力”吧。从官方给出的资料可见,它具有以下蛛丝马迹:
- Arm® Cortex®-M52 双核 200MHz 主频,支持 v8.1-M 架构下的 Helium 矢量扩展(MVE)。简单来说,对 DSP 和矢量计算有着极大的性能提升。做电机控制或信号处理时会更游刃有余。
- 自研紫电数学指令扩展单元 中国本土厂商少有在 MCU 中自行扩展这些底层硬件指令集,理论上会带来更多定制化优化,例如加速一些 FFT、滤波、变换运算,在工业和新能源领域尤其显现优势。
- 丰富的模拟外设 三个 12-bit ADC,高达 3.45MSPS 的转换速率,外加 7 路内置 DAC 的比较器、缓冲 DAC 等。如此完整的模拟前端资源,对于高精度测量或闭环控制,非常受用。
- 丰富的控制外设 最惊艳的是它的 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 双核在嵌入式领域擦出的新火花吧!
感谢阅读,咱们下次再见!