RCC学习笔记-使用HSE与HSI配置系统时钟并使用MCO输出监控系统时钟
2019-05-13 10:51
381 查看
HSE部分:
其实固件库函数都已写好了,要勤快点查阅才行。
#include "bsp_rccclkconfig.h" void HSE_SetSysClk( uint32_t RCC_PLLMul_x ) { ErrorStatus HSEStatus; //声明HSE状态变量 //设定的两个状态值 ERROR=1,SUCCESS=!ERROR { //变量声明一定要贴着大括号 // 把RCC 寄存器复位成复位值,刚上电的状态 RCC_DeInit(); // 使能 HSE RCC_HSEConfig(RCC_HSE_ON); HSEStatus = RCC_WaitForHSEStartUp(); if( HSEStatus == SUCCESS ) // 使能预取指 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); FLASH_SetLatency(FLASH_Latency_2); // 配置三个总线的分频因子 RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div2); RCC_PCLK2Config(RCC_HCLK_Div1); // 配置 PLLCLK = HSE * RCC_PLLMul_x,PLL关闭情况下才能配置参数 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_x); // 使能PLL RCC_PLLCmd(ENABLE); // 等待PLL稳定 while( RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET ); // 选择系统时钟 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while( RCC_GetSYSCLKSource() != 0x08 ); } else { /* 如果HSE 启动失败,用户可以在这里添加处理错误的代码 */ } } void HSI_SetSysClk( uint32_t RCC_PLLMul_x ) { __IO uint32_t HSIStatus = 0; // 把RCC 寄存器复位成复位值 RCC_DeInit(); // 使能 HSI RCC_HSICmd(ENABLE); HSIStatus = RCC->CR & RCC_CR_HSIRDY; if( HSIStatus == RCC_CR_HSIRDY ) { // 使能预取指 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); FLASH_SetLatency(FLASH_Latency_2); RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div2); RCC_PCLK2Config(RCC_HCLK_Div1); // 配置 PLLCLK = HSE * RCC_PLLMul_x RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_x); // 使能PLL RCC_PLLCmd(ENABLE); // 等待PLL稳定 while( RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET ); // 选择系统时钟 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while( RCC_GetSYSCLKSource() != 0x08 ); //确定切换完毕后返回 //0x00 HSI作为系统时钟 //0x04 HSE作为系统时钟 //0x08 PLL作为系统时钟 } else { /* 如果HSI 启动失败,用户可以在这里添加处理错误的代码 */ } } //MCO时钟输出 void MCO_GPIO_Config() { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; //复用模式推挽输出 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); }
实验观察到的现象,8M晶振直接出来波形并不好,经过锁相环以后波形完美。
锁相环的工作原理是检测输入信号和输出信号的相位差,并将检测出的相位差信号通过鉴相器转换成电压信号输出,经低通滤波器滤波后形成压控振荡器的控制电压,对振荡器输出信号的频率实施控制,再通过反馈通路把振荡器输出信号的频率、相位反馈到鉴相器。
HSI部分:
要修改的部分:
1.HSI使能部分
2.等待部分直接操作寄存器
HSIStatus=RCC-> & RCC_ CR_HSIRDY
3.配置锁相环时钟为2分频
好了RCC部分学完了,感觉进度有点慢。以后要加快进度了。
相关文章推荐
- STM32系统学习——RCC(使用HSE/HSI配置时钟)
- 第15章 RCC—使用HSE/HSI配置时钟—零死角玩转STM32-F429系列
- 第15章 RCC—使用HSE/HSI配置时钟—零死角玩转STM32-F429系列
- RCC—使用 HSE/HSI 配置时钟 ---时钟树
- STM32 HAL 库学习笔记之-------(系统时钟配置)
- RCC—使用 HSE/HIS 配置时钟
- STM32学习笔记2-系统时钟知识及程序配置
- 【小梅哥SOPC学习笔记】系统时钟的使用
- 学习下stm32 配置 HSI作为系统时钟,但意义不大,一般不这样做!
- 学习笔记∣stm32l0xx时钟系统详解与代码配置
- STM32学习笔记2-系统时钟知识及程序配置
- STM32F103 使用HSI配置系统时钟为64MHZ
- ITCAST视频-Spring学习笔记(使用Spring配置文件实现AOP)
- snmp学习笔记之一——配置使用trap
- 使用Log4j在系统中配置两个不同的Log输出
- Linux系统学习笔记:日常使用和管理
- JAVA输入/输出系统中的其他流学习笔记
- SQL学习笔记:服务端配置-如何使用企业管理器
- 《嵌入式linux应用程序开发完全手册》系统时钟和定时器学习笔记系统时钟和定时器
- stm32F4库函数中的RCC系统时钟配置