STM32的晶振跟HSE外部时钟设置.】的更多相关文章

void RCC_Configuration(void){  /* RCC system reset(for debug purpose) */  RCC_DeInit(); /* Enable HSE */  RCC_HSEConfig(RCC_HSE_ON); /* Wait till HSE is ready */  HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus == SUCCESS)  {         …
首先,我用的是STM32F407,下方所有图片都是出自这芯片的文档,如果型号和我不同,需要找到对应的芯片说明文档,也许会有出入 先看一张时钟图 这里会着重说明高速的部分,低速(不管内部还是外部)只给RTC时钟使用 题外话,MCO1.MCO2,你可以往外面输出时钟 以下开始正题 图片红圈处是主时钟,供给许多东西使用,例如外设(UART.SPI...),简直就像大型音乐演奏的指挥者 所有你想用到的外设,初始化第一步,就是使能时钟(向主时钟请求) 例如下方的SPI初始化代码 void SPI3_Ini…
在文件 system_stm32f0xx.c 里的函数 static void SetSysClock(void) { if (HSEStatus == (uint32_t)0x01) // 存在外部时钟{} else {// 这里添加配置48M代码} } 代码如下 static void SetSysClock(void) { __IO uint32_t StartUpCounter = , HSEStatus = ; /* SYSCLK, HCLK, PCLK configuration -…
1. STM32f103有内部晶振.刚刚上电时,所有Clock都是源于内部晶振,所以当片内没有程序或内部程序没有使能外部晶振时,外部晶振是不会起振的.2. STM32f103有内部复位电路,只有当检测到外部电压大于电压阀值时才会启动.因为需要检测外部电压,所以模拟Ref/VDDA/VSSA不能开路,做实验是可以将Ref/VDDA与3.3V链接,VSSA与GND链接.3. 串口连接时,要记得正确配置好Boot0和Boot1引脚的电平.4. Jlink链接时,要注意是JTAG模式还是SWD模式.(一…
STM32的RTC晶振经常出现不起振的问题,这已经是“业界共识”了.很多人在各种电子论坛上求助类似于“求高手指点!RTC晶振不起振怎么办”的问题,而其答案基本可以概括为“这次高手帮不了你了” 更有阴谋论者提出让人啼笑皆非的解释——STM32的RTC晶振不起振是ST与晶振厂商串通后故意搞出来的,目的是提高某晶振厂商高端晶振的销量. 最近做的几块板子也用到了STM32的RTC,前后两版一共做了大概6片,幸运的是并未遇到晶振不起振的现象.而我采用的是3毛钱一个的普通晶振,并未选用传说中低负载高精度晶振…
一.晶体在一个电路系统中, 时钟是必不可少的一部分.如人的心脏的作用,如果电路系统的时钟出错了,系统就会发生紊乱,因此在PCB 中设计,一个好的时钟电路是非常必要的.我们常用的时钟电路有:晶体.晶振.分配器.有些IC 用的时钟可能是由主芯片产生的,但追根溯源, 还是由上述三者之一产生的. 1,引脚尽量与芯片距离近,防止受到其他信号干扰.当然也防止它干扰别的线路,因为它是信号源. 2,尽量选择铁壳晶振,其抗干扰能力强些. 3,晶振下面所有层不能走线,并铺GND铜皮. 4,晶振附近也不要有太近的数字…
一.首先了解几个硬件名词: stm32有多种时钟源,为HSE.HSI.LSE.LSI.PLL,对于L系统的,还有一个专门的MSI 1.HSE是高速外部时钟,一般8M的晶振,精度比较高,比较稳定. 2.HSI是高速内部时钟,RC振荡器,频率为8MHz.精度略差. 3.LSE是低速外部时钟,接频率为32.768kHz的石英晶体.一般为RTC使用. 4.LSI是低速内部时钟,RC振荡器,频率为40kHz. 5.PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2.HSE或者HSE/2.倍频可选择为2…
PPM是石英晶振的基本单位之一,表示晶振的精度和相对偏差, PPM代表着百万分之一,它表明晶体的频率可能会偏离标称值多少.晶振频率是以MHZ(10的6次方)和KHZ(10的3次方)为基本单位的,标称频率10MHZ晶振的频率偏差10HZ就刚好是1PPM. 厂家会把每款晶振按照精度的不同分品质等级,一般分10PPM.20PPM.50PPM和100ppm. 举例MC-306 32.768khz精度为20 ppm.误差:32.768*20/1000=0.65536.意味着真实频率在32.7673千赫(3…
写得不错,小白的我学习了 原文地址:关于晶振ppm作者:thomaswangbj XXppm就是说频率的误差=(xx/百万)*振荡器的标称频率 eg1:120ppm,27M的晶振,频率的误差 = 120/100万*27M=3240Hz 晶振的精度决定时钟的计时准确度. eg2: 所配晶振频率:32772.2HZ,误差为+1.2ppm 一年的误差计算过程为: Δf    =  +1.2/100万*32772.2 Δt/秒 = Δf/32772.2 = 1.2/100万 一年的误差 = Δt*24*…
晶振是石英晶体谐振器(quartzcrystal oscillator)的简称,它被称为电路系统的心脏,它为整个系统提供"心跳".中央处理器(CPU)一切指令的执行都是建立在这个"心跳"上的,这个心跳就是CPU执行指令所必须的时钟频率信号,一般来说时钟信号频率越高,CPU的运行速度也就越快.只要是包含CPU的电子产品,都至少包含一个时钟源,有些在外面看不到晶振或者振荡电路,是因为在芯片内部被集成了. 1.晶振分类 1.1.无源晶振 无源晶振(晶体谐振器)工作原理:在…
PIC单片机之时钟设置 http://blog.csdn.net/superanters/article/details/8541650 内部时钟和外部时钟? PIC单片机有许多型号可以设置成 用外部时钟(如外部接个4MHZ的石英晶振),也可以设置成用内部RC时钟.而且还有许多型号可以选择多种频率的时钟. 如 PICLF1823 内部时钟最高可以到达32MHZ 最低可以达到 31kHz. 这事实上提供了一条降低功耗的新路子.一般的单片机降低功耗常常用的睡眠,而睡眠期间CPU是什么都不做.如果希望…
首先问题描述: 1.自己画的板子和淘宝买的最小系统板 系统时钟不一致,自己画的是8Mhz,HSE失败:最小系统板72Mhz 2.最小系统板在程序1运行仿真的时候,查看peripherals->Power,Reset and Clock Control(PRCC)是72MHZ,在程序2仿真的时候是8Mhz,程序SystemInit()所在的文件一模一样: 3.出现过8M晶振坏了,更换晶振后时钟源正常72Mhz 问题1原因: 1.注意晶振的匹配电容的值,测试版发现系统时钟有问题时,可以是晶振不起振,…
如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空.2)对于少于100脚的产品,有2种接法:  2.1)OSC_IN和OSC_OUT分别通过10K电阻接地.此方法可提高EMC性能.  2.2)分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出'0'.此方法可以减小功耗并(相对上面2.1)节省2个外部电阻. 以下是在ST英文网站FAQ上抄下的详细解释: 1) In 100…
ST官方标准库V3.5默认的外部晶振频率为8M,实际使用中外部晶振需要修改为16M: 经过实验,修改有效,具体的patch如下: 修改 HSE_VALUE 值 diff --git "a/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h" "b/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h" index 8bf7624..e0a…
stm32可选的时钟源 在STM32中,可以用内部时钟,也可以用外部时钟,在要求进度高的应用场合最好用外部晶体震荡器,内部时钟存在一定的精度误差. 准确的来说有4个时钟源可以选分别是HSI.LSI.HSE.LSE(即内部高速,内部低速,外部高速,外部低速),高速时钟主要用于系统内核和总线上的外设时钟.低速时钟主要用于独立看门狗IWDG.实时时钟RTC. ①.HSI是高速内部时钟,RC振荡器,频率为8MHz,上电后默认的系统时时钟 SYSCLK = 8MHz,Flash编程时钟. ①.HSE是高速…
一般来说,stm32f107都是用标配的晶振,比如8MHz. 但是,如果用别的晶振,比如13.56M的晶振,那串口接收还正常吗? 根据试验结果,很可能会飞码.比如说用串口助手发送的是0x35,但是在串口接收中断里面就会得到别的值,即上位机发送的数据和板子接收的数据不一致. 通过查资料,解决办法如下: 修改文件stm32f10x.h, 把 #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator i…
原因一 早些年,芯片的生产制作工艺也许还不能够将晶振做进芯片内部,但是现在可以了.这个问题主要还是实用性和成本决定的.   原因二 芯片和晶振的材料是不同的,芯片 (集成电路) 的材料是硅,而晶体则是石英 (二氧化硅),没法做在一起,但是可以封装在一起,目前已经可以实现了,但是成本就比较高了. 原因三 晶振一旦封装进芯片内部, 频率也固定死了,想再更换频率的话,基本也是不可能的了,而放在外面, 就可以自由的更换晶振来给芯片提供不同的频率.有人说,芯片内部有 PLL,管它晶振频率是多少,用 PLL…
原因一 早些年,芯片的生产制作工艺也许还不能够将晶振做进芯片内部,但是现在可以了.这个问题主要还是实用性和成本决定的.   原因二 芯片和晶振的材料是不同的,芯片 (集成电路) 的材料是硅,而晶体则是石英 (二氧化硅),没法做在一起,但是可以封装在一起,目前已经可以实现了,但是成本就比较高了. 原因三 晶振一旦封装进芯片内部, 频率也固定死了,想再更换频率的话,基本也是不可能的了,而放在外面, 就可以自由的更换晶振来给芯片提供不同的频率.有人说,芯片内部有 PLL,管它晶振频率是多少,用 PLL…
由于STM32F10x库官方采用的是默认的外接8MHz晶振,因此造成很多用户也采用了8MHz的晶振,但是,8MHz的晶振不是必须的,其他频点的晶振也是可行的,只需要在库中做相应的修改就行.    在论坛上看到很多用户反映,使用外接12MHz的晶振,会造成很多的问题,如USART的波特率不正确,Systick走时不准等问题,在无论是在实际调试还是在软件模拟中都会发现这个情况,其实,这不能怪ST官方,我们必须肯定ST官方为方便用户开发所做的努力,下面我们就通过简单的三个步骤就可以让你随意的使用4—1…
STM32官方提供的库文件中,HSE(外部高速时钟)默认为8MHz,最高主频为8*9=72MHz,如果将HSE变为12MHz,不修改库文件的话,最高主频则变为12*9=108MHz,最典型的问题就是USART可以通信,但是接收到的数据与发送的不一致,并且找不到啥原因,害的我瞎折腾了一整天,下面列举需要修改的地方. 1.修改stm32f10x.h中的HSE_VALUE,原本的代码如下: #if !defined HSE_VALUE #ifdef STM32F10X_CL #define HSE_V…
今天(2014.4.21)把stm32f107的程序下载到stm32f103的板子上,发现串口收不到数据,突然想起晶振频率没有修改,#define HSE_VALUE    ((uint32_t)13560000) /*!< Value of the External oscillator in Hz */ 这个要改回去,因为外接晶振是8M 之后试验,发现有数据,但是乱码.百思不得其解,无意中发现,PC的波特率设置为9600,板子的波特率设置为19200就不会乱码.刚好是2倍的关系.顺藤摸瓜问度…
前言 在做“自制继电器上位机控制软件”项目的时候,下位机用到USB虚拟串口,将以前写好的USB虚拟串口程序移植到下位机,发现程序计算机无法识别到虚拟串口STMicroelectronics Virtual COM Port,后来分析发现是晶振的问题,之前MCU外部晶振是8M,而项目中用的是12M晶振,这个时候MCU程序需要做相应修改. 修改分为三步: (1)在 stm32f10x.h 中,将 #define  HSE_VALUE  ((uint32_t)8000000)  修改为:#define…
共计修改三个参数: 1.HSE_VALUE   具体位置在stm32f4xx.h中 2.PLL_M          具体位置在system_stm32f4xx.c中 3.Keil编译器 工程的Options 下的Target中的Xtal(MHz) 的值为25.0 修改方法: 例子: 外部晶振是25M的 1.#define PLL_M      25 2.#define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External os…
实时时钟晶振为什么选择是32768Hz的晶振,在百度上搜索的话大部分的答案都是说2的15次方是32768,使用这个频率的晶振,人们可以很容易的通过分频电路得到1Hz的计时脉冲.但是话有说回来了,2的整数次方很多为什么偏偏选择15呢? 以下是关于时钟晶振频率选择所需要考虑的几点: 1.频度越高计时精度越高,误差越小. 2.由于各种原因,每个晶振的实际频率与其标称频率之间也存在偏差. 3.晶振的工作环境对晶振的频率也有影响,用晶振的频率稳定度来表示不同晶振受环境影响的大小,其单位是ppm(百万分之一…
硬件平台为微雪BLE400的(将原来的16mhz晶振改为32mhz.两个旁电容改为22pf) 以nRF51_SDK_10.0.0_dc26b5e\examples\ble_peripheral\ble_app_uart项目为例 在main.c中进行修改 #if defined( USB_SYSTEM_CLOCK_32MHZ) #define DEVICE_NAME "Nordic_UART_32mhz" /**< Name of device. Will be included…
STM32F407的库文件中默认晶振值为25MHz,若外接晶振8MHz,则需修改以下几个地方: 1)修改HSE_VALUE的值 将#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ 修改为 #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ 2)修改PLL_M…
这里涉及到一个很重要的寄存器,时钟配置寄存器:RCC_CFGR #if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL) /* #define SYSCLK_FREQ_HSE HSE_VALUE */ #define SYSCLK_FREQ_24MHz 24000000 #else /* #define SYSCLK_FREQ_HSE HSE_VALUE */ /* #defin…
N76e003切换到外部时钟的资料很少(因为N76e003的片子是不支持无源晶振的,有源晶振的成本又很高,所以网上很少有对N76e003的介绍).有图有真相: 代码如下: main.c #include <N76E003.H> #include <SFR_Macro.h> #include <Function_Define.h> bit BIT_TMP; // 调用 SFR_Macro.h 使用的 void main(void){ // 开通外部 set_EXTEN1;…
这是我在做单片机最小系统板时候碰到的问题,之前虽然也做过相似的板子,可是未曾出现过无源晶振不起振的问题.下面是我在遇到问题后的一些检查,排除问题的过程.本人小菜鸟一个,文章中如有错误和不足,还望各位大佬指正和补充. 事情是这样的,本人做了一款32单片机最小系统板(先叫它老大),在老大出来之前的前五个月,我用相同的PCB板焊了一款用在毕设上面,那个是能正常工作的.板上有个小负载,LED灯.想让这个灯闪烁.代码是没有问题的,因为下载到从网上买的单片机是正常工作的.用JLink下载到自己做的板子上也是…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT10xx系列MCU外接24MHz晶振的作用. 痞子衡之前写过一篇关于时钟引脚的文章 <i.MXRT1xxx系列MCU时钟相关功能引脚的作用>,里面简单提及了外部晶振相关引脚的作用,但是并没有详细展开.最近在客户支持中,有客户咨询项目板级设计上能否将外部 24MHz 晶振完全去掉,就使用芯片内部集成的 RC24M 做初始时钟源.今天痞子衡就详细展开这个话题: Note: 本文中图片代码均以 i.MXRT1050 为例,但…