再次更改使SYSCLK的频率为36MHz
时间: 2024-02-23 13:03:23 浏览: 16
好的,我明白了。您的要求是更改SYSCLK的频率为36MHz。为了实现这个目标,我们需要进行以下步骤:
1. 首先,我们需要打开STM32的时钟配置。您可以使用代码类似于以下示例来实现:
```c
RCC->CR |= RCC_CR_HSION; // 开启内部高速时钟
while (!(RCC->CR & RCC_CR_HSIRDY)); // 等待时钟稳定
// 设置PLL
RCC->CFGR |= RCC_CFGR_PLLSRC_HSI_DIV2; // 设置PLL时钟源为HSI/2
RCC->CFGR |= RCC_CFGR_PLLMUL9; // 设置PLL倍频系数为9(得到36MHz)
// 使能PLL
RCC->CR |= RCC_CR_PLLON;
while (!(RCC->CR & RCC_CR_PLLRDY)); // 等待PLL稳定
// 设置系统时钟为PLL时钟
RCC->CFGR |= RCC_CFGR_SW_PLL;
while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL); // 等待系统时钟切换完成
```
2. 然后,我们需要配置FLASH访问时间以适应更高的系统时钟频率。您可以使用代码类似于以下示例来实现:
```c
FLASH->ACR |= FLASH_ACR_LATENCY_1; // 配置FLASH访问时间为1个时钟周期
```
3. 最后,我们需要重新配置所有外设的时钟。这些外设包括USART、SPI、I2C等等。您可以使用代码类似于以下示例来实现:
```c
// 重新配置USART时钟
RCC->APB2ENR |= RCC_APB2ENR_USART1EN; // 使能USART1时钟
USART1->BRR = 0x1D4C; // 设置波特率为115200
// 重新配置SPI时钟
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; // 使能SPI1时钟
SPI1->CR1 |= SPI_CR1_BR_0 | SPI_CR1_BR_1; // 设置SPI时钟分频系数为8
// 重新配置I2C时钟
RCC->APB1ENR |= RCC_APB1ENR_I2C1EN; // 使能I2C1时钟
I2C1->CR2 |= 36; // 设置I2C时钟频率为36MHz
```
完成以上步骤后,您的STM32的SYSCLK频率应该已经成功更改为36MHz了。