这里简单演示下打印输出 SystemCoreClock 的值,我用的 MCU 为 at32f413,最大频率为 200MHz。
我的配置:
配置代码
时钟的配置可以用 AT32
官方提供的时钟配置工具(AT32_New_Clock_Configuration.exe
)来生成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| void system_clock_config(void) { crm_reset();
crm_clock_source_enable(CRM_CLOCK_SOURCE_HEXT, TRUE);
while(crm_hext_stable_wait() == ERROR) { }
crm_pll_config(CRM_PLL_SOURCE_HEXT, CRM_PLL_MULT_25, CRM_PLL_OUTPUT_RANGE_GT72MHZ);
crm_clock_source_enable(CRM_CLOCK_SOURCE_PLL, TRUE);
while(crm_flag_get(CRM_PLL_STABLE_FLAG) != SET) { }
crm_ahb_div_set(CRM_AHB_DIV_1);
crm_apb2_div_set(CRM_APB2_DIV_2);
crm_apb1_div_set(CRM_APB1_DIV_2);
crm_auto_step_mode_enable(TRUE);
crm_sysclk_switch(CRM_SCLK_PLL);
while(crm_sysclk_switch_status_get() != CRM_SCLK_PLL) { }
crm_auto_step_mode_enable(FALSE);
system_core_clock_update(); }
|
system_core_clock_update();
函数会更新变量 system_core_clock
的值。SystemCoreClock 的值就是 system_core_clock
。
1
| #define SystemCoreClock system_core_clock
|
printf 输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| int main(void) { system_clock_config();
xtp_gpio_init(); xtp_usart_init(); xtp_create_task(); printf("SystemCoreClock: %d", SystemCoreClock); vTaskStartScheduler();
while (1) { } }
|