STM32外部高速晶振不起振的故障分析

2023-11-15

STM32外部高速晶振不起振的故障分析

一、故障背景

网上售卖的STM32F103C8T6的核心板如图1所示,由于STM32F103C8T6最小系统核心板的采购成本高达20元/块至40元/块,为了降低采购成本,对其STM32F103C8T6的核心板进行抄板,如图2所示,原来的外部高速时钟电路使用的是HC-49S封装的8Mhz晶振,现换成了3225封装的8Mhz晶振。
图1 网上售卖的STM32F103C8T6的核心板
图1 网上售卖的STM32F103C8T6的核心板

在这里插入图片描述
图2 抄板的STM32F103C8T6的核心板

二、故障现象

当抄板的样品做出来后,在测试时程序跑起来之后发现运行的速度慢了很多,有时程序运行过程中会卡死,特别是500ms延时函数整整过了4秒才出现电平翻转。刚开始以为是程序代码的问题,可检查了好几遍都没找到bug,一筹莫展地站在窗边点燃一根香烟,突然想起了是不是高速时钟失去了倍频作用。于是拿起示波器测量外部8Mhz晶振的波形,看到示波器没有捕捉到8Mhz的正弦波,只有100多khz的杂乱波形如图3所示,由此推断出外部8Mhz晶振电路有问题,接着测量8Mhz晶振和两个起振电容都是正常的,从而确定了是外部8Mhz晶振没有起振,STM32自动切换到内部8Mhz晶振没有倍频,导致运行速度变慢。
在这里插入图片描述
如图3 外部8Mhz晶振没有起振的波形

外部8Mhz高速时钟电路如图4所示,起振电容是20pF,一般起振电容很少出问题,怀疑是外部晶振的问题,于是更换了好几个其他品牌商家3225封装的8Mhz晶振,用示波器测量看到波形和图2一样,也是不起振,程序代码运行速度慢。后来飞线接了一个HC-49S封装的8Mhz晶振如图5所示,用示波器测量看到了8Mhz的正弦波如图6所示,说明晶振起振了,此时程序代码运行速度正常。
在这里插入图片描述
图4 外部8Mhz高速时钟电路

在这里插入图片描述
图5 飞线接了一个HC-49S封装的8Mhz晶振

在这里插入图片描述
图6 HC-49S封装的晶振起振的8Mhz正弦波

三、故障分析

找到了问题所在,但是却没想到具体是什么原因引起的,在百度CSDN等平台也没找到原因,自己也没想明白,于是找到做硬件研发的技术大佬请教问题,如图7所示,大佬说是晶振的匹配电容容量有问题(2个起振电容)导致晶振的负载电容过大((2个起振电容的积/和)+2pF-6pF的线路杂散电容,即(C1*C2/C1+C2)+2pF-6pF的线路杂散电容),让我找到这个3225封装的8Mhz晶振的规格书看看负载电容。
在这里插入图片描述
图7 向硬件研发的技术大佬请教问题

网上售卖的STM32F103C8T6的核心板给出的原理图上的匹配电容(起振电容)是20pF,而抄板的板子上用的是22pF,在看了看这个3225封装的8Mhz晶振的规格书上面写着负载电容是10pF,如图8所示。
在这里插入图片描述
图8 3225封装的8Mhz晶振的规格书

四、故障修复

