概述
参考《STM32中文参考手册_V10》,研究CubeMX中有关RCC的配置。
RCC主要指stm32f103的时钟配置,主要系统时钟SYSCLK设置和3条总线时钟设置——AHB、APB2、APB1。
AHB分频因子决定HCLK;
APB2分频因子决定PCLK2;
APB1分频因子决定PCLK1;
一般来说,标准的时钟配置为:
PCLK2=HCLK=SYSCLK=PLLCLK=72MHz
PCLK1=HCLK/2=36MHz
一、配置参数
HSE:
HSE是高速的外部时钟信号,可以由两种时钟源产生:HSE外部晶体/陶瓷谐振器;HSE用户外部时钟。
最常用的外部晶振是8MHz的无源晶振,这里选择Crystal/Geramic Resonator。
LSE:
LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器,一般应用中不太采用。
Master Clock Output:
用来选择是否使能 MCO引脚时钟输出(PA8引脚的复用功能)。
HSI Calibration Value:
对应时钟控制寄存器RCC_CR中的HSITRIM[4:0]位,对内部高速时钟进行调整,其值被叠加在HSICAL[5:0]上,目的是让用户可以输入一个调整数值,根据电压和温度的变化调整内部HSI RC振荡器的频率。默认值为16。
二、生成代码
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;// 使能HSE
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
{
Error_Handler();
}
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
Error_Handler();
}
}
HSE Startup Timout Value(ms)设置为100:
#if !defined (HSE_STARTUP_TIMEOUT)
#define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */
#endif /* HSE_STARTUP_TIMEOUT */
LSE Startup Timout Value(ms)设置为5000:
#if !defined (LSE_STARTUP_TIMEOUT)
#define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */
#endif /* LSE_STARTUP_TIMEOUT */
Prefetch Buffer设置为Enable:
#define __HAL_FLASH_PREFETCH_BUFFER_ENABLE() (FLASH->ACR |= FLASH_ACR_PRFTBE)
三、小结
通过CubeMX配置时钟树,可以较大地简化程序开发过程,尤其是在“Clock Configuration”中,通过图形化方法,可以很方便地对stm32的时钟树进行设置,还是很好用的。
最后
以上就是正直大象为你收集整理的尝试使用CubeMX做stm32开发之八:RCC配置一、配置参数二、生成代码三、小结的全部内容,希望文章能够帮你解决尝试使用CubeMX做stm32开发之八:RCC配置一、配置参数二、生成代码三、小结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复