STM32最小系统选择主频晶振和分频的作用分别是什么
时间: 2023-11-08 21:40:36 浏览: 142
选择主频晶振是为了确定微控制器的工作频率,它决定了微控制器内部各个模块的时钟频率,直接影响到系统的稳定性和运行速度。一般来说,主频振荡器的频率越高,系统的运行速度也就越高,但同时也会增加功耗和成本。
分频器是用来将主频振荡器的信号分频的,它可以将主频分频到各个模块所需的时钟频率,以满足不同模块的时钟需求。例如,串口通信需要的时钟频率相对较低,可以通过分频器将主频分频到合适的频率;而定时器、ADC等模块需要的时钟频率相对较高,可以通过分频器将主频分频得更少,以提高时钟频率。因此,分频器的作用在于调整微控制器内部各个模块的时钟频率,以满足不同模块的时钟需求。
相关问题
STM32 换晶振改主频
STM32系列微控制器通常采用内部时钟系统,其中包括一个用于调整主频的晶振( crystals 或陶瓷 resonators)。改变主频主要是通过配置片上复位后的时钟源选择寄存器,比如 HSE(高速外部晶体振荡器)、HSI(内部高速 RC 振荡器)或 LSI(低速内部 RC 振荡器)。
1. **更换晶振**:
- 首先确定新晶振的频率。STM32支持多种标准频率如8MHz、16MHz、32MHz等,如果换用了不同频率的晶振,需要相应调整配置。
2. **设置时钟源**:
- 在STM32 HAL库中,通过`RCC_OscInitTypeDef`结构体配置时钟源,选择HSE作为系统时钟源(SysClk),并设置分频系数。例如,如果你的新晶振是32MHz,可能会设置分频为8,即SysClk = HSE / 8 = 4MHz。
3. **配置SYSCLK**:
- 使用`HAL_RCC_SYSCLKConfig()`函数,将配置好的时钟源传递给系统时钟生成器,它会计算出实际的主频。
4. **设置AHB/APBx时钟**:
- 根据应用需求,可能还需要调整AHB总线(控制其他外设的总线)或APBx(如APB1、APB2,分别连接到内核和外设)的时钟。
5. **验证更改**:
- 确认通过`HAL_RCC_GetSystemClockFreq()`获取的实际主频是否符合预期。
stm32G070单片机,使用外部8MHz晶振,配置系统主频为48MHz
STM32G070是一款基于ARM Cortex-M0+内核的低功耗微控制器,它属于STM32 G0系列,适合于电池供电的物联网应用。当使用外部8MHz晶体振荡器作为系统的时钟源,并将系统主频配置为48MHz,需要按照以下步骤进行:
1. **时钟源配置**:
- 首先,在STM32的头文件(如`stm32g0xx_hal_conf.h`)中启用HSE(High-Speed External Oscillator)外设。这通常涉及设置相关的GPIO脚作为晶振输入,并配置HAL库中的时钟管理API。
```c
#define HSE_VALUE 8000000UL // 设置8MHz晶振的实际频率
HAL_RCC_OscConfig(&RCC_OscInitStruct);
```
2. **时钟树配置**:
- 调整时钟分频器,例如通过`HAL_RCC_ClockConfig()`函数配置System Clock(HCLK)和APB1时钟(PCLK1)的预分频因子。一般选择预分频因子2,以便从48MHz得到24MHz给APB1。
```c
RCC_OscInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1;
RCC_OscInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // HCLK = SYSCLK / 1
RCC_OscInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // PCLK1 = HCLK / 2
HAL_RCC_ClockConfig(&RCC_OscInitStruct, FLASH_LATENCY_0);
```
3. **启用系统时钟**:
- 最后一步是启用新的系统时钟配置,并等待时钟稳定。
```c
if (HAL_RCC_ClockInit(&RCC_OscInitStruct) != HAL_OK)
{
/* Initialization Error */
}
```
阅读全文