在MM32F5375的用户手册中描述:“MM32F5370 微控制器搭载了由安谋科技授权的 ARM®v8-M 架构“星辰”STAR-MC1 (兼 容 Cortex®-M33)处理器,内置 L1 ICache、DCache,同时具备高性能和低功耗的特点, 最高工作频率可达 180MHz”,下面分享一下如何修改配置,使其达到最高运行频率。
1、需要用外HSE,那么首先得找到HSE的晶振频率是多少,在开发板原理图中,我找到的他的外设时钟为12M:
2、在mm32f5370.h中定义有HSE的时钟的宏定义:
#ifdef CUSTOM_HSE_VAL #define HSE_VALUE (12000000U) /*!< Value of the External oscillator in Hz. */ #else #define HSE_VALUE (8000000U) /*!< Value of the External oscillator in Hz. */ #endif
以上代码可见,需要在编译的宏定义中,定义CUSTOM_HSE_VAL这个开关。
所以,我在makefile里面添加宏定义:
# C源文件宏定义 C_DEFS += -DUSE_STDPERIPH_DRIVER -DCUSTOM_HSE_VAL
3、在官方提供的程序system_mm32f5370.c中对工程的时钟进行配置,在函数:SetSysClockToDefine中使用宏定义SYSCLK_HSE_XXMHz进行条件编译。而SYSCLK_HSE_XXMHz是定义时钟运行频率,在程序里可以自动计算出分频系数:
我修改了
#define SYSCLK_HSE_XXMHz 180000000 /* default:150MHz, can be set as 72000000 or others */
然后编译,并在配置好后,使用频率打印信息来展示当前的运行频率:
/*********************************************************************************************************************** * @brief Print information * @note none * @param none * @retval none *********************************************************************************************************************/ void PLATFORM_PrintInfo(void) { RCC_ClocksTypeDef RCC_Clocks; printf("\r\nBOARD : EVB-F5375"); printf("\r\nMCU : MM32F5375G8PV"); printf("\r\n"); switch (RCC->CFGR & RCC_CFGR_SWS_Msk) { case 0x00: printf("\r\nHSI used as system clock source"); break; case 0x04: printf("\r\nHSE used as system clock source"); break; case 0x08: if (RCC->PLL1CFGR & RCC_PLL1CFGR_PLL1SRC_Msk) { printf("\r\nPLL (clocked by HSE) used as system clock source"); } else { printf("\r\nPLL (clocked by HSI) used as system clock source"); } break; case 0x0C: printf("\r\nLSI used as system clock source"); break; default: break; } RCC_GetClocksFreq(&RCC_Clocks); printf("\r\n"); printf("\r\nSYSCLK Frequency : %7.3f MHz", (double)RCC_Clocks.SYSCLK_Frequency / (double)1000000.0); printf("\r\nHCLK Frequency : %7.3f MHz", (double)RCC_Clocks.HCLK_Frequency / (double)1000000.0); printf("\r\nPCLK1 Frequency : %7.3f MHz", (double)RCC_Clocks.PCLK1_Frequency / (double)1000000.0); printf("\r\nPCLK2 Frequency : %7.3f MHz", (double)RCC_Clocks.PCLK2_Frequency / (double)1000000.0); printf("\r\n"); }
【配置运行效果】
编译下载后,开启printf,可以观察到打印出来的频率与设置的一致:
【总结】
在官方提供的源码中,可以方便的修改宏定义而实现指定运行频率的设定。