HC32F46x工程->配置SystemClock系统时钟
删除Keil工程中mian.c文件中的无关注释,在SystemClock.c和SystemClock.h中添加如下代码框架

配置系统时钟之前需要了解HC32F4x的系统时钟结构体和相关的配置函数
先看下时钟相关的头文件中有哪些结构体和枚举类型
系统时钟树如下所示:

根据时钟树可知,系统时钟功能由以下几部分组成:
一个外部高速振荡器
一个外部低速振荡器
两个 PLL 时钟
一个内部高速振荡器
一个内部中速振荡器
一个内部低速振荡器
一个 SWDT 专用内部低速振荡器
时钟预分频器
时钟多路复用和时钟门控电路
AHB、 APB 和 Cortex-M4 时钟都源自系统时钟,系统时钟的源可选择 6 个时钟源:
1) 外部高速振荡器( XTAL)
2) 外部低速振荡器( XTAL32)
3) MPLL 时钟( 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中设置参数如下:

显示识别不到开发板

修改一下位置的参数:


浙公网安备 33010602011771号