当前位置: 首页 > news >正文

关于MCO使用配置

关于MCO,相关介绍如下图:

image

 

针对以上8个时钟信号作为MCO时钟输出的配置如下:
1、系统时钟输出
此时MCO引脚(PA8)输出时钟频率即系统主频的大小

    GPIO_InitTypeDef GPIO_InitStructure = {0};RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/* MCO Output GPIOA 8 */RCC_MCOConfig(RCC_MCO_SYSCLK);

 

2、HSI时钟输出
此时MCO引脚(PA8)输出时钟频率即内部高速时钟(HSI)的大小,一般为8MHz

    GPIO_InitTypeDef GPIO_InitStructure = {0};RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/* MCO Output GPIOA 8 */RCC_MCOConfig(RCC_MCO_HSI);

 

3、HSE时钟输出
此时MCO引脚(PA8)输出时钟频率即外部高速时钟(HSE)的大小

    GPIO_InitTypeDef GPIO_InitStructure = {0};RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/* MCO Output GPIOA 8 */RCC_MCOConfig(RCC_MCO_HSE);

 

4、PLL时钟经过2分频输出
关于PLL时钟介绍以及时钟来源参考下图介绍

image

image

 PLL时钟一般在配置系统主频时进行配置,一般默认使用PLL时钟作为系统时钟

image

MCO输出配置如下:

    GPIO_InitTypeDef GPIO_InitStructure = {0};RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/* MCO Output GPIOA 8 */RCC_MCOConfig(RCC_MCO_PLLCLK_Div2);

 

5、PLL2时钟输出
关于PLL2时钟,其时钟树框图如下:

image

 可通过时钟控制寄存器和时钟配置寄存器2配置开启PLL2时钟,注意关于PLL2倍频因子以及分频因子配置,需要在PLL2关闭才可写入

image

MCO输出PLL2时钟配置如下:

    GPIO_InitTypeDef GPIO_InitStructure = {0};RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);//    RCC->CFGR2 |= (uint32_t)(RCC_PREDIV2_Div2 | RCC_PLL2Mul_6 );
//    RCC->CTLR |= ((uint32_t)RCC_PLL2ON);
RCC_PLL2Cmd(DISABLE);RCC_PREDIV2Config(RCC_PREDIV2_Div2);RCC_PLL2Config(RCC_PLL2Mul_6);RCC_PLL2Cmd(ENABLE);/* MCO Output GPIOA 8 */RCC_MCOConfig(RCC_MCO_PLL2CLK);

 

6、PLL3时钟输出
关于PLL3时钟,其时钟树框图如下:

image

同PLL2时钟配置一致,PLL3时钟关于PLL2倍频因子以及分频因子配置,需要在PLL3关闭才可写入

image

 MCO输出PLL3时钟配置如下:

    GPIO_InitTypeDef GPIO_InitStructure = {0};RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);//    RCC->CFGR2 |= (uint32_t)(RCC_PREDIV2_Div2 | RCC_PLL3Mul_4 );
//    RCC->CTLR |= ((uint32_t)RCC_PLL3ON);
RCC_PLL3Cmd(DISABLE);RCC_PREDIV2Config(RCC_PREDIV2_Div2);RCC_PLL3Config(RCC_PLL3Mul_4);RCC_PLL3Cmd(ENABLE);/* MCO Output GPIOA 8 */RCC_MCOConfig(RCC_MCO_PLL3CLK);

 

7、PLL3时钟经过2分频输出
程序配置如下:

    GPIO_InitTypeDef GPIO_InitStructure = {0};RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);//    RCC->CFGR2 |= (uint32_t)(RCC_PREDIV2_Div2 | RCC_PLL3Mul_4 );
//    RCC->CTLR |= ((uint32_t)RCC_PLL3ON);
RCC_PLL3Cmd(DISABLE);RCC_PREDIV2Config(RCC_PREDIV2_Div2);RCC_PLL3Config(RCC_PLL3Mul_4);RCC_PLL3Cmd(ENABLE);/* MCO Output GPIOA 8 */RCC_MCOConfig(RCC_MCO_PLL3CLK_Div2);

 

8、XT1 外部 3-25MHz 振荡器(用于以太网)
程序配置如下:

    GPIO_InitTypeDef GPIO_InitStructure = {0};RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/* MCO Output GPIOA 8 */RCC_MCOConfig(RCC_MCO_XT1);

 

http://www.hskmm.com/?act=detail&tid=16708

相关文章:

  • 向量那点事儿
  • c++输入输出详解
  • docker/docker compose/k8s
  • 中国开发者迎来新选择:Gitee成为研发协作平台转型期的中流砥柱
  • RK3588-ubuntu server - 详解
  • 一文教你上手 Geometric Glovius 6.0:安装、授权与首个项目演示
  • 32单片机+free rtos移植CJSON库函数主要流程
  • Gitee如何重塑中国开发者生态:本土化创新与数字化转型的双重奏
  • 输入输出接口
  • Go语言中的信号捕获与优雅退出:SIGINT、SIGTERM和SIGKILL详解 - 若
  • (二)3.1.9 生产“稳”担当:Apache DolphinScheduler Worker 服务源码全方位解析
  • 完整教程:生产环境实战:Spring Cloud Sleuth与Zipkin分布式链路追踪实践
  • 训练“系统级思维”,听时序数据库 IoTDB Committer 说说从设计到应用的成长
  • 关于gradle项目启动
  • Day08
  • 常见闪存区别
  • 进程、线程、协程、虚拟线程,傻傻分不清楚
  • 事倍功半是蠢蛋55 ctrl+shift+f 每次搜索都按倒繁体
  • Ini文件的读写
  • 数据跨境传输解决方案助力企业安全合规高效流通
  • 题解:P9454 [ZSHOI-R1] 巡城
  • QuestaSim奔溃后再次打开无法仿真
  • 软考架构备考-软件可靠性、知识产权和标准化
  • 医院内外网文件传输:平衡安全与效率的关键链路!
  • 我的第一个赚钱网站 -- 从网站源码到集成AdSense获利的全过程
  • Gradle读取仓库配置文件的优先级
  • opencv学习记录5
  • PCS PMA,如何理解硬核IP
  • pycharm中使用调试模式运行 uvicorn.run(app)报错TypeError: _patch_asyncio.locals.run() got an unexpected keywor解决
  • 交换机命令