问答

汇集网友智慧,解决技术难题

21ic问答首页 - 不用外部晶振,怎么使APM32F051C8内部HSI 8M时钟倍频到48M

单片机

不用外部晶振,怎么使APM32F051C8内部HSI 8M时钟倍频到48M

rainchen03992022-08-06
之前玩了GD32的单片机,它内部时钟在system文件中有个语句直接选#define __SYSTEM_CLOCK_72M_PLL_IRC8M_DIV2    (uint32_t)(72000000),内部8M时钟倍频到72M,
APM32的system文件中没有可选项,要不只能用内部8M,要不重新设置寄存器;按照STM32使用内部HSI时钟代码改了半天,没改对啊,有用过得朋友发个代码看看额;
回答 +关注 6
3476人浏览 9人回答问题 分享 举报
9 个回答
  • 设置好倍频系数
  • lajfda001 发表于 2022-8-16 10:18
    在不使用外部晶振的情况下,总是感觉时间不是很准的。

    肯定是外部晶振比较准的,HSI一般有±1%的误差,数据手册里有体现
  • 俺也感觉不用外部晶振时间不准
  • 谢谢各位回复,其实蛮简单的,根据他本身的外部48M的程序改一下就可以了,新手上路,谢谢各位

    #elif defined SYSTEM_CLOCK_48M_PLL_IRC8M_DIV2

    static void SystemClock48M_IRC8M(void)
    {
        uint32_t i;
       
        RCM->CTRL1_B.HSIEN= BIT_SET;               // 使能高速内部时钟 //
       
        for (i = 0; i < HSI_STARTUP_TIMEOUT; i++) //等待内部时钟稳定//
        {
            if (RCM->CTRL1_B.HSIRDY**)
            {
                break;
            }
        }
        if (RCM->CTRL1_B.HSIRDY**)
        {
            FMC->CTRL1_B.PBEN = BIT_SET;        // 使能预取缓存区 //
            
            FMC->CTRL1_B.WS = 1;                // Flash 1 等待一个时钟周期 //

            RCM->CFG1_B.AHBPSC= 0X00;           // HCLK = SYSCLK AHB时钟不分频 //

            RCM->CFG1_B.APB1PSC = 0X00;         // PCLK = HCLK APB1时钟不分频//

            RCM->CFG1_B.PLLSRCSEL = 0;          // HSICLK 2分频后为PLL时钟源//
            
            RCM->CFG1_B.PLLMULCFG = 10;          // PLL倍频系数为12 //

            RCM->CTRL1_B.PLLEN = 1;             // 使能 PLL //

            while (RCM->CTRL1_B.PLLRDY** == BIT_RESET);// 等待PLL稳定 //

            RCM->CFG1_B.SCLKSEL = 2;            // 选择PLL为系统时钟源 //

            while (RCM->CFG1_B.SCLKSWSTS!= 0x02);// 等待PLL被系统确认为时钟源 //
        }
    }
  • 在不使用外部晶振的情况下,总是感觉时间不是很准的。
  • 设置好倍频系数
  • 配置为内部HSI,然后设置倍频系数就可以了啊。
  • 建议官方例程,不要太依赖某T
  • 不能兼容ST的代码的

您需要登录后才可以回复 登录 | 注册