这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 企业专区» 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 跳转至

回复

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