当前位置:首页 > 公众号精选 > 玩转嵌入式
[导读]新项目用到STM32单片机,用到了500k波特率的CAN通讯,因此没有使用内部晶振,而是用到了12M的外部晶振。该项目的程序员在调试的时候发现,STM32的时钟频率不对,于是我给帮忙看了一下,找到了原因。


1.问题的提出

新项目用到STM32单片机,用到了500k波特率的CAN通讯,因此没有使用内部晶振,而是用到了12M的外部晶振。该项目的程序员在调试的时候发现,STM32的时钟频率不对,于是我给帮忙看了一下,找到了原因。

2.Datasheet上的答案

通过翻阅单片机的datasheet我们知道,STM32默认的外部晶振频率为8M,可输出72M的频率。于是找到了库函数的一段注释,如下:
The default value of HSE crystal is set to 8 MHz (or 25 MHz, depedning on the product used), refer to "HSE_VALUE" define in "stm32f10x.h" file.When HSE is used as system clock source, directly or through PLL and you are using different crystal you have to adapt the HSE value to your own configuration.
根据描述,将stm32f10x.h中大约在0121行将8000000修改为 12000000
   //微信公众号:玩转嵌入式,ID:micropoint8 #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) 12000000 ) /*!< Value of the External oscillator in Hz */ #endif /* STM32F10X_CL */ #endif /* HSE_VALUE */ //微信公众号:玩转嵌入式,ID:micropoint8  

3.依然无效

不过很奇怪的是,即使修改了此处的值,PLL的时钟还是不正确(PLL按9倍频配置)。

4.PLL时钟配置

顺着代码寻找原因,最后发现真正起作用的部分在 system_stm32f10x.c里的 SetSysClockTo72(void)函数(0993行,这里假设我们希望MCU工作在72MHZ)。
在1058行有这样一段代码:
#else  /*  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_PLLMULL6); 
注释部分是函数自带的,真正起作用的部分在这里,因此把RCC_CFGR_PLLMULL9改为 RCC_CFGR_PLLMULL6

至此,STM32可正常输出PLL时钟频率。

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

该系列产品有助于嵌入式设计人员在更广泛的系统中轻松实现USB功能

关键字: 单片机 嵌入式设计 USB

单片机编程语言是程序员与微控制器进行交流的桥梁,它们构成了单片机系统的软件开发基石,决定着如何有效、高效地控制和管理单片机的各项资源。随着微控制器技术的不断发展,针对不同应用场景的需求,形成了丰富多样的编程语言体系。本文...

关键字: 单片机 微控制器

单片机,全称为“单片微型计算机”或“微控制器”(Microcontroller Unit,简称MCU),是一种高度集成化的电子器件,它是现代科技领域的关键组件,尤其在自动化控制、物联网、消费电子、汽车电子、工业控制等领域...

关键字: 单片机 MCU

STM32是由意法半导体公司(STMicroelectronics)推出的基于ARM Cortex-M内核的32位微控制器系列,以其高性能、低功耗、丰富的外设接口和强大的生态系统深受广大嵌入式开发者喜爱。本文将详细介绍S...

关键字: STM32 单片机

在当前的科技浪潮中,单片机作为嵌入式系统的重要组成部分,正以其强大的功能和广泛的应用领域受到越来越多行业的青睐。在众多单片机中,W79E2051以其卓越的性能和稳定的工作特性,成为市场上的明星产品。本文将深入探讨W79E...

关键字: 单片机 w79e2051单片机

单片机,又称为微控制器或微处理器,是现代电子设备中的核心部件之一。它集成了中央处理器、存储器、输入输出接口等电路,通过外部信号引脚与外部设备进行通信,实现对设备的控制和管理。本文将详细介绍单片机的外部信号引脚名称及其功能...

关键字: 单片机 微控制器 中央处理器

随着科技的飞速发展,单片机和嵌入式系统在现代电子设备中的应用越来越广泛。它们不仅提高了设备的智能化水平,还推动了各行各业的创新与发展。在单片机和嵌入式系统的开发中,编程语言的选择至关重要。本文将深入探讨单片机和嵌入式系统...

关键字: 单片机 嵌入式系统 电子设备

STM32与51单片机之间有什么差异呢?两者可以说是一场科技与性能的较量了。在科技飞速发展的今天,微控制器(MCU)已广泛应用于各类电子设备和系统中,发挥着举足轻重的作用。其中,STM32和51单片机作为两种常见的微控制...

关键字: STM32 51单片机 MCU

PLC(可编程逻辑控制器)和单片机是两种不同的控制设备,它们之间存在明显的区别:

关键字: 单片机 plc 控制器

Holtek隆重推出全新一代32-bit Arm® Cortex®-M0+ 5V CAN MCU - HT32F53231/HT32F53241/HT32F53242/HT32F53252。这一系列单片机带有来自Bosc...

关键字: MCU 工业自动化 单片机
关闭
关闭