HSI HSE PCLK1 SYSCLK四个如何选择
时间: 2024-03-29 16:36:22 浏览: 22
HSI, HSE, PCLK1, SYSCLK 都是关于时钟的参数,其含义如下:
- HSI (High-Speed Internal):内部高速时钟,稳定性较差,但启动速度快,适用于低功耗应用。
- HSE (High-Speed External):外部高速时钟,稳定性较好,但启动速度慢,适用于高性能应用。
- PCLK1 (APB1 Peripheral Clock):APB1总线上的外设时钟,频率为SYSCLK的1/4或1/2。
- SYSCLK:系统时钟,控制整个系统的时序和节奏。
选择适当的时钟参数需要考虑多个因素,例如系统性能要求、功耗要求、外设接口要求等。一般情况下,可以按照以下原则进行选择:
- SYSCLK 频率应该尽量高,以提高系统性能。
- 如果系统对时钟的稳定性有较高要求,可以选择 HSE 作为 SYSCLK。
- 如果系统对功耗有较高要求,可以选择 HSI 作为 SYSCLK。
- PCLK1 的频率应该根据所接外设的要求进行选择,以保证外设正常工作。
相关问题
/** * @brief System Clock Configuration * @retval None */ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0};//定义结构体变量RCC_OscInitStruct RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};//定义结构体变量RCC_ClkInitStruct RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};//定义结构体变量PeriphClkInit /** Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV2; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.LSIState = RCC_LSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB busses 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(); } }
SystemClock_Config函数是用来配置系统时钟的。它执行了以下操作:
1. 初始化CPU、AHB和APB总线时钟。
2. 配置振荡器类型:使用LSI和HSE两种振荡器。
3. 配置HSE状态为旁路模式(BYPASS)。
4. 配置HSE预分频值为2。
5. 配置HSI状态为开启。
6. 配置LSI状态为开启。
7. 配置PLL状态为开启。
8. 配置PLL时钟源为HSE。
9. 配置PLL倍频因子为12。
10. 调用HAL_RCC_OscConfig函数配置时钟,并检查返回值是否为HAL_OK,如果不是则调用Error_Handler函数进行错误处理。
11. 初始化CPU、AHB和APB总线时钟。
12. 配置系统时钟源为PLL时钟。
13. 配置AHB时钟分频系数为1。
14. 配置APB1时钟分频系数为2。
15. 配置APB2时钟分频系数为1。
16. 调用HAL_RCC_ClockConfig函数配置时钟,并检查返回值是否为HAL_OK,如果不是则调用Error_Handler函数进行错误处理。
17. 配置外设时钟:配置ADC外设时钟分频系数为6。
18. 调用HAL_RCCEx_PeriphCLKConfig函数配置外设时钟,并检查返回值是否为HAL_OK,如果不是则调用Error_Handler函数进行错误处理。
这个函数的作用是根据具体的系统需求配置系统时钟,确保各个外设能够正常工作。
stm32f1 clock输出
STM32F1系列微控制器的时钟输出功能可通过RCC(Clock Control)寄存器进行配置。它使用了一个复杂的时钟系统,包含多个时钟源和分频器,以提供不同的时钟频率给各种模块和外设。
首先,我们需要选择适合的时钟源。主要的时钟源有HSI(高速内部时钟)、HSE(高速外部时钟)和PLL(锁相环)。HSI是内部RC振荡器提供的时钟源,一般为8MHz,适合用于低功耗应用。HSE则是外部晶振提供的时钟源,其频率范围在4MHz到16MHz之间,适合要求较高的应用。PLL是基于HSI或HSE时钟源的锁相环,在特定的倍频系数下可以提供更高的时钟频率。
接下来,我们可以通过设置RCC_CFGR寄存器来配置时钟输出的来源和分频器。主要的配置包括SYSCLK(系统时钟)、HCLK(高速时钟)、PCLK1(低速时钟1)和PCLK2(低速时钟2)。SYSCLK是系统总线的时钟,HCLK是CPU和外设总线的时钟,PCLK1和PCLK2则是外设总线的两个分频时钟。通过调整分频器结构可以得到不同的输出频率。
在配置完成后,可以通过RCC_CFGR寄存器读取到当前系统时钟频率。根据需要,可以将时钟输出连接到其他外设(例如SPI、USART等)的时钟输入引脚,以提供正确的时钟信号。
总而言之,STM32F1系列微控制器的时钟输出功能非常灵活和强大。使用合适的时钟源和分频器配置,我们可以满足不同应用场景下对于时钟频率的要求。