【GD32开发学习】三、系统时钟选择配置

文章目录


前言

准备

1、GD32F系列开发版,我使用的事F427R-START开发版

2、安装有Keil的电脑,当前keil版本为v5.31.0.0


一、时钟树

二、配置步骤

1、时钟初始化配置过程,主要先配置和初始化RCU_CTL和RCU_CFG0两个寄存器

寄存器内容如下,具体介绍请查看芯片数据手册

 

void SystemInit (void)
{
    /* FPU settings */
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access */
#endif
    /* Reset the RCU clock configuration to the default reset state */
    /* 开始先使能内部16M时钟 */
    RCU_CTL |= RCU_CTL_IRC16MEN;

    /*CK_AHB分频(CK_AHB = CK_SYS/4,但是不懂为什么先2分频再4分配)*/
    RCU_MODIFY

    /* 选择 CK_IRC16M 时钟作为 CK_SYS 时钟源 */
    RCU_CFG0 &= ~RCU_CFG0_SCS;
    
    /* 锁相环PLL关闭, 禁止高速时钟(HXTAL)时钟监视器 、关闭外部高速时钟HXTAL */
    RCU_CTL &= ~(RCU_CTL_PLLEN | RCU_CTL_CKMEN | RCU_CTL_HXTALEN);

    /* 禁止HXTAL旁路模式 */
    RCU_CTL &= ~(RCU_CTL_HXTALBPS);
    
    /* 复位RCU_CFG0寄存器(即内部16M作为时钟源,AHB、APB1、APB2等不分频)  */
    RCU_CFG0 = 0x00000000U;

    /* 等待内部高速时钟 IRC16M 作为系统时钟*/
    while(0 != (RCU_CFG0 & RCU_SCSS_IRC16M)){
    }

    /* 复位PLL寄存器(0x24003010U) */
    RCU_PLL = 0x24003010U;

    /* 禁用中断 */
    RCU_INT = 0x00000000U;
         
    /* 配置系统时钟源, PLL 倍频器 和分频因子,AHB/APBx 预分频器 、flsh设置*/
        
    system_clock_config();
}

总的来说就是SystemInit就是先初始化好内部高速时钟作为时钟源,然后再根据需求配置输出对应时钟

system_clock_200m_25m_hxtal()函数把外部25M高速时钟配置成200MCK_SYS时钟输出

static void system_clock_200m_25m_hxtal(void)
{
    uint32_t timeout = 0U;
    uint32_t stab_flag = 0U;
    
    /* 使能 HXTAL */
    RCU_CTL |= RCU_CTL_HXTALEN;

    /* 等待外部高速时钟稳定,超时退出或者判断时钟稳定则退出等待 */
    do{
        timeout++;
        stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB);
    }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout));

    /* 如果时钟还没有稳定说明时钟异常,则在这里死循环 */
    if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){
        while(1){
        }
    }
    /* 电源管理单元时钟使能 */     
    RCU_APB1EN |= RCU_APB1EN_PMUEN;
	
	/* LDO电压选择, 输出高电压模式 */
    PMU_CTL |= PMU_CTL_LDOVS;

    /* 不分频,AHB = SYSCLK,CK_SYS = CK_AHB (这里最大200M,不同的型号不一样) */
    RCU_CFG0 |= RCU_AHB_CKSYS_DIV1;
    /* APB2 = AHB/2 则这里最大 100M*/
    RCU_CFG0 |= RCU_APB2_CKAHB_DIV2;
    /* APB1 = AHB/4 则这里最大 50M*/
    RCU_CFG0 |= RCU_APB1_CKAHB_DIV4;

    /* Configure the main PLL, PSC = 25, PLL_N = 400, PLL_P = 2, PLL_Q = 9 */ 
	/* 配置PLLSEL选择HXTAL外部高速时钟作为PLL时钟源、
		配置 预分频器 PSC 分频系数为25,作为PLL VCO的输入时钟,如果外部晶振是8或12M晶振的话需改
		配置倍频因子 PLL_N = 400,输出频率分频系数PLL_P = 2, 输出频率的分频系数 PLL_Q = 9	
		根据公式 CK_PLLP = 25/25*400/2 = 200  */
    RCU_PLL = (25U | (400U << 6U) | (((2U >> 1U) - 1U) << 16U) |
                   (RCU_PLLSRC_HXTAL) | (9U << 24U));

    /* 使能PLL */
    RCU_CTL |= RCU_CTL_PLLEN;

    /* 等待PLL稳定 */
    while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){
    }
    
    /*在高频状态下,电源管理单元使能高驱动模式 */
    PMU_CTL |= PMU_CTL_HDEN;
    while(0U == (PMU_CS & PMU_CS_HDRF)){
    }
    
    /* 将LDO切换到高驱动模式 */
    PMU_CTL |= PMU_CTL_HDS;
    while(0U == (PMU_CS & PMU_CS_HDSRF)){
    } 
    
    /* 清空SCS寄存器,再配置SCS寄存器把CK_PLLP 作为系统时钟CK_SYS的时钟源 */
    RCU_CFG0 &= ~RCU_CFG0_SCS;
    RCU_CFG0 |= RCU_CKSYSSRC_PLLP;

    /* 等待选择 CK_PLLP 时钟作为 CK_SYS 时钟源 的状态切换完成 */
    while(0U == (RCU_CFG0 & RCU_SCSS_PLLP)){
    }
}

