【NuttX】在STM32F767平台上的启动过程分析
发布网友
发布时间:2024-10-21 16:33
我来回答
共1个回答
热心网友
时间:2024-10-21 16:44
STM32最小系统介绍复位电路,电容保持电平稳定,确保复位信号产生,启动代码运行。
STM32F767启动模式:在M0,M3,M4内核中,通过boot0和boot1引脚电平决定启动地址,启动介质可为系统存储器、SRAM、主Flash等。
M7内核启动:boot0电平与Flash选项控制寄存器值共同决定启动位置。默认0x0800,即从0x0020000地址启动,用于bootloader程序下载与更新。
复位信号产生后,SYSCLK第四次上升沿锁定BOOT引脚值,结合Flash选项控制寄存器,执行相应自举代码。若无更新,直接跳转至主Flash起始地址0x08000000。
异常向量表位置至关重要,错误配置会导致无法启动、中断响应失败。默认地址0x00000000,可通过修改VTOR偏移寄存器调整位置。
启动阶段关注_vectors地址、IDLE_STACK值、__start函数。_vectors地址编译链接阶段由flash.ld确定。IDLE_STACK初始化堆栈指针,支持C语言运行。__start函数执行初始化,建立idle、init、workqueue任务。
复位异常处理函数即为_start(),核心为os_start(),执行内核初始化,建立idle、init、workqueue任务。nsh_main中进行脚本解析、应用任务启动等操作。