MM32SPIN06PF 写一个例子 使用HSE外部晶振作为系统主时钟
时间: 2024-03-17 08:44:28 浏览: 159
好的,以下是一个使用HSE外部晶振作为系统主时钟的MM32SPIN06PF例子:
```c
#include "mm32.h"
int main(void)
{
// 使能外部晶振并设置为主时钟源
RCC_HSEConfig(RCC_HSE_ON);
RCC_WaitForHSEStartUp();
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLKConfig(RCC_HCLK_Div1);
// 设置PLL时钟源
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6);
// 使能PLL
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
// 设置系统时钟为PLL时钟
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
// 配置时钟中断
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = RCC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
RCC_ClearFlag();
RCC_ITConfig(RCC_IT_HSERDY | RCC_IT_PLLRDY | RCC_IT_CSS, ENABLE);
// 其他初始化操作
// ...
while(1)
{
// 主循环
// ...
}
}
void RCC_IRQHandler(void)
{
if(RCC_GetITStatus(RCC_IT_HSERDY) != RESET)
{
// HSE晶振稳定后的操作
RCC_ClearITPendingBit(RCC_IT_HSERDY);
}
else if(RCC_GetITStatus(RCC_IT_PLLRDY) != RESET)
{
// PLL稳定后的操作
RCC_ClearITPendingBit(RCC_IT_PLLRDY);
}
else if(RCC_GetITStatus(RCC_IT_CSS) != RESET)
{
// CSS中断处理
RCC_ClearITPendingBit(RCC_IT_CSS);
}
}
```
这个例子中,我们首先使能了外部晶振,并将其设置为系统主时钟源。然后,我们配置了PLL时钟源,并将主时钟源设置为PLL时钟。接着,我们配置了时钟中断,并在主循环中等待中断的发生。在时钟中断处理函数中,我们可以根据需要进行相关的操作。
阅读全文