打印

GD32F130C8T6使用HSI时倍频到48MHz时钟不正常

[复制链接]
2835|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yuzemin1987|  楼主 | 2015-4-13 15:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
之前是用的STM32F030C8T6用HSI倍频到48MHz都很正常,但是用GD32F130C8T6的HSI倍频到48MHz时,发现它的时钟异常。通过PWM设置成20KHz输出验证发现频率为10.7Khz。很奇怪的是PLL倍频设为6倍时,输出的频率是10KHz。只要设置成6倍以上是,就都变成10.7KHz输出。以下是时钟配置代码。
//#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_HSI         48000000       

static void Set_SysClock(void)
{
#ifdef SYSCLK_FREQ_HSE
    Set_SysClockToHSE();
#elif defined SYSCLK_FREQ_24MHz
    Set_SysClockTo24();
#elif defined SYSCLK_FREQ_36MHz
    Set_SysClockTo36();
#elif defined SYSCLK_FREQ_48MHz
    Set_SysClockTo48();
#elif defined SYSCLK_FREQ_56MHz
    Set_SysClockTo56();  
#elif defined SYSCLK_FREQ_72MHz
    Set_SysClockTo72();
#else
        Set_SysClockToHSI();
#endif
}

static void Set_SysClockToHSI (void)
{
        __IO uint32_t StartUpCounter = 0, HSIStatus = 0;
  
        /* SYSCLK, HCLK, PCLK configuration ----------------------------------------*/
        /* Enable HSI */   
        RCC->GCCR |= ((uint32_t)RCC_GCCR_HSIEN);

        /* Wait till HSI is ready and if Time out is reached exit */
        do
        {
                HSIStatus = RCC->GCCR & RCC_GCCR_HSISTB;
                StartUpCounter++;  
        } while((HSIStatus == 0) && (StartUpCounter != HSI_STARTUP_TIMEOUT));

        if ((RCC->GCCR & RCC_GCCR_HSISTB) != RESET)
        {
                HSIStatus = (uint32_t)0x01;
        }
        else
        {
                HSIStatus = (uint32_t)0x00;
        }  

        if (HSIStatus == (uint32_t)0x01)
        {
                /* AHB = SYSCLK not divided */
        RCC->GCFGR |= (uint32_t)RCC_GCFGR_AHBPS_DIV1;
        
        /* APB2 = AHB not divided */
        RCC->GCFGR |= (uint32_t)RCC_GCFGR_APB2PS_DIV1;
        
        /* APB1 = AHB not divided */
        RCC->GCFGR |= (uint32_t)RCC_GCFGR_APB1PS_DIV1;

                /* PLL configuration = HSI/2 * 12 = 48 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_PLLMF12);
            
                /* 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)RCC_GCFGR_SCSS_PLL)
                {
                }
        }
        else
        { /* If HSE fails to start-up, the application will have wrong clock
         configuration. User can add here some code to deal with this error */
        }  
}
沙发
yuzemin1987|  楼主 | 2015-4-13 16:23 | 只看该作者
我怀疑是130这个芯片PLL模块有问题。这个130芯片最高频率为48MHz,如果是用外部晶振的话,8MHz正好是倍频6倍。所以这个PLL模块是不是只能倍频到6倍

使用特权

评论回复
板凳
cdshkf| | 2015-4-13 22:51 | 只看该作者
请联系代理商申请最新版的130的样片。

使用特权

评论回复
地板
GONGO| | 2015-4-14 09:28 | 只看该作者
楼上说的对,你重新申请样片吧!
你拿到的是比较早的,PLL 频率 锁定了,使用 HSI 不允许超过 24 Mhz。
你可以测一下 MCO 的 system clk out

使用特权

评论回复
5
sunmeat| | 2015-4-17 08:05 | 只看该作者
GD的芯片这么蛋疼,勘误手册也没有,悲剧。

使用特权

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

本版积分规则

2

主题

7

帖子

0

粉丝