笔记(STM32篇)day8——系统时钟配置、MCO输出系统时钟_stm32 时钟输出_NYMuggle
系统时钟配置、MCO输出系统时钟...
目录
一、钟表框图 二、手机配置进程 1、装置钟表系统配置函数公式 2、MCO选配 规范一、时钟框图
? ? ? ? 如图只是STM32F10x的数字时钟软件系统框图,此页用的正点原子团的图,左边四位蓝色的的对应是: ????????迅速内部管理RC挂钟(HSI):8MHz,准确度差,受的电压室温干扰。 ????????绕城高速第三方晶振闹钟(HSE):4-16MHz,一半用8MHz,惯用HSE为软件系统闹钟。 ????????高转速外面晶振秒表(LSE):32.768kHz,一般的给RTC做秒表源。 ? ? ? ? 快速室内RC钟表(LSI):30-60kHz,通常情况下给独有看门狗或自行呼唤单园做钟表源。 ? ? ? ? 只能根据框图,AHB操作设备闹钟SYSCLK,SYSCLK有HSI、HSE还有PLLCLK六种的选择,首次增加操作PLLCLK当做设备闹钟,从HSE(8MHz)经途PLL倍频至72MHz。其身,AHB和ABP2一般的给72MHz,AHB1为36MHz。二、配置过程
1、系统时钟配置函数
? ? ? ? 配置单按序详细: ? ? ? ? 0、RCC原始化;????????1、开启HSE ,并等待 HSE 稳定;
????????2、设置 AHB、APB2、APB1的预分频因子;
????????3、设置PLL的时钟来源,和PLL的倍频因子,设置各种频率主要就是在这里设置;
????????4、开启PLL,并等待PLL稳定;
????????5、把PLLCK切换为系统时钟SYSCLK;
????????6、读取时钟切换状态位,确保PLLCLK被选为系统时钟。
void HSE_SYSCLK( uint32_t pllmul)
{
RCC_DeInit(); //先初始化RCC
ErrorStatus HSEStatus; //枚举变量:0为ERROR,1为SUCCESS
RCC_HSEConfig(RCC_HSE_ON); //使能HSE
HSEStatus = RCC_WaitForHSEStartUp(); //等待RCC稳定,稳定后返回SUCCESS
if (HSEStatus == SUCCESS)
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); // 使能FLASH 预存取缓冲区
FLASH_SetLatency(FLASH_Latency_2); //延迟设置,CPU等待FLASH两个周期,根据SYSCLK频率设置
//此处开始可以看成从后往前配置,即从外设时钟到锁相环
RCC_HCLKConfig(RCC_SYSCLK_Div1); // AHB预分频因子设置为1分频,HCLK = SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1); // APB2预分频因子设置为1分频,PCLK2 = HCLK
RCC_PCLK1Config(RCC_HCLK_Div2);// APB1预分频因子设置为1分频,PCLK1 = HCLK/2
// 设置PLL时钟来源为HSE,设置PLL倍频因子
// PLLCLK = 8MHz * pllmul
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, pllmul);
RCC_PLLCmd(ENABLE); // 开启PLL
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) // 等待 PLL稳定
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // 当PLL稳定之后,把PLL时钟切换为系统时钟SYSCLK
// 读取时钟切换状态位,确保PLLCLK被选为系统时钟
while (RCC_GetSYSCLKSource() != 0x08)
{
}
}
else
{ // 如果HSE开启失败,那么程序就会来到这里,用户可在这里添加出错的代码处理
// 当HSE开启失败或者故障的时候,单片机会自动把HSI设置为系统时钟,HSI是内部的高速时钟,8MHZ
while (1)
{
}
}
}
2、MCO配置
? ? ? ? 首先,MCO是和PA8的端口复用,作为输出,应该配置模式为复用推挽输出,同时,在系统时钟作为输出至MCO引脚时,保证输出时钟频率不超过50MHz (I/O口最高频率)。其余操作与正常外设相同,先声明GPIO结构体,使能APB2时钟,引脚、模式、速率三个成员配置,最后初始化这个结构体,之后就可以在PA8口用示波器看系统时钟频率(MCO可以查看SYSCLK、HSI、HSE、PLL/2四个频率,在RCC_CFGR中配置)
void MCO_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// 开启GPIOA的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// 选择GPIO8引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
//设置为复用功能推挽输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
//设置IO的翻转速率为50M
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
// 初始化GPIOA8
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
参考
[野火?]STM32库搭建实用技巧经验指导意见——应用于野火指导意见者搭建板 — [野火]STM32库搭建实用技巧经验指导意见——应用于野火指导意见者搭建板 word表格皇冠新体育APP相关的文章
- MySQL之concat的用法_彭俞伟_concat mysql
- Oracle锁表解决方法_laizhenghua_oracle 锁表
- Docker搭建Skywalking环境_xiaolyuh123_docker搭建skywalking
- MySQL 排序_不会写代码的菜_mysql排序
- postgresql使用UUID函数_佛说"?"_postgresql uuid
- Uncaught SyntaxError: The requested module ‘/node_modules/.vite/vue.js?v=50ccac76‘ does not provide_
- JetLinks学习笔记一_wjds_jetlinks
- 皇冠新体育APP:FAQ智能问答系统设计与实现_lerry_lca_智能问答系统
- dbms_output.put_line的用法(Oracle)_夜猫程序猿_dbms_output.put_line
- Ajax技术与JQuery Ajax_su-shen
- k8s部署 filebeat 步骤、踩坑及解决方案_王元恺David_k8s部署filebeat
- 皇冠新体育APP:ElasticSearch(1)ES数据的存储和搜索原理_?abc!_es数据存储在哪里
- SQLServer2019安装(Windows)_Liebgott°_sqlserver2019安装教程
- 不会吧不会吧,这博主居然用了1.6w+字来讲 JDBC 连接 MySQL,还花了好几个晚上写出来的_程序猿追
- jQuery05&extend继承&自定义插件_Liartq
- elasticsearch中的Translog详解 及其参数与调优_水的精神_index.translog.durability