查看: 3658|回复: 0

【GD32450i-EVAL评估板适用】收到体验结果

[复制链接]
  • TA的每日心情
    郁闷
    2020-9-17 18:05
  • 签到天数: 31 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2017-3-27 08:47:42 | 显示全部楼层 |阅读模式
    分享到:
    话说以前都是用的ST家的开发板,对于国产的GD家这更牛逼的板卡还没有真实的体验过,感谢爱板网让我这次能够有机会体验下这么高大上的板子,首先是收到板卡以后打开了包装,看来里面的泡沫防震做的也挺不错的,里面各种东西都是应有尽有。

    然后把每个东西逐个拿出来,摆放在电脑上可以看到有主要的开发板、附带一个摄像头、一个光盘、一个电源、两根microUSB线,以及一根网线,东西看起来还是很其全的,当然也很让人省心。

    然后直接上电,可以看到一个豹子在不停的跑,而且跑得还挺快呢,可以看出GD32的性能还是很厉害的。
    评估完了以后按照之前申请的计划,第一步使用keil开发平台搭建工程模板,光盘上第一步是要安装GD32F450的keil安装包,我用的版本是keil5.15系列,在光盘里面找到GigaDevice.GD32F4xx_DFP.1.0.1.pack文件安装包并安装,就可以开始进行开发了。
    按照以前学习STM32的惯例,先来个LED的闪烁程序,根据原理图上的LED灯程序,发现LED灯使用的是PE2 PE3 还有PF10。

    在第一步使用中先确定系统的时钟,系统的时钟频率在system_gd32f4xx.c文件里面有定义:
    /* select a system clock by uncommenting the following line *///#define __SYSTEM_CLOCK_IRC16M                   (uint32_t)(__IRC16M)//#define __SYSTEM_CLOCK_HXTAL                    (uint32_t)(__HXTAL)//#define __SYSTEM_CLOCK_120M_PLL_IRC16M          (uint32_t)(120000000)//#define __SYSTEM_CLOCK_120M_PLL_8M_HXTAL        (uint32_t)(120000000)//#define __SYSTEM_CLOCK_120M_PLL_25M_HXTAL       (uint32_t)(120000000)//#define __SYSTEM_CLOCK_168M_PLL_IRC16M          (uint32_t)(168000000)//#define __SYSTEM_CLOCK_168M_PLL_8M_HXTAL        (uint32_t)(168000000)//#define __SYSTEM_CLOCK_168M_PLL_25M_HXTAL       (uint32_t)(168000000)//#define __SYSTEM_CLOCK_200M_PLL_IRC16M          (uint32_t)(200000000)//#define __SYSTEM_CLOCK_200M_PLL_8M_HXTAL        (uint32_t)(200000000)#define __SYSTEM_CLOCK_200M_PLL_25M_HXTAL       (uint32_t)(200000000)正在这个时钟定义里面,外部晶振所用时钟为25MHz,倍频以后系统时钟为200MHz,比同系列的STM32F429的主频还要高,并且更厉害的是GD32F450IKT6拥有的Flash空间为3MBytes,已经超乎了人的想象。
    对于GPIO的操作,首先先打开GPIOE和GPIOF的端口时钟:
    rcu_periph_clock_enable(RCU_GPIOE);rcu_periph_clock_enable(RCU_GPIOF);在这里需要注意的是时钟的开启,输入参数RCU_GPIOE只能是一次一个的开启,要不然的话编译提示警告,我看了源码,开启时钟用的是枚举类型的方式,所以只能一次开一个,否则提示警告。我在这里做了个实验,分别采用上面的方法,还有下面的方法
    rcu_periph_clock_enable(RCU_GPIOE|RCU_GPIOF);发现采用第一种的方法,逐个开启时钟系统能够工作,而采用第二种方法,也就是或的方法,直接就不工作了。所以由于库函数的原因,开启时钟一次只能开启一个。
    然后是对GPIO进行设置,在这里GD32的库使用的是先设置模式,然后设置输出的状态,如果是输入的话就不需要进行output设置了。在这个地方是可以用或操作一次性操作多个的,具体的原因还是看库函数,用的方法不再是枚举类型,而是和STM32类似的方法,所以可以用与操作一次设置多个引脚。
    gpio_mode_set(GPIOE,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO_PIN_2|GPIO_PIN_3);gpio_output_options_set(GPIOE,GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_2|GPIO_PIN_3);gpio_mode_set(GPIOF,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO_PIN_10);gpio_output_options_set(GPIOF,GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_10);在接着就是调用了系统时钟初始化systick_config();,函数的内容如下:主要作用是设置sys时钟的中断时间为1ms时间,然后设置优先级。void systick_config(void){    /* setup systick timer for 1000Hz interrupts */    if (SysTick_Config(SystemCoreClock / 1000U)){        /* capture error */        while (1){        }    }    /* configure the systick handler priority */    NVIC_SetPriority(SysTick_IRQn, 0x00U);}调用该函数的目的在于进行延时操作,在systick.c源文件中包含有delay_1ms延时函数,如果要使用这个函数,还要在系统时钟的中断函数里面添加延时递减函数的调用:
    /*!    \brief      this function handles SysTick exception    \param[in]  none    \param[out] none    \retval     none*/void SysTick_Handler(void){        delay_decrement();}这样的话就能够使用延时函数了,接下来对单个LED灯进行闪烁操作:while(1){        GPIO_BOP(GPIOE)=GPIO_PIN_2;        delay_1ms(500);        GPIO_BC(GPIOE)=GPIO_PIN_2;        delay_1ms(500);}在while循环里面GPIO_BOP是bit operation的缩写,意思就是将某个引脚拉高(这里可以用或操作一次性操作多个),然后GPIO_BC是bit clear的缩写,意思就是拉低的作用,在这个while循环里面最终就实现了LED灯的闪烁操作了,效果如下:
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-12-21 11:06 , Processed in 0.124074 second(s), 17 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.