查看: 4627|回复: 0

[项目] GD32F150 之 IO口翻转速度测试

[复制链接]
  • TA的每日心情

    2023-7-25 22:49
  • 签到天数: 385 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-7-22 22:29:31 | 显示全部楼层 |阅读模式
    分享到:
    今天来测试下GD32F150的IO速度,和STM32F103C8T6做个简单的对比。
    GD32的测试程序如下:
    1. #include "gd32f1x0.h"


    2. //初始化HSI时钟
    3. void RCC_Config(void)
    4. {
    5.         RCC_HSI_Enable(ENABLE);
    6.         while(RCC_GetBitState(RCC_FLAG_HSISTB) != SET);
    7.         RCC_PLLConfig(RCC_PLLSOURCE_HSI_DIV2,RCC_PLLMUL_18);//改为24,可以超频至96Mhz
    8.         RCC_PLL_Enable(ENABLE);
    9.         while(RCC_GetBitState(RCC_FLAG_PLLSTB) != SET);
    10.         RCC_CK_SYSConfig(RCC_SYSCLKSOURCE_PLLCLK);
    11.         RCC_AHBConfig(RCC_CKOUTDIV_1);
    12.         RCC_APB1Config(RCC_APB1AHB_DIV1);
    13.         RCC_APB2Config(RCC_APB2AHB_DIV1);
    14.        
    15.         SystemCoreClockUpdate();
    16. }

    17. //配置GPIO
    18. void gpio_Config(void)
    19. {
    20.         GPIO_InitPara GPIO_InitStructure;

    21.         RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOB,ENABLE);
    22.        
    23.         GPIO_DeInit(GPIOB);
    24.        
    25.         /* Configure pins as AF pushpull */
    26.         GPIO_InitStructure.GPIO_Pin     = GPIO_PIN_8;
    27.         GPIO_InitStructure.GPIO_Mode    = GPIO_MODE_OUT;
    28.         GPIO_InitStructure.GPIO_Speed   = GPIO_SPEED_50MHZ;
    29.         GPIO_InitStructure.GPIO_OType   = GPIO_OTYPE_PP;
    30.         GPIO_InitStructure.GPIO_PuPd    = GPIO_PUPD_NOPULL;
    31.         GPIO_Init( GPIOB , &GPIO_InitStructure);


    32. }

    33. int main(void)
    34. {
    35.         RCC_Config();
    36.         gpio_Config();
    37.        
    38.         while(1)
    39.         {
    40.                 GPIOB->BOR = GPIO_PIN_8;
    41.                 GPIOB->BCR = GPIO_PIN_8;
    42.                 GPIOB->BOR = GPIO_PIN_8;
    43.                 GPIOB->BCR = GPIO_PIN_8;
    44.                 GPIOB->BOR = GPIO_PIN_8;
    45.                 GPIOB->BCR = GPIO_PIN_8;
    46.                 GPIOB->BOR = GPIO_PIN_8;
    47.                 GPIOB->BCR = GPIO_PIN_8;
    48.                 GPIOB->BOR = GPIO_PIN_8;
    49.                 GPIOB->BCR = GPIO_PIN_8;
    50.                 GPIOB->BOR = GPIO_PIN_8;
    51.                 GPIOB->BCR = GPIO_PIN_8;
    52.                 GPIOB->BOR = GPIO_PIN_8;
    53.                 GPIOB->BCR = GPIO_PIN_8;
    54.                 GPIOB->BOR = GPIO_PIN_8;
    55.                 GPIOB->BCR = GPIO_PIN_8;
    56.                 GPIOB->BOR = GPIO_PIN_8;
    57.                 GPIOB->BCR = GPIO_PIN_8;
    58.                 GPIOB->BOR = GPIO_PIN_8;
    59.                 GPIOB->BCR = GPIO_PIN_8;
    60.                 GPIOB->BOR = GPIO_PIN_8;
    61.                 GPIOB->BCR = GPIO_PIN_8;
    62.                 GPIOB->BOR = GPIO_PIN_8;
    63.                 GPIOB->BCR = GPIO_PIN_8;
    64.                 GPIOB->BOR = GPIO_PIN_8;
    65.                 GPIOB->BCR = GPIO_PIN_8;
    66.                 GPIOB->BOR = GPIO_PIN_8;
    67.                 GPIOB->BCR = GPIO_PIN_8;
    68.                 GPIOB->BOR = GPIO_PIN_8;
    69.                 GPIOB->BCR = GPIO_PIN_8;
    70.                 GPIOB->BOR = GPIO_PIN_8;
    71.                 GPIOB->BCR = GPIO_PIN_8;
    72.                 GPIOB->BOR = GPIO_PIN_8;
    73.                 GPIOB->BCR = GPIO_PIN_8;
    74.                 GPIOB->BOR = GPIO_PIN_8;
    75.                 GPIOB->BCR = GPIO_PIN_8;
    76.                 GPIOB->BOR = GPIO_PIN_8;
    77.                 GPIOB->BCR = GPIO_PIN_8;
    78.                 GPIOB->BOR = GPIO_PIN_8;
    79.                 GPIOB->BCR = GPIO_PIN_8;
    80.         }
    81. }
    复制代码
    用逻辑分析仪100M采样,得到的结果:
    gd32.jpg
    基本上速度在6M左右。
    STM32程序如下:
    1. #include <stm32f10x.h>

    2. ErrorStatus HSEStartUpStatus;
    3. //配置gpio
    4. void gpio_config()
    5. {
    6.         GPIO_InitTypeDef gpio_struct;
    7.        
    8.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    9.        
    10.         gpio_struct.GPIO_Mode = GPIO_Mode_Out_PP;
    11.         gpio_struct.GPIO_Pin = GPIO_Pin_0;
    12.         gpio_struct.GPIO_Speed = GPIO_Speed_50MHz;
    13.        
    14.         GPIO_Init(GPIOA,&gpio_struct);
    15. }

    16. /*******************************************************************************
    17. *                           配置RCC
    18. *******************************************************************************/
    19. void RCC_Configuration(void)
    20. {   
    21. //复位RCC外部设备寄存器到默认值
    22.   RCC_DeInit();

    23.   //打开外部高速晶振
    24.   RCC_HSEConfig(RCC_HSE_ON);

    25.    //等待外部高速时钟准备好
    26.   HSEStartUpStatus = RCC_WaitForHSEStartUp();

    27.   if(HSEStartUpStatus == SUCCESS)   //外部高速时钟已经准别好
    28.   {                                                                    
    29.     //开启FLASH的预取功能
    30.     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    31.     //FLASH延迟2个周期
    32.     FLASH_SetLatency(FLASH_Latency_2);
    33.        
    34.   //配置AHB(HCLK)时钟=SYSCLK
    35.     RCC_HCLKConfig(RCC_SYSCLK_Div1);  
    36.   
    37.    //配置APB2(PCLK2)钟=AHB时钟
    38.     RCC_PCLK2Config(RCC_HCLK_Div1);

    39.     //配置APB1(PCLK1)钟=AHB 1/2时钟
    40.     RCC_PCLK1Config(RCC_HCLK_Div2);

    41.      //配置PLL时钟 == 外部高速晶体时钟*9  PLLCLK = 8MHz * 9 = 72 MHz
    42.     RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

    43.     //使能PLL时钟
    44.     RCC_PLLCmd(ENABLE);

    45.    //等待PLL时钟就绪
    46.     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    47.     {
    48.     }

    49.   //配置系统时钟 = PLL时钟
    50.     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    51.    //检查PLL时钟是否作为系统时钟
    52.     while(RCC_GetSYSCLKSource() != 0x08)
    53.     {
    54.     }
    55.   }
    56. }

    57. int main()
    58. {
    59.         gpio_config();
    60.        
    61.         while(1)
    62.         {
    63.                 GPIOA->BSRR = GPIO_Pin_0;
    64.                 GPIOA->BRR = GPIO_Pin_0;
    65.                 GPIOA->BSRR = GPIO_Pin_0;
    66.                 GPIOA->BRR = GPIO_Pin_0;
    67.                 GPIOA->BSRR = GPIO_Pin_0;
    68.                 GPIOA->BRR = GPIO_Pin_0;
    69.                 GPIOA->BSRR = GPIO_Pin_0;
    70.                 GPIOA->BRR = GPIO_Pin_0;
    71.                 GPIOA->BSRR = GPIO_Pin_0;
    72.                 GPIOA->BRR = GPIO_Pin_0;
    73.                 GPIOA->BSRR = GPIO_Pin_0;
    74.                 GPIOA->BRR = GPIO_Pin_0;
    75.                 GPIOA->BSRR = GPIO_Pin_0;
    76.                 GPIOA->BRR = GPIO_Pin_0;
    77.                 GPIOA->BSRR = GPIO_Pin_0;
    78.                 GPIOA->BRR = GPIO_Pin_0;
    79.                 GPIOA->BSRR = GPIO_Pin_0;
    80.                 GPIOA->BRR = GPIO_Pin_0;
    81.                 GPIOA->BSRR = GPIO_Pin_0;
    82.                 GPIOA->BRR = GPIO_Pin_0;
    83.                 GPIOA->BSRR = GPIO_Pin_0;
    84.                 GPIOA->BRR = GPIO_Pin_0;
    85.         }
    86. }

    复制代码
    用逻辑分析仪100M采样,得到的结果:
    stm32.jpg
    基本上在12M左右。
    从以上结果来看,ST大概是GD的两位,虽然GD也不错,但GD还需要努力。毕竟150是value line系列,等申请到其它芯片再做测试。测试有疏忽的地方,还忘大家指出。



    评分

    参与人数 1与非币 +5 收起 理由
    loveeeboard + 5 三周年铜板双倍!

    查看全部评分

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-6-3 04:20 , Processed in 0.114814 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.