这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 【G32R501 Micro-EVB开发板】+01实现双核点亮LED灯

共1条 1/1 1 跳转至

【G32R501 Micro-EVB开发板】+01实现双核点亮LED灯

高工
2026-08-20 16:11:29     打赏

一:G32R501介绍

G32R501 Micro-EVB评估板是基于G32R501实时控制MCU设计的一款最小系统演示板和开发平台,采用G32R501DRYT7(LQFP64)作为板载主控芯片,该芯片基于Arm(®)Cortex(®)-M52双核,支持双核并行工作,实现高效协同。 G32R501 Micro-EVB板载的Geehy-Link调试器可以进行快捷调试。此外,板上引出了标准化排针接口,支持扩展连接一个Geehy电机功率板用于评估电机驱动性能,方便用户快速上手进行开发和应用。

三:使用的编译器和调试方法

刚刚看到的时候就发现,需要使用Am Keil MDK(≥V5.40),为了方便,我使用的是最新的版本5.43,没想到的是最新的版本,刚刚安装极海的SDK包,就提示安装不上,当时上网查看,说的是新版本的keil,取消了直接安装的功能,可以使用在线安装,不过没有科学上网的情况下,还是比较麻烦的。后来上网查才知道,原来keil的支持包是支持导入的。方法如下图所示:

依次点击图中的按钮,然后等待安装完成就可以了。

四:双核点灯配置过程

4.1 新建工程

这里为了更好的看到双核的效果,我将单核启动和双核启动放到的同一个工程里面,如下图所示:

为了方便区分,命名为G32501,G32R501_cpu0,G32R501_cpu1三个不同的名字,不过在某个情况下,还是依靠主核CPU0,即使是在双核的情况下,CPU1也是依靠CPU0运行的,只是双核启动的地址不同。

4.2 cpu0 配置:

在原有的基础上新建一个CPU0的工程,配置.sct文件,选择双核配置。

然后配置调试器和只有cpu0的没有区别;

4.3 cpu1的配置

这里参考cpu0的配置,配置.sct文件,选择双核配置。

这里需要注意下配置下,CPU1的调试界面,我们可以参考官方的文档得知,CPU1是依靠CPU0下载BIN文件,所以CPU1无需自行下载,同时可以使用CPU0工程中调用CPU1的BIN文件就可以了,使用代码如下所示:

这里分享一下双核启动的分配情况如下所示:

五:代码编写过程:

5.1 单核代码

LED灯初始化的底层驱动函数:

/**************************************************************
* @brief  LED初始化配置
*         
* @param  
* @retval 
**************************************************************/
void LED_Init(uint32_t ledio, GPIO_CoreSelect core)
{
    GPIO_setPadConfig(ledio, GPIO_PIN_TYPE_STD);
    GPIO_setDrivingCapability(ledio,GPIO_DRIVE_LEVEL_VERY_HIGH);
    GPIO_setQualificationMode(ledio, GPIO_QUAL_SYNC);
    GPIO_setDirectionMode(ledio, GPIO_DIR_MODE_OUT);
    GPIO_setMasterCore(ledio, core);
}
配置板载的LED所使用的引脚,同时配置好IO口属于哪个核;

void LED_Init(void)
{
    WRPRT_DISABLE;
    GPIO_setPinConfig(LED1_CONFIG);
    GPIO_setPadConfig(LED1_IO, GPIO_PIN_TYPE_STD);
    GPIO_setDrivingCapability(LED1_IO,GPIO_DRIVE_LEVEL_VERY_HIGH);
    GPIO_setQualificationMode(LED1_IO, GPIO_QUAL_SYNC);
    GPIO_setDirectionMode(LED1_IO, GPIO_DIR_MODE_OUT);
    GPIO_setMasterCore(LED1_IO, GPIO_CORE_CPU0);
    WRPRT_ENABLE;
}

主程序如下所示:

int main()
{
    Device_init();
    HARDWARE_INIT();
    while(1)
    {
        GPIO_togglePin(LED1_IO);
        GPIO_togglePin(LED2_IO);
        DelayMs(500);
    }

    return 1;
}

烧录之后,可以看到板载的LED0,LED1以500MS的间隔闪烁。

5.2 双核启动配置:

  5.2.1 CPU0的配置过程:

  配置程序在CPU0启动,代码如下所示:

void CPU_SrartCPU0()
{
    uint32_t cpu1_imageSize = 0;
    uint32_t cpu1_imageStartAddr = 0;
    cpu1_imageSize = (uint32_t)&Image$$ER_ROM_CPU1$$Length;
    cpu1_imageStartAddr = (uint32_t)&Image$$ER_ROM_CPU1$$Base;
    SysCtl_setCPU1BootAddress(cpu1_imageStartAddr);
    SysCtl_enableBootCPU1();
}

  配置CPU0下载时候,加载CPU1的BIN文件,如下所示:

__attribute__((__used__, section("cpu1_code")))

void G32R501_incbin(void)
{
        __asm(".incbin \"cpu1_image.bin\"");
}
配置LED1所属于核0:

void LED_Init(void)
{
    WRPRT_DISABLE;
    GPIO_setPinConfig(LED1_CONFIG);
    GPIO_setPadConfig(LED1_IO, GPIO_PIN_TYPE_STD);
    GPIO_setDrivingCapability(LED1_IO,GPIO_DRIVE_LEVEL_VERY_HIGH);
    GPIO_setQualificationMode(LED1_IO, GPIO_QUAL_SYNC);
    GPIO_setDirectionMode(LED1_IO, GPIO_DIR_MODE_OUT);
    GPIO_setMasterCore(LED1_IO, GPIO_CORE_CPU0);
    WRPRT_ENABLE;
}
在程序中,添加LED的闪烁函数就可以了;

5.2.2 CPU1的配置过程:

/**************************************************************
* @brief  LED初始化配置
*         
* @param  
* @retval 
**************************************************************/
void LED_Init(void)
{
    WRPRT_DISABLE;
    GPIO_setPinConfig(LED2_CONFIG);
    GPIO_setPadConfig(LED2_IO, GPIO_PIN_TYPE_STD);
    GPIO_setDrivingCapability(LED2_IO,GPIO_DRIVE_LEVEL_VERY_HIGH);
    GPIO_setQualificationMode(LED2_IO, GPIO_QUAL_SYNC);
    GPIO_setDirectionMode(LED2_IO, GPIO_DIR_MODE_OUT);
    GPIO_setMasterCore(LED2_IO, GPIO_CORE_CPU1);
    WRPRT_ENABLE;
}

可以看到需要配置LED2,归属于CPU1核就可以了。

六:注意事项

在使用双核调试时候,由于CPU1核是依靠与CPU0核下载的,所以当我们修改CPU1的代码时候,需要编译完成后,同时修改到CPU0的工程下,进行下载;

在使用某个引脚的时候,需要注意配置下该引脚属于哪个核在调用。





关键词: G32R501     双核    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]