我们常用的STM32F10x系列单片机外部晶振频率默认指定成了8M,如果外部电路发生修改,外部晶振发生了变化,会导致系统主频变化,串口输出乱码。
外部晶振频率定义在库头文件:stm32f10x.h中:
/** * @brief In the following line adjust the value of External High Speed oscillator (HSE) used in your application Tip: To avoid modifying this file each time you need to use different HSE, you can define the HSE value in your toolchain compiler preprocessor. */ #if !defined HSE_VALUE #ifdef STM32F10X_CL #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ #else #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ #endif /* STM32F10X_CL */ #endif /* HSE_VALUE */
HSE_VALUE就是外部晶振的频率,我们可以看到代码中定义了两种频率:25M和8M,默认情况下使用的是8M。注释里说如果不想修改代码,也可以在编译宏定义中定义HSE的值。当然直接修改头文件也可以:
修改方法,比如要修改成12M:
1.修改stm32f10x.h
#if !defined HSE_VALUE #ifdef STM32F10X_CL #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ #else //#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ #define HSE_VALUE ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */ #endif /* STM32F10X_CL */ #endif /* HSE_VALUE */
2.为保证系统主频还是72M,还要改system_stm32f10x.c里的SetSysClockTo72()函数:
/* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */ RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
通过注释可以看到72M是通过HSE*9得到,现在HSE成了12,PLLNUM只需要6就可以到72M:
/* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */ RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); //RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9); /* PLL configuration: PLLCLK = HSE * 6 = 72 MHz */ RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6);
重新编译运行,串口输出正常。
相关推荐
STM32F4xx_AN3988_V1.1.0可能是意法半导体提供的一个应用笔记或固件包,包含了关于STM32F407内部晶振配置的详细信息和技术指南。用户可以参考这份文档来学习如何优化和管理内部晶振,以及如何使用提供的工具进行配置...
这篇STM32学习笔记主要涵盖了STM32的基础知识,包括时钟系统、寄存器配置、中断管理以及系统复位等方面。 1. STM32的时钟系统: - AHB(Advanced High-performance Bus)系统总线分为APB1和APB2,其中APB2工作频率...
STM32学习笔记,作为一款基于ARM Cortex-M内核的微控制器,STM32具有丰富的功能和广泛应用场景,尤其适合嵌入式系统开发初学者。本文档主要涵盖STM32的基础知识,包括芯片介绍、新建工程流程以及GPIO的输入输出操作...
- 32.768KHz低速外部晶振,作为实时时钟(RTC)的时钟源。 时钟源的开启和关闭可以独立控制,以优化电源消耗。通过预分频器,可以对AHB、APB2和APB1的时钟频率进行配置。AHB和APB2的最高频率可达72MHz,而APB1最高...
### STM32学习笔记知识点梳理 #### 一、STM32 GPIO操作 **知识点1:通过原理图了解引脚功能** - **要点说明**:在STM32开发中,了解引脚的功能非常重要。通常,可以通过查看开发板的原理图来确定特定引脚的功能。 ...
- **外部晶振**:提供8MHz和32.768KHz的频率源。 - **3.3V电源接口**:为电路板上的3.3V设备提供电源。 - **ADC拨盘调节电位器**:用于模拟数字转换实验的模拟信号调节。 - **复位微动按键**:用于复位STM32F103RC...
在这个学习笔记中,我们将深入探讨STM32F4xx的时钟配置以及相关的一些关键概念。 首先,STM32F4xx的时钟系统是整个处理器工作的心脏,它决定了所有外设和内核的速度。最高层级的系统时钟(SYSCLK)是系统的主时钟源...
STM32学习笔记——系统定时器SysTick的使用 该资源为STM32学习笔记,详细介绍了RCC系统时钟的配置方法,内有程序代码,可以正常运行,注释详细。主要讲解了SysTick定时器的使用和配置。 一、SysTick定时器概述 ...
### STM32学习笔记知识点详解 #### 一、STM32 Flash操作函数 **知识点概述:** STM32 Flash操作函数主要用于对STM32微控制器内部的Flash存储器进行读取、状态检查、擦除及写入等操作。这对于开发基于STM32的应用...
2. 时钟源:可以选择外部晶振或内部RC振荡器,外部晶振提供更精确的时钟。 3. 复位电路:确保MCU能够正确启动,通常包含电源复位和按钮复位。 4. 排阻和电容:连接到GPIO引脚以保护和稳定信号。 5. 编程和调试接口:...
根据提供的标题、描述以及部分内容,我们可以深入探讨Cortex-M3处理器及其在STM32平台上的应用,特别是关于ALIENTEK MiniSTM32开发板的学习笔记。 ### Cortex-M3的两种运行模式 Cortex-M3处理器有两种运行模式:**...
RCC管理着所有外设的时钟源,通常我们会选择使用外部晶体振荡器(如8MHz)作为主时钟源,因为外部晶振提供了更精确的时钟频率。 接下来,我们需要对时钟进行配置,这包括选择系统时钟源、设置预分频器和倍频器,以...
在STM32F207和STM32F217这两款器件中,内部集成了多种时钟源,如高速内部振荡器(HSI)、高速外部晶振输入(HSE)、低速内部振荡器(LSI)和低速外部晶振输入(LSE)。通过选择合适的时钟源并经过PLL的处理,可以...
STM32F103C8T6是意法半导体...这些知识点对于学习和使用STM32F103C8T6进行项目开发至关重要。通过深入理解和实践,开发者能够掌握如何设计和调试基于STM32F103C8T6的系统,从而应用于各种嵌入式应用场景。
* LSE Osc:低速外部时钟,接一个 32.768KHz 的晶振,用来给 RTC 时钟供电,RTC 时钟是内部实时时钟。 * LSI RC:内部低速 RC 振荡器,频率约为 40KHz,对独立看门狗提供时钟。 二、时钟监视系统(CSS) 时钟监视...
4. **晶振与时钟电路**:STM32需要一个外部时钟源来设定其工作频率。常见的选择是晶体振荡器(如8MHz或16MHz)或者陶瓷谐振器,配合内部倍频器产生所需的系统时钟,如72MHz。 5. **BOOT选择跳线**:STM32有多种启动...
通过实践和阅读"Fiction-stm32f103c8t6笔记",你将能深入了解STM32F103C8T6的硬件接口、软件编程及其实验案例,从而在嵌入式系统设计中游刃有余。记得在学习过程中结合实际项目,动手操作,理论与实践相结合,才能更...