一、用 AT32_Work_Bench 工具成生系统时钟代码,如下图:
二、在生成的代码中找到at32f421_wk_config.c文件,复制 wk_system_clock_config时钟函数到工程项目代替原来的时钟函数,我原来的工程不是AT32_Work_Bench 工具成生的,我只要这个时钟配置函数...
void system_clock_config(void) // wk_system_clock_config
{
/* reset crm */
crm_reset();
/* config flash psr register */
flash_psr_set(FLASH_WAIT_CYCLE_3);
/* enable lick */
crm_clock_source_enable(CRM_CLOCK_SOURCE_LICK, TRUE);
/* wait till lick is ready */
while(crm_flag_get(CRM_LICK_STABLE_FLAG) != SET)
{
}
/* enable hext */
crm_clock_source_enable(CRM_CLOCK_SOURCE_HEXT, TRUE);
/* wait till hext is ready */
while(crm_hext_stable_wait() == ERROR)
{
}
/* enable hick */
crm_clock_source_enable(CRM_CLOCK_SOURCE_HICK, TRUE);
/* wait till hick is ready */
while(crm_flag_get(CRM_HICK_STABLE_FLAG) != SET)
{
}
/* config pll clock resource */
crm_pll_config2(CRM_PLL_SOURCE_HEXT, 120, 1, CRM_PLL_FR_8);
/* enable pll */
crm_clock_source_enable(CRM_CLOCK_SOURCE_PLL, TRUE);
/* wait till pll is ready */
while(crm_flag_get(CRM_PLL_STABLE_FLAG) != SET)
{
}
/* config ahbclk */
crm_ahb_div_set(CRM_AHB_DIV_1);
/* config apb2clk */
crm_apb2_div_set(CRM_APB2_DIV_1);
/* config apb1clk */
crm_apb1_div_set(CRM_APB1_DIV_1);
/* enable auto step mode */
crm_auto_step_mode_enable(TRUE);
/* select pll as system clock source */
crm_sysclk_switch(CRM_SCLK_PLL);
/* wait till pll is used as system clock source */
while(crm_sysclk_switch_status_get() != CRM_SCLK_PLL)
{
}
/* disable auto step mode */
crm_auto_step_mode_enable(FALSE);
/* update system_core_clock global variable */
system_core_clock_update();
}
三、把函数名改一下,改成void system_clock_config(void) ,如上图已经改好了的。
四、在工程项目中找到at32F421_conf.h文件,在文件中找到下面这行代码,这行代码是更改外部晶振频率的,按你的晶振频率更改,晶振频率相同就不用改了。8000000代表8M。
#define HEXT_VALUE ((uint32_t)8000000)
————————————————
版权声明:本文为CSDN博主「dxaws123456」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dxaws123456/article/details/131917206
|