经过大佬的指点,我恍然大悟,找了2个12pF的电容来替换板子上2个22pF的起振电容,再次用示波器测量就看到了8Mhz的正弦波,如图9所示,程序代码也正常运行,问题到此解决。
在这里插入图片描述
图9 更换起振电容后的晶振起振的8Mhz正弦波

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32外部高速晶振不起振的故障分析 的相关文章

  • 我们可以优化代码来降低功耗吗?

    有没有什么技术可以优化代码以确保更低的功耗 架构是ARM 语言是C 来自 ARM 技术参考网站 ARM11 MPCore 的特性 提高能源效率的处理器 效率包括 准确的分支和子程序返回预测 减少数量 错误的指令获取和 解码操作 使用物理寻址
  • 为什么无符号类型在arm cpu中效率更高?

    我正在阅读手臂手册并提出这个建议 但没有提到原因 为什么无符号类型更快 在 ARMv4 之前 ARM 没有对加载半字和有符号字节的本机支持 要加载有符号的字节 你必须LDRB然后对值进行符号扩展 LSL那就起来吧ASR它回落 这很痛苦所以c
  • 通用 ELF 中的重定位(EM:40)

    我尝试从 Ubuntu 交叉编译到Friendly arm 但出现了奇怪的错误 root kevin VirtualBox home kevin Desktop makef make ARCH arm CROSS COMPILE arm n
  • 多核ARM cpu上的中断如何工作

    这个问题已经针对 x86 得到了解答 但是 我找不到太多关于 ARM MP cpu 如 Cortex A9 Cortex A15 等 的信息 更重要的是我想知道是否可以在非主CPU上引发中断而无需任何配置等 我正在开发一款仅处理主 cpu
  • 手臂 g++ 中缺少一些东西

    我安装了 CodeSourcery g 工具链并尝试编译一个简单的 hello world 程序 include
  • Android 上原生的自修改代码

    我正在尝试在 Android 上制作一些自修改本机代码并在模拟器中运行它 我的示例基于 android ndk 中的 Hello JNI 示例 它看起来像这样 define NOPE LENGTH 4 typedef void FUNC v
  • 使用 GCC 编译器为代码的特定部分保留寄存器

    是否可以为 C 代码的特定部分保留寄存器 ffixed reg 选项或声明全局寄存器变量不是我正在寻找的答案 我想保留特定范围 比如说特定函数 的寄存器值 使用局部寄存器变量是不可能的 因为它不能保证在整个范围内保留寄存器的值 我正在寻找类
  • ARM 的启动过程是怎样的?

    我们知道 对于X86架构 按下电源按钮后 机器开始执行0xFFFFFFF0处的代码 然后开始执行BIOS中的代码以进行硬件初始化 BIOS 执行后 它使用引导加载程序将操作系统映像加载到内存中 最后 操作系统代码开始运行 对于ARM架构 使
  • 嵌入式 C++ (ARM9) 单元测试

    我来自 Java 和 JUnit 的世界 我演示了 Hudson 以及我使用 JUnit 取得的所有成果 我想在嵌入式设备上对 C 代码执行相同的操作 但找不到从哪里开始 该项目使用 iccarm exe IAR 编译器 进行编译 现在使用
  • 使用 gnueabihf 为 ARMv6 构建

    我尝试为 ARMv6 构建应用程序 但失败了 我猜问题是工具链支持硬浮点 但 ARMv6 不支持 好吧 首先我设置 march armv6 编译失败 opt gcc linaro arm linux gnueabihf 4 8 2014 0
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015
  • 用于 RHEL 的 gdb-multiarch

    我正在尝试寻找方法来运行gdb 多架构RHEL 中的命令 我已经安装了用于 ARM 处理的 QEMU 模拟器 我想安装GDB进行调试 我能够安装GDB 多体系结构在 Ubuntu 中运行命令成功 sudo apt get GDB multi
  • ARM架构中不同处理器模式下如何使用内核堆栈?

    据我了解 每个进程都有一个用户堆栈和内核堆栈 除此之外 ARM 架构中的每种模式都有一个堆栈 所以我想知道不同的堆栈和堆栈指针在 ARM 模式下如何工作 另外 何时会使用与进程关联的内核堆栈 何时会使用与进程关联的内核堆栈 当您进行系统调用
  • 可以使用Visual Studio 2012构建ARM桌面程序吗?

    我正在使用 Visual Studio 2012 beta 我的桌面 win32 程序在 ARM 架构中编译得很好 升级到 Visual Studio 2012 RC 后 编译器无法工作并出现以下错误 不支持为 ARM 平台编译桌面应用程序
  • 为 ARM 交叉编译 zlib

    我尝试为arm poky linux gnueabi交叉编译zlib 但启动 make 时出现错误 zlib 1 2 11 AR HOST ar CC HOST gcc RANLIB HOST ranlib configure prefix
  • 如何在 Android 设备上运行 VS Code [重复]

    这个问题在这里已经有答案了 我有 Galaxy Tab S6 它具有替代笔记本电脑的很酷的功能 例如连接鼠标和键盘 但不幸的是它运行 Android 操作系统 并且没有很多开发应用程序可用于 Android 所以我想是否有一个选项可以在至少
  • 分析 Cortex-M7 (stm32f7) 上的 memcpy 性能

    简洁版本 从 GNU ARM 工具链中提取的 memcpy 的性能指标在 ARM Cortex M7 上对于不同的副本大小似乎差异很大 即使复制数据的代码始终保持不变 这可能是什么原因造成的 长版 我是使用 GNU Arm 工具链 11 2
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能
  • 使用 Android NDK 使用 -fsigned-char 进行构建安全吗?

    为了与其他平台保持一致 我需要使用signed char在我正在处理的一些本机代码中 但默认情况下在Android NDK上char类型是unsigned 我尝试明确使用signed char类型 但它生成太多警告differ in sig
  • saber sd 如何在没有 SPL 的情况下直接从 uboot 启动

    sabre sd 基于 imx 6 最大内部 RAM 约为 150Kb 然而 uboot 足够大 可以容纳在这个空间中 在这个场景中事情是如何进行的 https community freescale com docs DOC 95015

