GD不靠谱啊!

[复制链接]
 楼主| 菜鸟同学 发表于 2015-12-1 16:24 | 显示全部楼层 |阅读模式
我花了大半天移植到GD,结果发现GD 时钟配置,居然连内部时钟倍频到72M都没有。只有HSE。
移植过程中发现些不痛不痒的问题,我也忍了,现在还要自己写,这个是什么意思。好蛋疼!
 楼主| 菜鸟同学 发表于 2015-12-1 16:25 | 显示全部楼层
以为官方库要靠谱点!
shdjdq 发表于 2015-12-1 16:28 | 显示全部楼层
还行吧,基本和STM32通用
晓枫VS枯叶 发表于 2015-12-1 16:34 | 显示全部楼层
GD官方库都能倍频到108M
whz913399088 发表于 2015-12-1 16:49 | 显示全部楼层
楼主什么意思。GD的103系列最高时钟能配置到108M呢,直接使用GD的官方固件库怎么会没有内部时钟72M的配置呢。不过你要是使用ST的固件库,那你就不能说GD的问题了。还有移植的过程中发现不同不痒的问题,既然是移植那就是要解决这些不同不痒的问题的,不然怎么叫移植呢。我这边有一些GD的示例程序,以及ST与GD间移植的资料。有需要可以加我QQ:913399088
 楼主| 菜鸟同学 发表于 2015-12-1 16:51 | 显示全部楼层
whz913399088 发表于 2015-12-1 16:49
楼主什么意思。GD的103系列最高时钟能配置到108M呢,直接使用GD的官方固件库怎么会没有内部时钟72M的配置呢 ...

我用的GD150,我也无语了,不折腾了。
whz913399088 发表于 2015-12-1 16:59 | 显示全部楼层
菜鸟同学 发表于 2015-12-1 16:51
我用的GD150,我也无语了,不折腾了。

额额,如果是150的那确实有点麻烦了,毕竟GD150的和st不太兼容,使用的是自己的固件库。对了,我认识有个GD的FAE你可以让他给你提供点帮助。他QQ是:2853951856
mumu3013 发表于 2015-12-3 11:26 | 显示全部楼层
菜鸟同学 发表于 2015-12-1 16:25
以为官方库要靠谱点!

用GD自己家的库函数就行,时钟选择一下,很简单的,
Ketose 发表于 2015-12-3 20:30 | 显示全部楼层
我用150挺好的啊。要用GD32自己的库。你用ST的库,当然有问题了。
perry_peng 发表于 2015-12-4 09:43 | 显示全部楼层
试试我写的代码,gd的库确实不靠谱,所以我只好参考datasheet自己写了。

官方的那个库太复杂了。我来个精简版的::lol, 使用内部HSI作为PLL时钟源,系统时钟输出为72MHz,

HSI = 8MHz,  HSI / 2 * 18 = 72MHz.  

