STM32F1 用标准库设置外部晶振CPU频率64M
时间: 2024-10-17 07:08:50 浏览: 80
STM32F1系列微控制器使用标准库配置外部晶振来确定CPU的工作频率通常涉及以下几个步骤:
1. **晶振选择**: 首先需要一个合适的外部晶体振荡器,比如64MHz的石英晶体。STM32F1支持多种晶振频率,如8MHz、16MHz、32MHz等。对于64MHz,你需要确保选用与之匹配的晶振。
2. **时钟源配置**:
- 打开头文件`stm32f1xx_hal_conf.h`,找到`__HAL_RCC_EXTERNAL Crystal Oscillator Configuration`部分,并启用外部晶体振荡器。
- 如果使用的是HSI (内部高速谐振器),则需禁用HSI并配置好外接晶振的相关寄存器(例如`RCC_APB2PeriphClockCmd(RCC_APB2Periph_HSI, ENABLE)` 和 `RCC_OscInitTypeDef`结构)。
3. **启动PLL**:
- 初始化系统时钟管理器 (`RCC_OscInitTypeDef`),设置 PLL源为外部晶体振荡器,然后激活PLL。
```c
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; // HSE作为PLL输入
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; // 使用外设HSE
RCC_OscInitStruct.PLL.PLLM = RCC_PLL_MUL_8; // 预分频乘数
RCC_OscInitStruct.PLL.PLLN = 72; // 主时钟倍频系数
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; // 锁定频率的分频比例
RCC_OscInitStruct.PLL.PLLQ = 2; // 软件配置的时钟分频系数
if HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK {
// 处理错误
}
```
4. **时钟分频**:
- 启动时钟树生成器 (`RCC_ClkInitTypeDef`) 并配置适当的时钟分频因子,例如 `RCC_SYSCLK_Div1` 设置为1(无分频),`RCC_APB1PeriphClockCmd(RCC_APB1Periph_ALL, ENABLE);` 和 `RCC_APB2PeriphClockCmd(RCC_APB2Periph_ALL, ENABLE);` 分别打开APB1和APB2总线时钟。
5. **确认时钟速度**:
使用`HAL_RCC_GetSysClockFreq()`函数获取实际的系统主时钟频率,应该接近或等于64MHz。
```c
uint32_t SystemCoreClock = HAL_RCC_GetSysClockFreq();
```
阅读全文