推荐阅读最新更新时间:2026-03-25 12:12
STM32单片机外部晶振配置时钟设置
学习野火的固件库UART1串口案例时,用的是SIM9008模块应用板上的STM32103F103RB芯片,使用的外部晶振是12M。 串口读取的是乱码 默认的外部晶振是8M 由于STM32的库默认是外部晶振8M的情况下实现的,所以配置串口波特率的时候也是按8M,包括主频。 如果采用外部晶振8M或12M,配置时钟为72MHZ 。 1)在system32_stm32f10x.c文件中的void SetSysClockTo72(void)里这样改: 8M: RCC-》CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);//8*9=72 12M: RCC-》CFGR
[单片机]
STM32系统时钟设置,采用外部有源晶振相关配置问题
在调试STM32系统时钟设置时遇到一个问题:TIM2定时1Ms,TIM2中断服务函数time++,time=100时LED状态改变。程序运行后发现LED不是按照0.1S的时间闪烁,闪烁的很慢。 查找程序发现在系统时钟初始化时,RCC_HSEConfig(RCC_HSE_Bypass); 语句配置不对,此语句解释为HSE晶振被外部时钟旁路。指将芯片内部的用于外部晶体起振和功率驱动等的部分电路和XTAL_OUT引脚断开,这时使用的外部时钟是有源时钟或者其他STM32提供的CCO输出等时钟信号,直接单线从XTAL_IN输入,这样即使外部有晶体也震荡不起来了。 因为之前用的是有源晶振,接法如下图1:HSE配置如下:RCC_HSEConfi
[单片机]
STM32系统时钟设置,采用外部有源晶振相关配置问题
调试STM32系统时钟设置时遇到一个问题:TIM2定时1Ms,TIM2中断服务函数time++,time=100时LED状态改变。程序运行后发现LED不是按照0.1S的时间闪烁,闪烁的很慢。 查找程序发现在系统时钟初始化时,RCC_HSEConfig(RCC_HSE_Bypass); 语句配置不对,此语句解释为HSE晶振被外部时钟旁路。指将芯片内部的用于外部晶体起振和功率驱动等的部分电路和XTAL_OUT引脚断开,这时使用的外部时钟是有源时钟或者其他STM32提供的CCO输出等时钟信号,直接单线从XTAL_IN输入,这样即使外部有晶体也震荡不起来了。 因为之前用的是有源晶振,接法如下图1:HSE配置如下:RCC_HSEConfig
[单片机]
STM32使用外部晶振并设置主频为48M
因为项目上对时钟要求不高,只需要用到一个9600波特率的串口和一些普通IO口,下面是简单的使用方法。 void MYRCC_DeInit(void) { RCC- APB1RSTR = 0x00000000;//复位结束 RCC- APB2RSTR = 0x00000000; RCC- AHBENR = 0x00000014; //睡眠模式闪存和SRAM时钟使能.其他关闭. RCC- APB2ENR = 0x00000000; //外设时钟关闭. RCC- APB1ENR = 0x00000000; RCC- CR |= 0x00000001; //使能内部高速时钟HSION RCC- CF
[单片机]
STM32外部晶振不起振
芯片:STM32F429 开发平台:Keil 问题: STM32外部晶振不起振,选择了内部16MHZ,从而导致延时函数、波特率、定时器等等有问题。 有源晶振和无源晶振的区别 有源晶振一般4个脚,一个电源,一个接地,一个信号输出端,一个NC(空脚)。有个点标记的为1脚,按逆时针(管脚向下)分别为2、3、4。 无源晶振有2个引脚,需要借助于外部的时钟电路(接到主IC内部的震荡电路)才能产生振荡信号,自身无法振荡. 单片机外部晶振接的是无源晶振,因此必须首先烧写程序进去,配置好相应的寄存器,晶振才会起振。如果没有烧写程序的新单片机(未配置寄存器)则不会起振。 由于我烧写过程序,并且程序在跑,只是时钟不对。因此进
[单片机]
STM32使用外部16MHZ晶振总结
做小封装产品设计的朋友或许知道3225-4PIN的晶振,为何8MHZ晶振批量价格要到2元一片,而16MHZ晶振只需要0.4元甚至更少。究其原因是因为3225封装的晶振目前全球最低频率一般为8MHZ,而国内8MHZ达不到精度指标,所以市场上的8MHZ晶振一般为进口晶振,因此成本被垄断。 图1 3225封装晶振 STM32单片机学习者一开始用的晶振一般是2PIN的8MHZ晶振,一旦正真做产品研发的时候,使用到3225的8MHZ晶振的话,成本是个不小的挑战。笔者现针对这个问题,提出使用16MHZ晶振代替的方法。 图2 STM32时钟树状图 由上图可以看出,如果想兼容8MHZ晶振,必须在时钟倍频前2分频。程序设计如
[单片机]
STM32使用16M外部晶振时串口乱码
1.出现的问题: 修改RCC配置代码如下: 将语句:RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //之前使用8MHz外部晶振,9倍频到72MHz 修改为:RCC_PLLConfig(RCC_PLLSource_HSE_Div2, RCC_PLLMul_9); //使用16MHz外部晶振之后,2分频再9倍频到72MHz 测试 中发现串口1一直是乱码。 2.解决办法: (1).去除库文件:stm32f10x.h的只读属性。 (2).此文件中找到语句:#define HSE_VALUE ((uint32_t)8000000) /*! Value of the Ext
[单片机]
在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法
如果使用内部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 and 144 packages, the OSC_IN /OSC_Out pins are a de
[单片机]