打印

GD32F103 HSI 时钟上不了108MHZ,为啥?

[复制链接]
3731|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
apachectl|  楼主 | 2016-10-5 21:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的固件库:
**
  ******************************************************************************
  * @file    system_GD32f10x.c
  * @author  MCU SD
  * @version V1.0.1
  * @date    6-Sep-2014
  * @brief   CMSIS Cortex-M3 Device Peripheral Access Layer System Source File.
  ******************************************************************************
  */

都没有改:只是修改了:
* Uncomment the corresponding line to configure system clock that you need  */
/* The clock is from HSE oscillator clock  */
//#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
//#define SYSCLK_FREQ_96MHz  96000000
//#define SYSCLK_FREQ_108MHz  108000000

/* Uncomment the corresponding line to configure system clock that you need  */
/* The clock is from HSI oscillator clock  */
//#define SYSCLK_FREQ_48MHz_HSI  48000000
//#define SYSCLK_FREQ_72MHz_HSI  72000000
#define SYSCLK_FREQ_108MHz_HSI  108000000

结果我测试:systick时,按理说,设置10ms一中断,需要:
SysTick_Config(108000000/100)                //10ms  108000000/100
而实际,必须设置成:
SysTick_Config(480000)
也就是说,系统跑在48M的主频上,运行测试,和stm32f030跑48M  的程序速度差不多,证实在48M上,这GD32不是在坑爹么。全部程序费了N大劲全部移植过来(可恶的库函数和stm32的完全不一样,得一个一个的对名称);

有谁知道什么情况么?
沙发
apachectl|  楼主 | 2016-10-5 21:44 | 只看该作者
static void SetSysClockTo108HSI(void)
{
  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
  
  /* CK_SYS, AHB, APB2 and APB1 configuration ---------------------------*/   

    /* AHB = CK_SYS not divided */
    RCC->GCFGR |= (uint32_t)RCC_GCFGR_AHBPS_DIV1;
      
    /* APB2 = AHB not divided */
    RCC->GCFGR |= (uint32_t)RCC_GCFGR_APB2PS_DIV1;
   
    /* APB1 = AHB is divided 2 */
    RCC->GCFGR |= (uint32_t)RCC_GCFGR_APB1PS_DIV2;

    /* Configure PLLs ------------------------------------------------------*/
   
    /* PLL configuration: PLLCLK = (HSI/2) * 27 = 108 MHz */
    RCC->GCFGR &= (uint32_t)((uint32_t)~(RCC_GCFGR_PLLSEL | RCC_GCFGR_PLLPREDV | RCC_GCFGR_PLLMF));
    RCC->GCFGR |= (uint32_t)( RCC_GCFGR_PLLSEL_HSI_DIV2 | RCC_GCFGR_PLLMF27);

    /* Enable PLL */
    RCC->GCCR |= RCC_GCCR_PLLEN;

    /* Wait till PLL is ready */
    while((RCC->GCCR & RCC_GCCR_PLLSTB) == 0)
    {
    }

    /* Select PLL as system clock source */
    RCC->GCFGR &= (uint32_t)((uint32_t)~(RCC_GCFGR_SCS));
    RCC->GCFGR |= (uint32_t)RCC_GCFGR_SCS_PLL;   

    /* Wait till PLL is used as system clock source */
    while ((RCC->GCFGR & (uint32_t)RCC_GCFGR_SCSS) != (uint32_t)0x08)
    {
    }
}


这是官方的初始化库,目前看得没什么问题,就是不干活

使用特权

评论回复
板凳
CP19940613| | 2016-10-6 09:50 | 只看该作者
本帖最后由 CP19940613 于 2016-10-6 09:51 编辑

不管怎么说还是推荐使用外部晶振,Keil里面Target也要设置一下Xtal,顺便打个广告,这个核心板我用GD和ST的库都能跑108MHz,需要可以联系

使用特权

评论回复
地板
apachectl|  楼主 | 2016-10-6 10:05 | 只看该作者
IO不够,连SWD接口都省了,当然晶振那几个IO也是要用到的

使用特权

评论回复
5
huarana| | 2016-10-6 10:59 | 只看该作者
本帖最后由 huarana 于 2016-10-6 11:01 编辑



stm32103的 内部连72都跑不到。

具体看时钟树
GD32是否能跑还得看看他的时钟树

使用特权

评论回复
6
菜鸟同学| | 2016-10-6 11:33 | 只看该作者
怎么可能,自己对着GD数据手册看看,和ST不一样,

使用特权

评论回复
7
jcdzxh| | 2016-10-6 14:22 | 只看该作者
GD RCC  PLL配置多一 bit

使用特权

评论回复
8
apachectl|  楼主 | 2016-10-6 15:34 | 只看该作者
本帖最后由 apachectl 于 2016-10-6 19:25 编辑

考虑到GD可能有坑,因此考虑使用他的类库比较好些,类库的定义:
  /* PLL configuration: PLLCLK = (HSI/2) * 27 = 108 MHz */
    RCC->GCFGR &= (uint32_t)((uint32_t)~(RCC_GCFGR_PLLSEL | RCC_GCFGR_PLLPREDV | RCC_GCFGR_PLLMF));
    RCC->GCFGR |= (uint32_t)( RCC_GCFGR_PLLSEL_HSI_DIV2 | RCC_GCFGR_PLLMF27);

#define  RCC_GCFGR_PLLMF27                          ((uint32_t)0x20280000)      

类库总不会错吧,有没有人弄明白什么情况?


使用特权

评论回复
9
elfin_xpp| | 2016-10-10 21:04 | 只看该作者
systick可以是1/8的系统时钟,或者系统时钟,而且时钟树上的好多衍生时钟都有最高要求,你提高系统时钟时,其他衍生时钟也要进行正确的配置。

使用特权

评论回复
10
vivilzb1985| | 2016-10-16 08:54 | 只看该作者
这个运行频率也太高了吧

使用特权

评论回复
11
shenmu2012| | 2016-10-16 12:47 | 只看该作者
这用不到那么高的时钟频率的吧

使用特权

评论回复
12
steven_fae| | 2016-10-25 09:29 | 只看该作者
#define  RCC_GCFGR_PLLMF27                          ((uint32_t)0x08280000)

使用特权

评论回复
13
apachectl|  楼主 | 2016-12-5 20:56 | 只看该作者
steven_fae 发表于 2016-10-25 09:29
#define  RCC_GCFGR_PLLMF27                          ((uint32_t)0x08280000)

高手,看来原始固件bug不少,原来都准备放弃gd了,现在重新评估;
修改后速度明显提升,但是串口速率测底乱了,需要重新适配

使用特权

评论回复
14
comeon201208| | 2016-12-7 22:40 | 只看该作者
108MHz的是极限情况的。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

13

帖子

3

粉丝