搜索
bottom↓
回复: 22

请教关于缩短STM32F405的启动时间

[复制链接]

出0入0汤圆

发表于 2017-2-22 15:48:44 | 显示全部楼层 |阅读模式
请教各位大佬,

用STM32F405做了一个传感器采集和存储的电路,从系统上电到进入MAIN函数IO口初始化完成输出高电平,一共约60ms,我记得论坛有人说过启动时间应该几个ms级的,不知道多在哪里了?

BOOT设置是FLASH读取模式,外部8M晶振(改试了下内部晶振,变化不大),不知道下面该怎么改了。

出0入0汤圆

发表于 2017-2-22 16:14:46 | 显示全部楼层
调用main方法之前实际上是有调用SystemInit方法的,该方法中是对时钟进行配置,如果你可以优化该方法,使得初始化速度更快,那就行。不过方法里面一大批等待PLL稳定等,估计时间不好缩短啊

出10入23汤圆

发表于 2017-2-22 16:20:20 来自手机 | 显示全部楼层
顶楼上,pll是闭环的,从上电到稳定需要时间

出0入0汤圆

发表于 2017-2-22 16:22:22 | 显示全部楼层
你可以先选片内RC振荡,再把把PLL禁掉,看看启动时间多长,这个应该是最快的启动配置了。

出0入0汤圆

发表于 2017-2-22 16:52:55 | 显示全部楼层
如果只是想要端口尽早输出高电平,可以加外部上拉,或者在启动代码中立即初始化端口并输出。

出0入0汤圆

 楼主| 发表于 2017-2-22 18:33:31 来自手机 | 显示全部楼层
wzd5230 发表于 2017-2-22 16:14
调用main方法之前实际上是有调用SystemInit方法的,该方法中是对时钟进行配置,如果你可以优化该方法,使得 ...

那么改变pll的频率是否能减少时间呢?

出0入0汤圆

 楼主| 发表于 2017-2-22 18:38:43 来自手机 | 显示全部楼层
zouzhichao 发表于 2017-2-22 16:20
顶楼上,pll是闭环的,从上电到稳定需要时间

这个稳定时间大概是什么量级?

出0入0汤圆

 楼主| 发表于 2017-2-22 18:39:32 来自手机 | 显示全部楼层
wangzheyu 发表于 2017-2-22 16:22
你可以先选片内RC振荡,再把把PLL禁掉,看看启动时间多长,这个应该是最快的启动配置了。 ...

少了不到十个ms。。。

出0入20汤圆

发表于 2017-2-22 15:48:45 | 显示全部楼层
内存初始化?
IDE内置的启动文件在进mian之前干了很多事情,尤其是很多事情是在PLL没起来的时候干的,这个时候就是内部RC的频率,本来跑满168M时只要1ms干完的事情现在需要21ms,这个影响就大了。
试试看直接把SystemInit干掉~

另外,用IDE的调试功能看一下每个函数的执行时间就知道时间都花在哪里了。
以及,如果是简单复位的,有相当大概率是复位的时间过长,或者重复多次复位。拿示波器看看就知道了~

出0入0汤圆

 楼主| 发表于 2017-2-22 19:43:16 来自手机 | 显示全部楼层
Error.Dan 发表于 2017-2-22 19:04
内存初始化?
IDE内置的启动文件在进mian之前干了很多事情,尤其是很多事情是在PLL没起来的时候干的,这个 ...

大神,这个systemInit怎么干掉啊。。。

出0入131汤圆

发表于 2017-2-22 19:48:20 | 显示全部楼层
要这么快干什么? 我想知道你为什么要求这么快?

出0入22汤圆

发表于 2017-2-22 20:33:35 来自手机 | 显示全部楼层
bearxy 发表于 2017-2-22 19:43
大神,这个systemInit怎么干掉啊。。。

startup.s里面有句汇编代码调用这个函数的。注释掉即可。
或者,找到这个函数,直接return

出0入0汤圆

 楼主| 发表于 2017-2-22 21:12:02 | 显示全部楼层
zxq6 发表于 2017-2-22 20:33
startup.s里面有句汇编代码调用这个函数的。注释掉即可。
或者,找到这个函数,直接return ...

不会影响程序的运行和其他函数的编译吗。。。。

出0入0汤圆

发表于 2017-2-22 22:04:31 | 显示全部楼层
; Reset handler
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
        IMPORT  SystemInit
        IMPORT  __main

                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP

把                 LDR     R0, =SystemInit
                 BLX     R0
删掉

出0入0汤圆

发表于 2017-2-22 22:06:24 | 显示全部楼层
自己根据实际应用需求写时钟初始化代码

出0入0汤圆

发表于 2017-2-22 22:11:50 | 显示全部楼层
在system_stm32f4xx.c里面有SystemInit,里面的SetSysClock()耗费时间,所以楼主可以在这里自己选择时钟和初始化,甚至不用PLL,看看提高多少

出0入0汤圆

发表于 2017-2-22 22:48:18 | 显示全部楼层
楼主应该检查一下单片机复位管脚的上拉电阻和复位电容的值是多少!

出0入0汤圆

发表于 2017-2-22 23:10:11 来自手机 | 显示全部楼层
不会是复位时间吧~~~ 看看复位键

出0入0汤圆

发表于 2017-2-22 23:11:36 来自手机 | 显示全部楼层
pll不会这么久  

出0入0汤圆

发表于 2017-2-23 08:49:07 | 显示全部楼层
以F0为例,PLL锁定时间约200us,用HSI只需要2us,楼主的需求可以做到。

出0入0汤圆

发表于 2017-2-23 09:07:21 | 显示全部楼层
感觉是复位电路的问题

出0入0汤圆

发表于 2017-2-23 09:20:29 | 显示全部楼层
进入 main 前 arm crt 会做 ram 变量的初始化。

出0入0汤圆

发表于 2017-2-23 09:29:24 | 显示全部楼层
如果只是要上电后先初始化IO口的话可以把IO口的初始化代码放到SystemInit函数,这样可以快一些
最快的方法修改启动代码,复位后就先初始化IO口,这个要用汇编修改
MCU复位后先是把有初始的变量值从FLASH读到RAM,然后把RAM中没有初值的变量写0,然后调用SystemInit,然后进入main函数
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 16:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表