当手头上没有示波器,如何通过代码测试stm32外部晶振是否工作
来源:互联网 发布:防伪码制作软件 编辑:程序博客网 时间:2024/05/21 08:04
1.首先查看stm32手册,可以知道有一个时钟控制寄存器(RCC_CR),在该寄存器中,第16位和第0位和25位和24位分别为:
HSEON:外部高速时钟使能 (External high-speed clock enable)
HSION:内部高速时钟使能 (Internal high-speed clock enable)
PLLRDY:PLL时钟就绪标志 (PLL clock ready flag)
PLLON:PLL使能 (PLL enable)
如下图:
因此,当在串口以%x的形式打印RCC_CR寄存器的值的时候,输出的内容为0x3035283(也有可能为0x3035183)时,,此时第0位和第16位都为1,第25位和第24位也都为1,因此使用了外部晶振作为时钟源(因为stm32开始上电初始化时,需要内部8M晶振工作来进行初始化)。
当注释掉system_stm32f10x.c中的SystemInit()函数中的SetSysClock()函数,系统将默认使用内部时钟,此时读出RCC_CR寄存器的值为0x5283(或者0x5183),此时第16位、25位、24位都为0,第0位为1。
- 但是笔者之前在项目开发时,遇到了一个测试值,输出的内容为0x15283。这时,第0位和第16位都为1,但是第25位和24位都为0
经过查阅stm32手册,发现stm32内部有时钟安全系统,如下图所示:
- 内容大概就是,当使用HSE振荡器(外部晶振)作为输入时钟时,当发生时钟故障时,PPL输入时钟将会被关闭,切换到内部的HSI振荡器(内部晶振),因此RCC_CR寄存器中25位和24位都为0,此时stm32使用内部晶振作为时钟源
经过笔者的排查,发现确实是外部的晶振损坏了,当换上新的晶振后,工作正常。
因此,当开发项目时,测试发现RCC_CR寄存器中外部PLL时钟的位都为0时,如果外部电路测试没问题的话, 基本上就是外部晶振的问题了。
阅读全文
2 0
- 当手头上没有示波器,如何通过代码测试stm32外部晶振是否工作
- SQL存储过程测试(8)——当待测存储过程没有返回值的时候 如何判断测试结果是否通过
- 晶振简介及如何使用示波器测试晶振
- 如何检测晶振是否工作?如何测试晶振是否启动?
- STM32外部中断测试
- STM32外部中断测试
- UTD2202C示波器如何去测试纹波
- SQL存储过程测试(6)——当待测存储过程返回行集的时候 如何判断测试结果是否通过
- SQL存储过程测试(7)——当待测存储过程返回out参数时 如何判断测试结果是否通过
- 当单片机没有晶振?...
- 示波器测量晶振有没有起振
- STM32系列修改外部晶振以及代码的修改(f103、f105为例)
- STM32:外部晶振时钟配置
- STM32 F1配置外部晶振
- 示波器外部触发
- AVR外部晶振是否起振的测试小程序
- TestestFlight 如何外部测试
- 电子电路之示波器测量晶振是否起振的方法
- @Import注解
- laravel引入jquery
- baby-gin 算法
- linux主从同步
- 单例模式
- 当手头上没有示波器,如何通过代码测试stm32外部晶振是否工作
- 使用原生JavaScript实现轮播图
- php class中public,private,protected的区别,以及实例
- PHP运算符优先级
- MVC
- 如何快速开发一套微信商城小程序?
- Linux文件权限详解
- PHP常用的排序和查找算法
- PHP中使用数组实现堆栈数据结构的代码