STM32库函数自带外部8M晶振的初始化吗,如果不是,请帮我写一份配置外部8MHz晶振的代码
时间: 2024-03-17 10:45:02 浏览: 20
STM32库函数并没有默认的外部8MHz晶振初始化函数,需要手动配置。以下是配置外部8MHz晶振的代码:
```c
#include "stm32f10x.h"
void SystemClock_Config(void);
int main(void)
{
/* 初始化系统时钟 */
SystemClock_Config();
/* 程序其它部分 */
while(1)
{
/* 主循环 */
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/* 启用外部8MHz晶振 */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
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)
{
/* 初始化时钟失败 */
while(1);
}
/* 配置系统时钟为PLL */
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK;
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)
{
/* 初始化时钟失败 */
while(1);
}
}
```
在以上代码中,通过`RCC_OscInitStruct`结构体配置外部8MHz晶振,并且将其作为PLL时钟的输入源。然后通过`RCC_ClkInitStruct`结构体将系统时钟配置为PLL时钟。请注意,以上代码使用了HAL库的函数。如果你使用的是标准库,需要对应修改。