STM32 固件库中RCC_GetClocksFreq()函数注意事项

发布者:心愿实现最新更新时间:2016-10-08 来源: eefocus关键字:STM32  固件库  注意事项 手机看文章 扫描二维码
随时随地手机看文章
在STM32固件库中,当你使用RCC_GetClocksFreq()这个函数的时候,需要注意一下。

(比如,你在使用串口的USART_Init的时候,就无形中使用到这个函数)。

当你使用外部晶振做为系统时钟的时候,而且外部晶振不是标准8MHz的时候,
你需要留意一下STM32的固件库,里面的stm32f10x_rcc.c这个文件,
在它的RCC_GetClocksFreq()这个函数中,有这么一段

void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)
{
u32 tmp = 0, pllmull = 0, pllsource = 0, presc = 0;

/* Get SYSCLK source ——————————————————-*/
tmp = RCC->CFGR & CFGR_SWS_Mask;

switch (tmp)
{
case 0×00:  /* HSI used as system clock */
RCC_Clocks->SYSCLK_Frequency = HSI_Value;
break;

case 0×04:  /* HSE used as system clock */
RCC_Clocks->SYSCLK_Frequency = HSE_Value;
break;

case 0×08:  /* PLL used as system clock */
/* Get PLL clock source and multiplication factor ———————-*/
pllmull = RCC->CFGR & CFGR_PLLMull_Mask;
pllmull = ( pllmull >> 18) + 2;

pllsource = RCC->CFGR & CFGR_PLLSRC_Mask;

if (pllsource == 0×00)
{/* HSI oscillator clock divided by 2 selected as PLL clock entry */
RCC_Clocks->SYSCLK_Frequency = (HSI_Value >> 1) * pllmull;
}
else
{/* HSE selected as PLL clock entry */

if ((RCC->CFGR & CFGR_PLLXTPRE_Mask) != (u32)RESET)
{/* HSE oscillator clock divided by 2 */

RCC_Clocks->SYSCLK_Frequency = (HSE_Value >> 1) * pllmull;
}
else
{
RCC_Clocks->SYSCLK_Frequency = HSE_Value * pllmull;
}
}
break;

default:
RCC_Clocks->SYSCLK_Frequency = HSI_Value;
break;
}
…. //省略以下代码
}

我们追踪到 HSE_Value 的定义

/* In the following line adjust the value of External High Speed oscillator (HSE)
used in your application */
#define HSE_Value ((u32)8000000) /* Value of the External oscillator in Hz*/

上面的定义说明:你需要在你的实际应用的时候,跟据实际的外部晶振的值,修改HSE_Value的值。
如果没有留意到这个情况的话,所有的跟求系统频率有关的应用,都会出错,例如在固件库stm32f10x_usart.c中的设计串口波特率的时候。。

关键字:STM32  固件库  注意事项 引用地址:STM32 固件库中RCC_GetClocksFreq()函数注意事项

上一篇:STM32 USB设计--硬件篇
下一篇:STM32 GPIO设置

推荐阅读最新更新时间:2024-03-16 15:14

