STM32
直播中

王平

7年用户 1333经验值
私信 关注
[问答]

STM32F100VDT6外部HSE时钟不准是什么原因导致的?

主控STM32F100VDT6 外部晶振8M,官方库3.5.0
几个月前购买过几十片该型号MCU,程序运行起来 系统时钟 24M ,完全正常
前些时候又购买几十片该型号MCU,程序运行起来,发现串口通讯速率完全不对,115200的波特率 被降到57600去了,因此怀疑是主频不对。

demo程序是直接基于ST 3.5.0库中的demo 程序上去修改的 ,仅仅配置systemInit这个函数,然后看打印输出
分析处理过程:
1、在systemInit这个函数中配置成内部HSI 8M晶体跑,发现系统时钟是24 可以正常跑,设置115200的波特率打印正常
2、在systemInit函数中,SYSTEM CLOCK 改为HSE,且把PREDIV1 =1  即 /*  PLL configuration:  = (HSE ) * 6 = 24 MHz */ 相当于是8M*6 = 48M,这样修改过后发现程序居然也是正常的。
3、实际测试外部晶体的频率也是8M。

因此对于这样的问题 ,我不确定是不是购买到了假冒的MCU。
此外对于这个问题的另外一些想法是,有没有办法可以做到 程序内部时钟自检,判断是否达到设计所要的时钟频率。

回帖(2)

刘建伟

2024-4-25 16:09:59
我认为是时钟配置的问题。楼主要注意一下配置。比如默认HSE的配置HSE_VALUE是4M还是8M。这些在stm32f1xx.h里面有定义。具体可以根据寄存器的值进行推断。按楼主说的这种情况,我猜测是外部始终和实际的HSE_VALUE定义不一致导致的。
举报

哔哔哔-

2024-4-25 17:32:11
STM32F100VDT6外部HSE时钟不准可能由以下几个原因导致:

1. 晶振质量问题:首先,检查新购买的几十片STM32F100VDT6的外部晶振是否与之前购买的晶振品质相同。晶振品质不好可能导致时钟不稳定或不准确。

2. 晶振负载电容不匹配:晶振的负载电容对时钟精度有很大影响。请检查晶振的负载电容是否与数据手册中推荐的值相匹配。

3. 电源电压不稳定:不稳定的电源电压可能导致时钟精度降低。请确保为STM32F100VDT6提供稳定的电源电压。

4. 外部干扰:电磁干扰(EMI)可能导致时钟信号失真,从而影响时钟精度。请检查电路板的布局,确保晶振周围没有高噪声元件,并采取适当的屏蔽措施。

5. 软件配置问题:检查systemInit函数中的时钟配置代码,确保与之前正常工作的代码一致。错误的时钟配置可能导致时钟精度降低。

6. 温度变化:晶振的频率可能会随温度变化而变化。如果工作环境的温度波动较大,可能会影响时钟精度。

7. 固件版本问题:虽然您提到使用的是官方库3.5.0,但请确保所有相关的固件和库文件都是最新版本,以避免潜在的兼容性问题。

为了解决这个问题,您可以尝试以下步骤:

1. 检查新购买的晶振品质,确保与之前正常工作的晶振相同。

2. 确认晶振的负载电容与数据手册中的推荐值相匹配。

3. 确保为STM32F100VDT6提供稳定的电源电压。

4. 检查电路板布局,减少外部干扰,并采取适当的屏蔽措施。

5. 仔细检查systemInit函数中的时钟配置代码,确保与之前正常工作的代码一致。

6. 如果可能,尝试在不同的温度环境下测试时钟精度。

7. 更新固件和库文件到最新版本,以避免潜在的兼容性问题。

8. 如果问题仍然存在,考虑联系ST官方技术支持寻求帮助。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分