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

stm32h743iit6 配置 FMC 的时钟源

使用 cubemx 可以看到 FMC 支持的时钟源
在这里插入图片描述



HCLK3

HCLK3 所在的位置如下图所示:
在这里插入图片描述



PLL1QPLL2R

下图是 3 个 PLL
在这里插入图片描述



所谓的 PLL1QPLL2R 是指 PLL 的 2 个输出通道。如下所示:


在这里插入图片描述

上面的红色方框框起来的 DIVQ1 就是 PLL1Q ,下方的红色方框框起来的 DIVR2 就是 PLL2R .


PERCK

PERCK 的位置如下图所示
在这里插入图片描述
这就是一个多路复用器。


封装一个配置函数

void bsp::config_fmc_clock_source(std::string const &clock_source_name)
{RCC_PeriphCLKInitTypeDef PeriphClkInitStruct{};if (clock_source_name == "hclk3"){PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_FMC;PeriphClkInitStruct.FmcClockSelection = RCC_FMCCLKSOURCE_D1HCLK;HAL_StatusTypeDef result = HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);if (result != HAL_OK){throw std::runtime_error{CODE_POS_STR + "配置 FMC 时钟源失败。"};}return;}if (clock_source_name == "pll1_q"){PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_FMC;PeriphClkInitStruct.FmcClockSelection = RCC_FMCCLKSOURCE_PLL;HAL_StatusTypeDef result = HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);if (result != HAL_OK){throw std::runtime_error{CODE_POS_STR + "配置 FMC 时钟源失败。"};}return;}if (clock_source_name == "pll2_r"){PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_FMC;PeriphClkInitStruct.FmcClockSelection = RCC_FMCCLKSOURCE_PLL2;HAL_StatusTypeDef result = HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);if (result != HAL_OK){throw std::runtime_error{CODE_POS_STR + "配置 FMC 时钟源失败。"};}return;}if (clock_source_name == "per_ck"){PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_FMC;PeriphClkInitStruct.FmcClockSelection = RCC_FMCCLKSOURCE_CLKP;HAL_StatusTypeDef result = HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);if (result != HAL_OK){throw std::runtime_error{CODE_POS_STR + "配置 FMC 时钟源失败。"};}return;}throw std::invalid_argument{CODE_POS_STR + "无效的时钟源名称。"};
}


吐槽

stm32 的时钟源和时钟信号命名真的是乱七八糟的。而且同一个信号还有多种名称。HAL 库的 API 中的名称和 cubemx 中显示的还不一样。以上文中的 PERCK 为例, cubemx 中对同一个时钟信号也会在不同地方使用不同名称。FMC 时钟源选择的最后一个选项干脆在旁边备注 PER Source Mux 不好吗,非要整出一个 PERCK 让人一下子找不到在哪,还要选中后根据频率去到处找和推测是哪一个。

http://www.dtcms.com/a/390322.html

相关文章:

  • 中小企业数字化转型:从工具升级到思维转变
  • 数据传输中的三大难题,ETL 平台是如何解决的?
  • DAY16 字节流、字符流、IO资源的处理、Properties、ResourceBundle
  • 电气工程师面试题及答案
  • Halcon一维码与二维码识别技术解析
  • 【数据库系统Trip 第1站】总概
  • 关于 Python 编程语言常见问题及技术要点的说明
  • Mysql常用函数积累
  • AntV可视化(MCP 1.8)避坑指南
  • 学习日报|线程池 OOM
  • C# Progress
  • 【LeetCode 每日一题】3495. 使数组元素都变为零的最少操作次数
  • Part01、02 基础知识与编程环境、C++ 程序设计
  • C++聊天系统从零到一:brpc RPC框架篇
  • Java编程思想 Thinking in Java 学习笔记——第2章 一切都是对象
  • AssemblyScript 入门教程(2)AssemblyScript的技术解析与实践指南
  • 深入理解Java数据结构
  • 【试题】网络安全管理员考试题库
  • 第一章 信息化发展
  • 第六章:实用调试技巧
  • 人工智能通识与实践 - 智能语音技术
  • CSP-S 提高组初赛复习大纲
  • 卷积神经网络CNN-part7-批量规范化BatchNorm
  • [xboard]02 uboot下载、移植、编译概述
  • Python入门教程之字符串运算
  • 堡垒机部署
  • 刷题记录(10)stack和queue的简单应用
  • 如何进行时间管理?
  • Spring面试题及详细答案 125道(46-65) -- 事务管理
  • OA ⇄ CRM 单点登录(SSO)实现说明