这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » APM32F402和APM32E030的IO翻转速度对比测试

共2条 1/1 1 跳转至

APM32F402和APM32E030的IO翻转速度对比测试

院士
2025-09-16 17:06:38     打赏

APM32F402和APM32E030作为极海今年新出的MCU系列,价格都非常友好,可以用IO来模拟一些非标准的时序。

能否模拟时序很关键的一点就是IO的翻转速度,下面我们实际测试一下。

首先看看两款芯片的基本参数。

APM32F402系列:

  • Arm Cortex-M4F

  • 工作主频120MHz

APM32E030系列:

  • Arm Cortex-M0+

  • 工作主频72MHz

1. APM32E030的测试代码

为了尽可能测出最高IO翻转速度,翻转代码用寄存器方式,不能用库方式。

为了方便观测,需要翻转多次,但是不能直接用循环实现多次翻转,因为循环的判断也需要指令,会导致实测的翻转速度偏低。

为了避免其他指令的影响,这里把IO电平操作代码复制多份。

int main(void)
{
    GPIO_Config_T gpioConfig;

    TEST_PeriphClockEnable;

    /* GPIO configuration */
    gpioConfig.pin     = TEST_PIN;
    gpioConfig.mode    = GPIO_MODE_OUT;
    gpioConfig.outtype = GPIO_OUT_TYPE_PP;
    gpioConfig.speed   = GPIO_SPEED_50MHz;
    gpioConfig.pupd    = GPIO_PUPD_NO;
    GPIO_Config(TEST_GPIO, &gpioConfig);

    for (;;)
    {

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BR = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BR = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BR = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BR = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BR = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BR = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BR = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BR = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BR = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BR = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BR = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BR = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BR = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BR = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BR = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BR = (uint32_t)TEST_PIN;

    }
}
2. APM32F402的测试代码

APM32F402的测试代码和APM32E030大体相同,只是需要改一下GPIO的初始化配置,还有就是 BR寄存器改为BC。

int main(void)
{
    TEST_PeriphClockEnable;

    GPIO_Config_T GPIO_ConfigStruct = {0U};

    GPIO_ConfigStruct.pin  = TEST_PIN;
    GPIO_ConfigStruct.mode = GPIO_MODE_OUT_PP;
    GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
    GPIO_Config(TEST_GPIO, &GPIO_ConfigStruct);


    for (;;)
    {

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BC = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BC = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BC = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BC = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BC = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BC = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BC = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BC = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BC = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BC = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BC = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BC = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BC = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BC = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BC = (uint32_t)TEST_PIN;

        TEST_GPIO->BSC = (uint32_t)TEST_PIN;
        TEST_GPIO->BC = (uint32_t)TEST_PIN;

    }
}
3. 实际测试

为了方便对比,统一把编译优化等级设为最高 O3 ,APM32下载程序到开发板执行,用示波器观察测量频率。

APM32E030以72M主频执行,根据测试波形,可看出翻转频率约为17.99MHz:

翻转率01.jpg

APM32F402以72M主频执行,根据测试波形,可看出翻转频率约为18.12MHz:

翻转率02.jpg

APM32F402以120M主频执行,根据测试波形,可看出翻转频率约为30.12MHz:

翻转率03.jpg

汇总一下测试结果。

芯片主频翻转速度
APM32E030RB72MHz17.99MHz
APM32F402RB72MHz18.12MHz
APM32F402RB120MHz30.12MHz

在相同主频下Cortex-M0的E030的IO翻转速度和Cortex-M4的F402差不多,

得益于更高的主频,APM32F402RB的IO翻转速度达到了30M。







关键词: GPIO翻转     速度     对比    

专家
2025-09-16 20:20:33     打赏
2楼

算了下,翻转速度大约是工作主频的1/4,这个值是不是可以通过设置进行修改?另外这个值是不是所属外设总线的主频?


共2条 1/1 1 跳转至

回复

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