注意,这个函数是以25M晶振配置,如果外部高速晶振接的不是25M有没有对应的配置函数,需要自己修改PSC的系数,如 外部晶振如果接的是 12M,则PSC改为12


总结

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在Keil IDE中配置GD32开发环境需要按照以下步骤进行。首先,确保你已经安装了Keil IDE,安装过程中也选择GD32系列的设备支持。安装完成后,打开Keil IDE。 第一步是选择工程模板,点击“Project”菜单,选择“New Project”。在弹出的对话框中,选择你希望保存工程的目录,然后选择GD32系列的设备,点击“OK”。 第二步是添加源文件,右键点击工程名,选择“Add/Remove Files”。在弹出的对话框中,选择你需要添加的源文件,点击“Add”按钮,然后点击“OK”。 第三步是配置编译选项,点击“Project”菜单,选择“Options for Target”。在弹出的对话框中,选择“C/C++”选项,选择你需要的编译器选项,比如优化级别、浮点运算选项等。然后选择“Linker”选项,配置你的链接器选项,如堆栈大小、扩展RAM等。 第四步是配置调试器,点击“Project”菜单,选择“Options for Target”。在弹出的对话框中,选择“Debug”选项。在“Debug”选项卡中,选择你使用的调试器类型,比如J-Link或ST-Link。然后设置调试器的连接速度和目标设备参数。 最后,点击“Project”菜单,选择“Build”来编译你的工程。如果编译成功,你可以点击“Debug”按钮开始调试你的程序,或者点击“Flash”按钮将程序烧录到目标设备中。 以上就是在Keil IDE中配置GD32开发环境的基本步骤。根据具体的需求,你还可以进行更详细的配置,如添加库文件、配置中断向量表等。希望这个简要的手册能够帮助到你。 ### 回答2: keil是一款常用的嵌入式开发环境,可以用来开发各种嵌入式系统gd32是一款基于ARM Cortex-M3内核的微控制器。配置keil ide以适配gd32开发环境需要按照以下步骤进行操作。 1. 首先,需要从gd32官方网站下载并安装gd32库文件。这些库文件可以提供给keil ide使用,以支持gd32的开发工作。 2. 下载和安装keil ide。可以从keil官方网站得到该软件的安装包,并按照提示进行安装操作。 3. 与gd32库文件一起安装的还有一些gd32的示例工程。可以选择其中的一个示例工程,将其复制到本地目录中。 4. 打开keil ide,并选择“File”菜单中的“Open”选项,找到刚才复制的示例工程文件,打开该工程。 5. 在keil ide的工程管理器中,找到并打开工程的属性设置。选择“Options for Target”选项卡,可以对工程进行一些基本的配置。 6. 在“Target”选项卡中,选择正确的gd32目标设备,并设置其相关的参数,如时钟频率和存储器布局等。 7. 在“C/C++”选项卡中,将gd32库文件所在的路径添加到“Include Paths”中。 8. 在“Linker”选项卡中,将gd32库文件所在的路径添加到“Library Paths”中,并添加相应的库文件。 9. 完成上述配置后,点击“OK”按钮保存配置并退出属性设置。 10. 最后,编译和下载工程,即可在gd32开发板上运行测试。 以上是使用keil ide配置gd32开发环境的大致步骤,可以根据具体情况作适当调整。配置完成后,就可以使用keil ide来进行gd32开发工作了。 ### 回答3: Keil IDE是一款非常流行的嵌入式开发工具,用于编写和调试各种嵌入式系统的程序。GD32是一款基于ARM Cortex-M3或Cortex-M4内核的微控制器系列。为了在Keil IDE中配置GD32开发环境,我们可以按照以下步骤进行操作: 1. 首先,我们需要下载GD32的设备支持包(Device Support Pack,DSP),这个包包含了GD32系列微控制器的设备描述文件和驱动程序。 2. 下载并安装Keil IDE最新的版本。确保你选择了正确的版本,以便支持你所使用的GD32系列微控制器。 3. 安装Keil IDE后,启动软件。在菜单栏上找到“Project”选项,选择“New Project”来创建一个新的项目。 4. 在项目创建向导中,选择适合你的GD32芯片型号的模板。如果你的型号不在列表中,可以选择一个类似的型号。 5. 在项目创建向导中,选择一个合适的目标设备。这会根据你选择GD32芯片型号来设置项目的配置。 6. 设置项目的输出目录和名字,然后点击“Finish”来完成项目的创建。 7. 项目创建完成后,你将看到一个新的工程添加到Keil IDE的工程窗口中。在这个窗口中,你可以添加源文件、库文件等。 8. 在项目管理器中,右键单击“Target 1”并选择“Options for Target 'Target 1'”来配置目标设备的编译选项。 9. 在弹出的对话框中,你可以设置编译器的选项,连接器的选项,优化级别,调试器等。 10. 最后,点击“OK”来保存配置。然后,你可以通过点击工具栏上的“Build”按钮来编译你的项目。 通过按照上述步骤,你可以在Keil IDE中配置GD32开发环境,并开始编写和调试GD32的嵌入式程序。这样,你就可以利用Keil IDE和GD32来进行嵌入式系统开发工作了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值