ucgui汉字库存放到外部的flash(控件可用)及写外部FLASH软件
最近项目中用到几种字体,stm32的内部flash以经入不敷出。没办法!只好找度娘及求助群里的高手,这里对 Eric2013 , 洋洋kan世界 等高手表示感谢。学习了他们的一些思想。 下面是找到的相关链接: http://blog.chinaunix.net/uid-361890-id-2953183.html http://www.openedv.com/posts/list/9736.htm;jsessionid=6B5FA51FE6BBC280B752D9B6 3BA57895 这里我主要用的是 crazytyt 文章的方法,在他的基础上进行一定的改进。解决控件用汉字居中等问题。 其实我的方法很简单,增加了每
[单片机]
ucgui汉字库存放到外部的flash(控件可用)及写外部FLASH软件
STM32其他问题集锦
1、使用JTAGdownload程序至STM32F205XX(withCortex-M3) 问:請教各位先進,若欲使用JTAGinterface下載程序至STM32F205XX的板子,似乎一般是透過SEGGER的J-link,是否可使用其他的JTAG-USB下載線如Altera出的USBBlaster? 又是否只要符合JTAG規範的傳輸線皆可? 答1:只要支持M3并且支持STM32F2XX系列就可以,不一定非要JTAG,也可以使用SWD。 答2:ARMKEILULINK也行,兼容性非常好呀! 2、STM32触摸屏 问:我想用STM32来触摸一款触摸屏,因为我现在还不了解STM32以及触摸屏,所以我想问一下
[单片机]
高精度磁翻板液位计的原理及使用注意事项
高精度磁翻板液位计采用高纯度石英管,与其它类型液位计相比,具有指示精度高、显示清晰、密封性能好、耐高温、高压、使用寿命长、重量轻、安装维护简便等特点,广泛应用于石化、电力、锅炉制造等行业。 高精度磁翻板液位计原理和特点如下: a.高精度磁翻板液位计连通器式就是应用zui普通的玻璃液位计,它的特点是结构简单、价廉、直观,适于现场使用,但易破损,内表面沾污,造成读数困难,不便于远传和调节。 b.液位仪表浮力式液位计包括恒浮力式和变浮力式两类。 高精度磁翻板液位计安装、使用前须知: 1、本产品须垂直安装,zui大偏差为≤3o,通过法兰与容器连接。 2、高精度磁翻板液位计周围20cm距离内不得有铁、磁性物质。 3、将传感器与所测
[测试测量]
高精度磁翻板液位计的原理及使用<font color='red'>注意事项</font>
意法半导体微控制器STM32H5 探索套件加快安全、智能、互联设备开发
首款支持Secure Manager的开发套件,一个集成ST认证和维护的核心安全服务的系统芯片总包方案 2023年9月19日 ,中国 -意法半导体发布了一款功能丰富的STM32H5微控制器(MCU)开发板 。STM32H5微控制器是开发高性能数据处理和高级安全应用的理想选择,适合开发各种应用,例如,智能传感器、智能家电、工业控制器、网络设备、个人电子产品和医疗设备。 STM32H573I-DK探索套件让开发人员能够探索STM32H5集成的全部功能,例如,模拟外设、定时器、ST ART(自适应实时)加速器™、媒体接口和数学加速器,方便开发者评估工业可编程逻辑控制器(PLC)、电机驱动器,以及空调、冰箱和洗衣机等家电的智
[单片机]
意法半导体微控制器STM32H5 探索套件加快安全、智能、互联设备开发
利用STM32外部中断驱动四路数字触摸感应传感器模块
首先先介绍一下STM32的外部中断,当然这也不是我总结的,这是在那么多博客里找到的一篇个人认为总结不错的学习文档。先学到手再说吧! STM32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组位一个单位的,同组间的外部中断同一时间只能使用一个。比如说,PA0,PB0,PC0,PD0,PE0,PF0,PG0这些为1组,如果我们使用PA0作为外部中断源,那么别的就不能够再使用了,在此情况下,我们智能使用类似于PB1,PC2这种末端序号不同的外部中断源。每一组使用一个中断标志EXTIx。EXTI0 – EXTI4这5个外部中断有着自己的单独的中断响应函数,EXTI5-9共用一个中断响应函数,EXTI10-15共用一
[单片机]
利用<font color='red'>STM32</font>外部中断驱动四路数字触摸感应传感器模块
stm32的ucosII加上ucGUI学习
一、学会使用Keil调试工具。 单步调试,跳过函数,跳出函数 可以快速定位到程序的bug位置 二、系统板级驱动要加载需要的函数 三、怎么一步步根据具体需要添加系统功能 程序开发过程 1、加入所用到的封装库 2、写板级驱动BSP 包括GPIO配置 时钟配置 所用到的各种初始化函数用同一的void BSP_Init(void)函数调用 3、编写stm32f10x_it.c文件,设置中断服务函数 4、建立任务,包括定义任务名(函数名),堆栈空间(一个数组),任务优先级(一个宏定义) 5、任务优先级的选择,不合理的优先级,会导致程序无法正常运行,例如有7个任务,界面任务,触摸任务,三个L
[单片机]
STM32的FSMC驱动TFT笔记
1、FSMC初初了解: FSMC 包括4个模块: (1)AHB接口(包括FSMC配置寄存器) (2)NOR闪存和PSRAM控制器(驱动LCD的时候LCD就好像一个PSRAM的里面只有2个16位的存储空间,一个是DATA RAM 一个是CMD RAM) (3)NAND闪存和PC卡控制器 (4)外部设备接口 我们驱动TFT很明显用的是第二个模块:NOR闪存。 2、FSMC的外设地址选择 FSMC _Bank 用来选择外接存储器的地址,FSMC所控制的外存储器所映射的地址是0x6000 0000 ~ 0x9fff ffff 其中属于NOR FLASH 的是0x6000 0000 ~ 0x6fff ff
[单片机]
零序电流互感器安装注意事项
10kV中性点经低电阻接地系统在全国大城市电网上普遍采用。变电站、开闭站10 kV线路零序保护装置采用外附零序电流互感器' 电流互感器方式使用越来越多,由于过去零序电流互感器' 电流互感器使用不多,所以在安装使用上发现了许多问题,有的甚至于造成零序保护装置在接地故障时拒动,保护越级。 1 安装存在的问题   (1) 零序电流互感器' 电流互感器应装在开关柜底板上面,应有可靠的支架固定。但有些厂家或施工单位将零序电流互感器' 电流互感器安装在开关柜底板下面的支架上,更有甚者将零序电流互感器' 电流互感器捆绑在电缆上,这违背了开关柜全封闭原则,既不安全,也不防尘,更不防小动物,留下很多隐患。   (2) 电缆终端头穿过
[电源管理]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved