HC32F46x工程->配置SystemClock系统时钟

删除Keil工程中mian.c文件中的无关注释,在SystemClock.c和SystemClock.h中添加如下代码框架

  配置系统时钟之前需要了解HC32F4x的系统时钟结构体和相关的配置函数

先看下时钟相关的头文件中有哪些结构体和枚举类型

系统时钟树如下所示:

 

 

 根据时钟树可知,系统时钟功能由以下几部分组成:

  一个外部高速振荡器

  一个外部低速振荡器

  两个 PLL 时钟

  一个内部高速振荡器

  一个内部中速振荡器

  一个内部低速振荡器

  一个 SWDT 专用内部低速振荡器

  时钟预分频器

  时钟多路复用和时钟门控电路

AHBAPB Cortex-M4 时钟都源自系统时钟,系统时钟的源可选择 6 个时钟源:

  1) 外部高速振荡器( XTAL
  2) 外部低速振荡器( XTAL32
  3MPLL 时钟( MPLL
  4) 内部高速振荡器( HRC
  5) 内部中速振荡器( MRC
  6) 内部低速振荡器( LRC

系统时钟配置步骤如下图所示:

在设置FLASH延时周期的时候根据系统时钟的大小根据下表来确定(本次系统时钟设置成200MHz所以等待周期设置为5个等待读周期)

至此系统时钟配置完成配置主要代码如下:

 

 

从代码中看到都会有红色波浪显示有错误,这是因为在工程中没有打开对应头文件的宏定义,对文件进行如下修改

 

 

 支持代码修改完成,将时钟初始化函数添加到主函数中,编译之后会有如下错误

 

 

 这些错误是什么原因造成的呢?

错误:..\driver\src\hc32f46x_efm.c(902): error:  #268: declaration may not appear after executable statement in block  错误表示声明不能出现在执行语句之后。

 

 

 至此系统时钟初始化代码添加完成,源代码如下所示:

 1 /**
 2  * @file SystemClock.c
 3  * @author your name (you@domain.com)
 4  * @brief 
 5  * @version 0.1
 6  * @date 2021-05-30
 7  * 
 8  * @copyright Copyright (c) 2021
 9  * 
10  */
11 #include "SystemClock.h"
12 void SystemClockConfig(void)
13 {
14     stc_clk_sysclk_cfg_t    stcSysClkCfg;
15     stc_clk_xtal_cfg_t      stcXtalCfg;
16     stc_clk_mpll_cfg_t      stcMpllCfg;
17 
18     MEM_ZERO_STRUCT(stcSysClkCfg);
19     MEM_ZERO_STRUCT(stcXtalCfg);
20     MEM_ZERO_STRUCT(stcMpllCfg);
21 
22     stcSysClkCfg.enHclkDiv  = ClkSysclkDiv1;  
23     stcSysClkCfg.enExclkDiv = ClkSysclkDiv2;  
24     stcSysClkCfg.enPclk0Div = ClkSysclkDiv1;  
25     stcSysClkCfg.enPclk1Div = ClkSysclkDiv2;  
26     stcSysClkCfg.enPclk2Div = ClkSysclkDiv4; 
27     stcSysClkCfg.enPclk3Div = ClkSysclkDiv4; 
28     stcSysClkCfg.enPclk4Div = ClkSysclkDiv2;  
29     CLK_SysClkConfig(&stcSysClkCfg);
30 
31     stcXtalCfg.enMode        = ClkXtalModeOsc;
32     stcXtalCfg.enDrv         = ClkXtalLowDrv;
33     stcXtalCfg.enFastStartup = Enable;
34     CLK_XtalConfig(&stcXtalCfg);
35     CLK_XtalCmd(Enable);
36 
37     stcMpllCfg.pllmDiv = 1;
38     stcMpllCfg.plln    = 100;
39     stcMpllCfg.PllpDiv = 2;
40     stcMpllCfg.PllqDiv = 2;
41     stcMpllCfg.PllrDiv = 2;
42     CLK_SetPllSource(ClkPllSrcXTAL);
43     CLK_MpllConfig(&stcMpllCfg);
44 
45     EFM_Unlock();
46     EFM_SetLatency(5ul);
47     EFM_Lock();
48 
49     CLK_MpllCmd(Enable);
50 
51     while(Set != CLK_GetFlagStatus(ClkFlagMPLLRdy));
52 
53     CLK_SetSysClkSource(CLKSysSrcMPLL);
54 }
 1 /**
 2  * @file SystemClock.h
 3  * @author your name (you@domain.com)
 4  * @brief 
 5  * @version 0.1
 6  * @date 2021-05-30
 7  * 
 8  * @copyright Copyright (c) 2021
 9  * 
10  */
11 #ifndef __SYSTEMCLOCK_H_
12 #define __SYSTEMCLOCK_H_
13 /* C binding of definitions if building with C++ compiler */
14 #ifdef __cplusplus
15 extern "C"
16 {
17 #endif
18 #include "hc32_ddl.h"
19 
20 void SystemClockConfig(void);
21 
22 #ifdef __cplusplus
23 }
24 #endif
25 #endif /* __SYSTEMCLOCK_H_ */

本次采用CMSIS DAP下载器,先在KEIL中设置参数如下:

 

 显示识别不到开发板

 

 修改一下位置的参数:

 

posted @ 2021-05-30 21:50  行者&无疆  阅读(832)  评论(0)    收藏  举报