随机推荐

  • matlab 集成学习,集成学习

    假设你去随机问很多人一个很复杂的问题 然后把它们的答案合并起来 通常情况下你会发现这个合并的答案比一个专家的答案要好 这就叫做群体智慧 同样的 如果你合并了一组分类器的预测 像分类或者回归 你也会得到一个比单一分类器更好的预测结果 这一组分
  • 给定一个仅包含小写字母的字符串,求它的最长回文子串的长度。

    include
  • 2轴直线插补程序分析

    1 数据采样插补法 在CNC系统中较广泛采用的另一种插补计算方法即所谓数据采样插补法 或称为时间分割法 它尤其适合于闭环和半闭环以直流或交流电机为执行机构的位置采样控制系统 这种方法是把加工一段直线或圆弧的整段时间细分为许多相等的时间间隔
  • 计算机视觉智能中医(六):基于曲线拟合舌体胖瘦的自动分析

    返回至系列文章导航博客 文章目录 1 简介 2 原理讲解 多项式曲线拟合 2 1 舌体曲线拟合参数与形状的关系 2 2 胖瘦指数定义 3 具体实现过程 4 代码实现 4 1 contour to py 4 2 outline cut py
  • 生成项目树形结构

    当你写博客或者项目描述的时候 想要展示项目的树形结构 怎么办呢 手写 程序员是不可能手写的 win R输入cmd进入dos 输入命令 tree 项目根目录 gt 生成的树形结构文件保存地址 比如 tree E workspace flink
  • ORB-SLAM2:基于可识别特征的自主导航与地图构建

    目录 ORB SLAM2 基于可识别特征的自主导航与地图构建 简介 地图 A 地图特征点或3D ORB B 关键帧 C 可视化图像 位置识别 A 图像识别数据库 B 高效优化的ORB匹配 C 视觉一致性 自主导航追踪 A ORB特征获取 B
  • Vue中使用element-ui使用表单提交时间

    在Vue中使用element ui组件的表单提交 想要上传笔记创建的时间 出现的问题 element ui的源码
  • SQLPub免费的MySQL数据库

    SQLPub免费的MySQL数据库 提供最新版本 甚至是开发者版本的 MySQL 服务器测试服务 您可以轻易地 注册免费账号 测试您的应用 例如 您可以测试在MySQL版本升级后您的应用是否依然能够正常运行 sqlpub com 也是让您学
  • javaWeb数据库连接池,过滤器和监听器

    数据库连接池 JDBC 1 什么是数据库连接池 是一个数据库的工具 能够分配 管理和释放数据库连接 它允许应用程序重复使用一个现有的数据库连接 而不是再重新建立一个 常见数据库连接池 C3P0 是一个开放源代码的JDBC连接池 它在lib目
  • sd模型分类

    标题模型主要分为四类 Checkpoint LoRA Textual Inversion Hypernetwork 分别对应 4 种不同的训练方式 Checkpoint 通过 Dreambooth 训练方式得到的大模型 特点是出图效果好 但
  • 【MySQL】使用Visio绘制E-R图

    使用Visio绘制E R图 1 创建项目 文件 新建 常规 基本框图 2 调整页面方向 纵向或横向 文件 页面设置 3 准备E R图的三个基本形状 实体用矩形 关系用菱形 属性用椭圆 4 绘制E R图 双击形状后可以在形状中编辑文字 通过绘
  • Cursor!!!GPT-4帮我写代码

    首先介绍一款产品 cursor 官网 https www cursor so IDE作者 https twitter com amanrsanger 目前为止应该是第一个免费能够使用GPT4工作的软件 看作者的Twitter 他说自己提前向
  • 由于找不到d3dx9_43.dll无法继续执行此代码怎么修复?这个三个方法可以解决问题

    在运行游戏 软件的时候 计算机提示 由于找不到d3dx9 43 dll无法继续执行此代码 是怎么回事 其实d3dx9 43 dll是Windows操作系统下的DirectX9的一个组件 而DirectX是Windows系统支持游戏和显卡游戏
  • 【Spring Boot 源码学习】OnClassCondition 详解

    Spring Boot 源码学习系列 OnClassCondition 详解 引言 往期内容 主要内容 1 getOutcomes 方法 2 多处理器拆分处理 3 StandardOutcomesResolver 内部类 4 getMatc
  • linux tmux的经验总结

    背景 主要操作实现 安装 概念了解 快捷键 tmux重启后恢复终端layout界面的方法 如果有多个用户比如adminqilei等 新建windows或者pane分屏保留目录路径 复制模式 支持鼠标模式 窗口列表居中否则session和wi
  • 9大最佳知识库软件/文档管理工具

    企业的任何工作流程都离不开文档管理 面对复杂的业务流程 频繁的文档编辑任务和跨区域的文件共享需求 优秀的文档管理体系能够帮助企业实现安全的文档存储 高效的文档搜索 便捷的文档协作和有效的文档权限 版本 行为管控 由于各个产品切入文档管理市场
  • windows下安装cygwin+swoole教程

    swoole下载 http git oschina net swoole swoole cygwin下载 https www cygwin com setup x86 64 exe cygwin镜像地址 http mirrors sohu
  • 如何拯救空间不足的C盘?

    目录 操作步骤 确定软件后期安装的位置 修改注册表 验证 心得 操作步骤 确定软件后期安装的位置 建议选择硬盘内存比较多的一个盘 我选择的是D盘 然后复制D programs 修改注册表 打开注册表编辑器 双击HKEY LOCAL MACH
  • JS操作dom,bom

    属性是 方法里面是可以写参数的 window open 打开窗口 p1 要打开的新窗口地址 p2 窗口名称 p3 窗口特征 open newwindow html width 400px height 400px close 关闭窗口 al
  • STM32外部高速晶振不起振的故障分析

    STM32外部高速晶振不起振的故障分析 一 故障背景 网上售卖的STM32F103C8T6的核心板如图1所示 由于STM32F103C8T6最小系统核心板的采购成本高达20元 块至40元 块 为了降低采购成本 对其STM32F103C8T6