发新帖我要提问
12
返回列表
打印
[PIC®/AVR®/dsPIC®产品]

MCU启动时间,需要6S?

[复制链接]
楼主: stly
手机看帖
扫描二维码
随时随地手机跟帖
21
supernan| | 2022-10-16 11:10 | 只看该作者 回帖奖励 |倒序浏览
检查一下震荡电路

使用特权

评论回复
22
huangchui| | 2022-10-16 11:12 | 只看该作者
或者用程序检测一下,最后使用的是哪个振荡器

使用特权

评论回复
23
songqian17| | 2022-10-16 11:14 | 只看该作者
如果是6s,那就废了。

使用特权

评论回复
24
zhanghqi| | 2022-10-16 11:16 | 只看该作者
不用想,一定是配置错了。

使用特权

评论回复
25
Bowclad| | 2022-11-2 20:32 | 只看该作者
不需要初始化那么多吧,光保留初始化IO口的

使用特权

评论回复
26
tpgf| | 2022-11-4 11:37 | 只看该作者
单片机的启动过程是加电后,先运行芯片内部固有程序(这个程序是用户访问不到也改写不了的),即启动代码。启动代码程序建立完运行环境后,会去读串口状态,就是用户下载程序用到的各个端口,判断用户是否正在使用端口准备下载程序,如果是,就按用户要求,把用户程序下载到指定地址上。如果不是,就跳转到已经下载过的用户程序入口,从而把芯片控制权交给用户程序。如果是新的芯片还没有下载过,那么就停留在读取串口状态的循环中。

使用特权

评论回复
27
qcliu| | 2022-11-4 12:04 | 只看该作者
当用keil作为开发环境,创建一个工程时,需要选择所使用的单片机型号,然后Keil会将相应单片机的startup.A51文件拷贝到工程目录下,在编译时,该文件会被编译到最终的目标文件中。一般情况下,这个文件是不需要我们做修改的,保持默认状态即可。

使用特权

评论回复
28
drer| | 2022-11-4 12:13 | 只看该作者
MCU中有块叫BootRom的Flash空间,其存储内容在芯片供应商出厂前已固化好,对于用户来讲是不可更新的,用户可以对使用内容进行配置,配置信息也就是我们常说的UCB(User Configuration Block),BootRom会根据UCB中的配置信息后会执行相应的动作,如PC指针跳转到特定地址,使能HSM等功能。

在BootRom中有一块称为SSW(Start SoftWare)的内容,当芯片发生复位后,MCU第一个被执行的软件就是SSW,SSW在主核上运行,此阶段其他核是被Halt住的。

SSW会读取用户配置的启动模式寄存器,根据配置方式,执行完相关操作后,跳转到用户程序(main.c)或者进入测试模式。

使用特权

评论回复
29
coshi| | 2022-11-4 13:36 | 只看该作者
当我们把一个引脚 BOOT0 拉高的同时,重新给芯片上电或复位,就会触发Boootloader进入运行。此时我们通过单片机的串口就可以把新程序发送给单片机,发送完后把 BOOT0 拉低,再复位单片机,新程序就会运行起来。

使用特权

评论回复
30
kxsi| | 2022-11-4 13:46 | 只看该作者
Startup Code 可以译为启动代码。单片机上电或复位后最先执行的一段代码。一般主要会完成堆栈指针的设置,复位向量的获取和加载,然后初始化变量,最后跳转到用户代码。

使用特权

评论回复
31
wiba| | 2022-11-4 14:07 | 只看该作者
第一步:CPU先读取运行iROM里面固化的启动代码BL0,进行一些基本的初始化,比如初始化PLL和时钟,关闭看门狗初始化堆栈,将flash中BL1的代码加载到IRAM中,跳转到IRAM中BL1的执行地址执行BL1。

第二步:在BL1中初始化硬件设备,初始化串口,初始化SDRAM,将flash中BL2的代码加载到SDRAM中,分配堆栈空间,设置好栈跳转到SDRAM中BL2的执行地址执行BL2。

第三步:初始化本阶段使用的硬件设备,初始化MMU,检测系统内存映射, 将内核和文件系统从Flash读取RAM中,为内核设置启动参数,加载内核,挂载文件系统。

使用特权

评论回复
32
Jacquetry| | 2022-11-4 19:40 | 只看该作者
你这工作不正常吧,初始化这么长时间可能是外部晶振问题吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则