您好!欢迎访问江南官方体育app下载网站(JN).注册登录
产品搜索:
江南官方体育app下载网站(JN).注册登录
当前位置:首页 > 产品中心 > 32位ARM核Cortex系列
+     低压差线性稳压器
+     白光LED驱动
+     MOSFET
+     32位ARM核Cortex系列
+     CMOS逻辑电路
STM32各个系列时钟调高时出现异常案例-【32位ARM核Cortex系列】
发布时间:2024-03-09 15:41:44 来源:江南官方体育APP下载 作者:江南app官方网站

  STM32用户反馈,使用STM32F103内部时钟,把系统时钟配置成64MHz单片机就不跑了,配置成36MHz程序就正常妥妥的,频率稍高点就容易导致死机。他贴出的代码如下:void RCC_Configuration(void)

  结合他的问题描述及他贴出来的代码,大致可以判断很可能是因为他屏蔽了指令预取和flash读取等待延迟的参数配置而导致的。即上面两条红色标注出来的代码。

  后来我明确地提醒他这点后,他似乎并没及时反应过来,还折腾了几下才开启了上述配置,问题最终得以解决。

  其实,关于这个问题经常有人遇到,尤其是那些基于STM32标准固件库进行开发或自行创建工程的新手更容易碰到这个问题。主要原因是因为他们对上述两行代码的功能不了解,导致有意或无意的将库例程中相关代码屏蔽掉无视掉而不做配置、或者配置不正确。

  这里将这个问题再次分享出来,并对那两行代码简单做些解释。希望更多人对此有所知晓,少在这个地方走弯路。

  现有STM32各个系列都是基于ARMcortexM内核的微处理器,它们采用多级流水线的哈佛结构,即一条指令的执行分割为几个阶段,如取指、译码、执行等,使得当前指令的取指操作完成后就可以开始后续指令的取指、译码等操作,程序指令就这样像流水一样执行下去,大大提高了指令的执行效率。

  具体到STM32各系列单片机,这个指令预取功能的开启或关闭可以软件配置,一般配置为开启。要注意的是,复位后不同的系列该功能有的默认为开启有的则默认为关闭。比方STM32F1系列的flash指令预取功能就是默认打开的,当然你也可以关闭。其中,明确要求打开的情景就是当那个AHB时钟预分频系数不等于1时。

  再比如STM32F4系列,它的指令预取功能在芯片复位后是默认关闭的,你可以自行打开。但明确要求关闭的场景就是芯片的供电电压低于2.1V时。

  上面大致介绍了指令预取功能,预取主要是为了实现指令读取和执行的高效性。具体细节请参考STM32和ARM cortex内核的相关技术手册。

  我们知道CPU的运行速度可调、可以很快,通常使用高速总线访问FLASH接口,FLASH收到来自CPU的取指指令后然后去读取相应地址的指令或数据。Flash自身的读取速度相比CPU的高速请求来说可能会出现滞后,往往需要CPU做相应的延时等待。为了让CPU准确及时读取Flash 数据,我们须根据 CPU 时钟频率以及器件供电情况在Flash存取控制寄存器 (FLASH_ACR)中正确地编程等待周期数(LATENCY),类似上面提到另外一句代码:

  下面是STM32F4系列部分产品线的LATENCY设置的表格。从表格中可以看出LATENCY参数的设置与CPU的时钟、电源电压都有关系。另外,当电源电压在2.1V以下时要关闭预取。

  在设置上面的等待周期参数时,选择合适的就好。不难理解,设置太大了影响CPU性能的充分发挥,太小了容易导致异常。

  具体回到开头所提案例,它出现死机问题极可能是因为没有合理配置等待周期参数导致异常,因为它屏蔽了例程中那两句配置代码,即使用其默认功能,对于STM32F1,指令预取功能默认为开启。而STM32F1系列芯片的latency默认值即为0,无等待。这样的话,当他把时钟调高到一定程度时出现死机就不难理解了。

  另外,当他反馈时钟调高产生异常时,我还给他提醒了注意检查VDDA的电源情况。我碰到有人遇到因VDDA没接好使得PLL不正常的情况。我们知道,对于STM32芯片,调高其工作时钟,往往借助于锁相环。而PLL的供电来自VDDA,如果PLL没有被正常供电,也是个非常隐蔽的麻烦。曾经有个客户为此折腾好久,才愿沉下心来检查其“坏品”的电源脚,结果发现有个VDDA脚虚焊。一直以芯片低频没问题,频率高了就异常为由怀疑芯片品质问题而耽误时间。

  最后给点建议,做STM32开发的话,尤其是新手,如果参照ST的官方例程的话,有些配置在没看懂的情况下不要轻易屏蔽或修改。我碰到多个类似本案随意屏蔽例程中的初始化配置代码或断言代码出现异常,自己又找不到方向的。另外,尽可能使用ST官方的stm32cubeMx图形配置工具做基本的配置,通过它来生成初始化配置文件,这样方便省事很多。当然,即使使用STM32CUBEMX配置也不是万能的。比方:曾经有人使用STM32F0开发产品,用CUBEMX配置初始化文件,刚开始配置时时钟选择得比较低, STM32CubeMx自然根据他选择的时钟做了相关参数配置。后来他自己在用户代码里手动调高了时钟,而不知相应调整跟FLASH读取等待有关的参数,也是发生跟本案同样的情况。

  近日为某个项目写了个草稿程序,即非正式程序,后来发现老是进入hardfaulthandler,原来是堆栈溢出,后仔细查看发现函数调用纵深太深,最多的时候可保持7个函数在堆栈中调用。 因此有心得如下: 一、函数调用不要纵深太深,即以下模式: main() { fun1(); } fun1() { fun2(); } fun2() { fun3(); } fun3() { fun4(); } fun4() { fun5(); } fun5() { fun6(); } fun6() { fun7(); } 这样子main函数要调用fun1函数完成某个功能,则要一直调到fun7为止,才能完成。这样导致堆栈中

  近年来,随着信息产业的高速发展,点阵LED 显示屏已广泛应用于金融行业、邮电行业、体育馆、广告业等各种广告发布和信息显示系统,成为信息传送的重要手段。本文介绍的LED 书写点阵屏,不但可以像普通显示屏一样作为信息输出设备,而且可以通过光笔直接在LED 显示屏上进行信息输入,普通的显示屏也具有手写的功能了。 1 硬件系统设计 本系统总体框图如图1 所示,由键盘与显示模块、光笔模块、LED 点阵屏模块、STM32 控制模块、电源模块五部分组成。 图1 总体方案方框图 1. 1 核心控制模块 本系统以STM32F103VCT6 为控制核心。 STM32 是32 位微处理器,具有低功耗,中断延迟小,高性能等特点

  存储器映射是指把芯片中或芯片外的FLASH,RAM,外设,BOOT,BLOCK等进行统一编址。即用地址来表示对象。这个地址绝大多数是由厂家规定好的,用户只能用而不能改。用户只能在挂外部RAM或FLASH的情况下可进行自定义。 Cortex-M3支持4GB的存储空间,它的存储系统采用统一编址的方式; 程序存储器、数据存储器、寄存器被组织在4GB的线性地址空间内,以小端格式(little-endian)存放。由于Cortex-M3是32位的内核,因此其PC指针可以指向2^32=4G的地址空间,也就是0x0000_0000——0xFFFF_FFFF这一大块空间。见图1: 图1 Cortex-M3的存储器映射

  的存储器映射 /

  (2) 时钟配置寄存器 :RCC_CFGR 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 - MCO - USBPRE PLLMUL PLLXTPRE PLLSRC 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ADCPRE PPRE2 PPRE1 HPRE SWS SW Bit 26~Bit 24:芯片时钟输出 0xx:禁止输出 100:选择系统时钟SYSCLK 101:选择HSI时钟 110:选择HSE时钟 111:选择PLL分频输出(2分频) Bit 22:U

  树架构(下) /

  tl431 lm285 385 之类的,1.2V的 stm32的ad参考电压要求 2.4v REF2930-3V要二十多块,价格过高,查力源报价也就几块钱,是不是TI的供货出现了问题。既然3.0V基准少而不好找,我想使用2.5V基准。 3V的电压基准,除了TI还可以考虑公司,比如MAXIM的:MAX6003。MAX6003的初始精度 1%,比REF2930来得好。 又找了一下,MAX6010B更好: 超低电源电流:5 A (最大值) 3.2V输入下输出3V 小尺寸、3引脚SOT23封装 初始精度: 0.4% (最大值) 低温漂:50ppm/ C (最大值) 200mV低压差 负载调节(7mA源出电流):200 V/m

  让云端应用设计变得更节能环保,STM32F334集成高分辨率定时器等先进功能,为数字功率转换应用带来高能效。     中国,2014年8月6日 ——横跨多重电子应用领域、全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)推出最新的数控电源微(STM32F334),为推动数字经济增长的云计算技术进一步提高能效。     今天的数字基础设施耗电量巨大。在全球大约286,000千兆瓦时(GWh) 的年用电量中,仅数字中心一种产业就占据约1.3%。根据Uptime Institute机构的能源利用率(PUE, Power Usage Effective

  STM32的RTC晶振经常出现不起振的问题,这已经是“业界共识”了。很多人在各种电子论坛上求助类似于“求高手指点!RTC晶振不起振怎么办”的问题,而其答案基本可以概括为“这次高手帮不了你了” 更有阴谋论者提出让人啼笑皆非的解释——STM32的RTC晶振不起振是ST与晶振厂商串通后故意搞出来的,目的是提高某晶振厂商高端晶振的销量。 最近做的几块板子也用到了STM32的RTC,前后两版一共做了大概6片,幸运的是并未遇到晶振不起振的现象。而我采用的是3毛钱一个的普通晶振,并未选用传说中低负载高精度晶振。后来在另外一片实验性质的板子上首次遇到了晶振不起振的问题,而且做了2片都不起振,这才让我意识到这个问题的严重性。

  STM32的时钟树 时钟信号推动单片机内各个部分执行相应的指令,时钟就像人的心跳一样。 STM32本身十分复杂,外设非常多,任何外设都需要时钟才能启动,但并不是所有的外设都需要系统时钟那么高的频率,如果都用高速时钟势必造成浪费。同一个电路,时钟越快功耗越大、抗电磁干扰能力越弱。复杂的MCU采用多时钟源的方法来解决这些问题。如下图,是STM32的时钟系统框图。 如上图左边的部分,看到STM32有4个独立时钟源,HSI、HSE、LSI、LSE。 HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。 HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 LSI是低速内部时。

江南官方体育app 上一篇:英特尔进军Arm芯片领域! 下一篇:STM32 GPIO的基本结构
江南官方体育app 江南官方体育APP下载 新闻中心 产品中心 江南app官方网站 联系我们 网站地图
产品关键词: 低压差线性稳压器 | DC/DC转换器 | AC/DC转换器 | 电源管理单元 | 霍尔开关
白光LED驱动 | 音频功放 | 电压检测 | Li-ion电池充电管理 | 场效应管 | 模拟开关
Copyright [c]2018 江南官方体育app下载网站(JN).注册登录 版权所有 All Rights Reserved.
备案号:粤ICP备170082978号-17 技术支持:江南官方体育app
地 址:深圳市宝安区航城大道航城创新工业园
    A5栋二楼2016-218
联系人:刘先生 13424245917
    张先生 13751282129
电 话:0755-86249117
传 真:0755-26502485
邮 箱:info@ztevone.com