|
本帖最后由 skw168 于 2019-2-18 16:14 编辑
前言:最近开始用STM32,功能比传统8位单片机多,目前思维比较混乱,所以在此做个总结
时钟框架
时钟源:
高速外部时钟
高速内部时钟 8MHz
低速内部时钟
关键名词:
PLLSRC 锁相环时钟选择源
PLLMUL 锁相环倍频器
SW 系统时钟选择
AHB 系统时钟分频器
ABP1
ABP2
AHB分频器后的时钟:
HCLK :to AHB bus,core,memory and DMA
ABP1时钟:应用于ABP1(MAX 36MHz)设备和TIM2,3,4
ABP2时钟:MAX 72MHz,应用于ABP2设备,TIM1和ADC
具体程序
void RCC_Configuration(void)
{
RCC_DeInit(); //除能外部高速时钟
//RCC_HSEConfig(RCC_HSE_OFF);
RCC_HSICmd(ENABLE); //使能内部高速时钟
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY == RESET)); //等待HSI使能成功
RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB时钟
RCC_PCLK1Config(RCC_HCLK_Div1); //设置APB1时钟(低速)
RCC_PCLK2Config(RCC_HCLK_Div1); //设置APB2时钟(高速)
//设置PLL时钟源及倍频系数
RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_2); // F = 8 / 2 * 2 MHz
RCC_PLLCmd(ENABLE);//如果PLL被用于系统时钟,那么它不能被失能
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //等待指定的 RCC 标志位设置成功 等待PLL初始化成功
//选择系统时钟
//RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI); //内部高速时钟
//RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE); //外部高速时钟
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //倍频时钟
while(RCC_GetSYSCLKSource() != 0x08);//需与被选择的系统时钟对应起来,RCC_SYSCLKSource_PLL
//使能APB2时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO |
RCC_APB2Periph_ADC1, ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div8);//ADC1时钟频率 14MHz
//使能AHB时钟
//RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|