GD32F150上测试OK。


  1. void System_Init (void)
  2. {
  3.   /* [31:26]      Reserved.
  4.      [25]      r  PLLSTB          PLL稳定标志, 0表示未稳定。
  5.      [24]      rw PLLEN    = 0,   PLL开关。
  6.      [23:20]      Reserved.
  7.      [19]      rw CKMEN    = 0,   关闭外部时钟(HSE) monitor.
  8.      [18]      rw HSEBPS   = 0,   Bypass HSE.
  9.      [17]      r  HSESTB          外部时钟(HSE)稳定标志, 0表示未稳定
  10.      [16]      rw HSEEN    = 0,   关闭外部时钟(HSE).
  11.      [15:8]    r  HSICALIB
  12.      [7:3]     rw HSIADJ
  13.      [2]          Reserved.
  14.      [1]       r  HSISTB          内部时钟(HSI)稳定标志, 0表示未稳定。
  15.      [0]       rw HSIEN           打开外部时钟(HSE).
  16.    */
  17.   RCC->GCCR = RCC_GCCR_HSIEN;                 // 启用内部8MHz RC oscillator。
  18.   while (!(RCC->GCCR & RCC_GCCR_HSISTB));     // 等待直到内部RC oscillator稳定。

  19.   /* [31]      rw PLLDV    = 0,   CK_OUT的输入分频系数CK_PLL divide by 2.
  20.      [30:28]   rw CKOUTDIV = 0,   CK_OUT的输出分频系数。
  21.      [26:24]   rw CKOUTSRC = 0,   CKOUT时钟输出PIN的输出频率(No clock selected).
  22.      [23:22]   rw USBPS    = 0,   USB时钟等于CK_PLL / 1.5
  23.      [27,21:18]rw PLLMF   = 0x12, PLL倍频系数是18x.
  24.      [17]      rw PLLPREDV = 0,   PLL时钟源选用HSE时钟(PLLSEL=1时有效).
  25.      [16]      rw PLLSEL   = 0,   PLL时钟源等于HSI时钟除2(8MHz / 2)
  26.      [15:14]   rw ADCPS    = 0,   ADC时钟等于CK_APB2 / 2.
  27.      [13:11]   rw APB2PS   = 0,   APB2时钟等于CK_AHB.
  28.      [10:8]    rw APB1PS   = 0,   APB1时钟等于CK_AHB.
  29.      [7:4]     rw AHBPS    = 0,   AHB时钟等于CK_SYS.
  30.      [3:2]     r  SCSS            System clock switch status(Read only).
  31.      [1:0]     rw SCS      = 0,   CK_SYS时钟来自CK_HSI
  32.    */
  33.   RCC->GCFGR = 0x808000C;

  34.   RCC->GCCR |= RCC_GCCR_PLLEN;                // 启用PLL。
  35.   while(!(RCC->GCCR & RCC_GCCR_PLLSTB));      // 等待PLL稳定。

  36.   RCC->GCFGR |= RCC_GCFGR_SCS_PLL;            // 切换CK_SYS时钟为CK_PLL
  37.   while ((RCC->GCFGR & RCC_GCFGR_SCSS) != RCC_GCFGR_SCSS_PLL);  // 等待切换完成。
  38. }

评分

参与人数 1威望 +4 收起 理由
菜鸟同学 + 4 赞一个!

查看全部评分

user110 发表于 2015-12-4 10:15 | 显示全部楼层
下面的代码是GDF3210x库里的,可以直接复制到GDF321x0的库中直接使用
/**
  * @brief  Set System clock frequency to 72MHz and configure AHB, APB1, and APB2 prescalers.
  * @NOTE   This function should be used only after reset.
  * @param  None
  * @retval None
  */
static void SetSysClockTo72HSI(void)
{
  /* 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) * 18 = 72 MHz */
    RCC->GCFGR &= (uint32_t)((uint32_t)~(RCC_GCFGR_PLLSEL | RCC_GCFGR_PLLMF));
    RCC->GCFGR |= (uint32_t)( RCC_GCFGR_PLLSEL_HSI_DIV2 | RCC_GCFGR_PLLMF18);

    /* 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)
    {
    }  
}
user110 发表于 2015-12-4 10:31 | 显示全部楼层
GDF3210x和GD32F20x的库中都有使用HSI配置系统时钟的代码,GDF321x0中没有,可能是因为GDF321x0的库做的比较早吧,不过可以直接把GDF3210x中关于使用HSI配置系统时钟的代码直接复制到GDF321x0的系统文件中,已经测试过可以直接使用。
1.png
2.png
zhuyjgh 发表于 2015-12-9 14:41 | 显示全部楼层
用GD的库吧,再看一下用户手册时钟那部分,配置应该没问题的,
vivilzb1985 发表于 2015-12-10 14:21 | 显示全部楼层
这个你在设计的时候需要多注意下的。
vivilzb1985 发表于 2015-12-10 14:21 | 显示全部楼层
另外时钟的是比较高的,没有你说的那么糟糕的,最高都可以达到108MHz的。
shenmu2012 发表于 2015-12-10 15:03 | 显示全部楼层
怎了,楼主,是你在设计的时候没注意啥细节上的问题的吧。
angerbird 发表于 2015-12-13 17:55 | 显示全部楼层
这个多请教已经用过该芯片的工程师的吧。
zhengbo7hui 发表于 2015-12-13 20:23 | 显示全部楼层
不会吧,官网说是比STM1系列要高一个级别
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

707

帖子

9

粉丝
快速回复 在线客服 返回列表 返回顶部