这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » GD32 » GD32107C-EVAL初探--MDK工程模板

共3条 1/1 1 跳转至

GD32107C-EVAL初探--MDK工程模板

高工
2015-03-17 22:08:41     打赏

关于GD32与STM32的区别,提到最多的是:

1、 GD32的主频可以跑108MHz STM32的主频可以跑到72MHz

2、 GD32所用的FLASH不同于STM32

3、 都可以使用STM32的固件库来开发



在进行所有实验之前得先建立一个工程模板:


1、由于可以用STM32的固件库开发,那么直接使用STM32F107的固件库来建立工程。

2、由于FLASH不同,得添加GD32的FLASH算法

GD32F103xx IDE Config V1.2.rar

解压后将FLASH算法文件添加到MDK的安装目录

需要配置工程,添加算法后,根据FLASH的容量修改FLASH大小:

3、修改修改HSE_STARTUP_TIMEOUT

这段代码在STM32F10X.H的128行处

 #define HSE_STARTUP_TIMEOUT   ((uint16_t)0xFFFF) /*!< Time out for HSE start up */

网上很多地方提到这点,刚开始也产生了疑问,为啥这里需要修改,这里把时间改长难道是GD32的这一个地方不如STM32...

找到的一个比较合理的解释是物理起振时间基本上是一致的,只是 GD 认为读取更多的 CLK 进来会更可靠!这个没有更多原因,就是 A 认为 5个可靠,B 认为 10 个可靠。没什么影响 就是个数。

4、关于时钟配置

    用过STM32固件库的都应该知道,在跳转到main函数之前,已经执行了一段函数初始化系统。其中就有根据我们的选择将主频设置好为。


#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
 #define SYSCLK_FREQ_24MHz  24000000
#else
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
/* #define SYSCLK_FREQ_24MHz  24000000 */ 
/* #define SYSCLK_FREQ_36MHz  36000000 */
/* #define SYSCLK_FREQ_48MHz  48000000 */
/* #define SYSCLK_FREQ_56MHz  56000000 */
#define SYSCLK_FREQ_72MHz  72000000
#endif


在这个工程模板里,我并没有修改这里。依然选择的72M,可能有人会问,这样做配置出来的时钟在GD32中可以用么,我觉得是可以的。先瞅瞅GD32和STM32的时钟树:



STM32F107时钟树:

可以看出两个时钟树,都是一个外部8M晶振,通过一个PLL,但是不同的是GD32可以最高108M,而STM32最高为72M,这是为啥呢.....

看到图中最关键的地方还是倍频的地方,翻看寄存器发现这个:

先看STM32F107的寄存器描述

再看GD32的

这样,我按照STM32配置72M的程序在GD32上跑也应该是没有问题的,至少不会出大问题。毕竟只是先建立一个模板,之后再好好研究如何配置成108M。

5、让LED闪烁,验证模板的正确性


void  LedPinInit()
{
    GPIO_InitTypeDef   GPIO_InitStruct; 
	  RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOC,ENABLE );
	  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
	  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz ;
    GPIO_Init (GPIOC,&GPIO_InitStruct); 
}



void  LedPowerSelect(u8 type)
{
	  if(0x1 == type)
		{
         GPIO_SetBits (GPIOC,GPIO_Pin_0);
    }
		else
		{
         GPIO_ResetBits (GPIOC,GPIO_Pin_0);
    }
}


简单的测试代码:



#include "led.h"



void  delay_test()
{
    u32 delay_val = 0x2255100;
    while(delay_val--);
}



int main()
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	LedPinInit();
	while(1)
	{
	 	  LedPowerSelect(1);
		  delay_test();
		  LedPowerSelect(0);
		  delay_test();
	}
}







关键词: GD32107C-EVAL     工程     模板    

院士
2015-03-17 23:21:45     打赏
2楼
嘿嘿  我也是直接使用的STM32的固件库。

高工
2015-03-20 22:34:42     打赏
3楼

直接使用ST库最好了。

要的就是这效果。。。。。。。。。。。。。。。。。


共3条 1/1 1 跳转至

回复

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