STM32F103 外部晶振设置代码
时间: 2024-09-05 11:03:57 浏览: 152
stm32F103单片机无源晶振不起振排除问题
STM32F103系列微控制器通常需要通过外部晶体振荡器来提供精确的系统时钟。以下是设置外部8MHz晶振的基本步骤以及对应的C语言代码示例:
1. 首先,你需要配置GPIO管脚作为晶振的输入端口。例如,如果你选择PA9和PA10作为XTAL1和XTAL2,则可以这样做:
```c
// 定义GPIO口映射
GPIO_InitTypeDef GPIO_InitStructure;
// 设置GPIOA为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // Push-Pull Output
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
```
2. 接下来,连接外部晶振到相应的管脚上,并配置相应的时钟源(如PLL)使之锁定外部晶振频率。这通常涉及到系统时钟配置文件(SysTickConfig.h、SystemClock_Config.c等),其中可能包括以下代码:
```c
// 配置 PLL (如果使用)
RCC_PLLInitTypeDef RCC_PLLInitStruct;
RCC_PLLInitStruct.PLLSource = RCC_PLLSOURCE_HSE; // 使用HSE作为源
RCC_PLLInitStruct.PLLM = 8; // 分频因子 M
RCC_PLLInitStruct.PLLN = 336; // 锁定倍频系数 N
RCC_PLLInitStruct.PLLP = RCC_PLLPRE_DIV2; // 输出分频 P
RCC_PLLInitStruct.PLLQ = 7; // 锁定分频 Q
HAL_RCC_PLLConfig(&RCC_PLLInitStruct); // 初始化并激活 PLL
HAL_RCC_OscConfig(RCC_OscInitStruct); // 开启 HSE 和 PLL
// 启动时钟发生器
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5); // 设置时钟频率(比如 72 MHz 或者 144 MHz)
```
这里假设你已经初始化了`RCC_OscConfig`结构体和`RCC_ClkInitStruct`,它们用于设置时钟源和最终系统频率。
阅读全文