微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > ST 要加快外部复位么?

ST 要加快外部复位么?

时间:10-02 整理:3721RD 点击:
上电和掉电 有内部复位
国外的单片机都有内部复位?
如果要很高可靠性 加个外部硬件看门狗可以吗?

单片机都有内部复位的,内部复位一般叫做软件复位法。外部复位一般叫硬件复位,也就是断电重启

对于要求严格的系统都会有软件复位和硬件复位两种方式都存在。

一、STM32复位产生
系统复位将复位除时钟控制寄存器CSR中的复位标志和备份区域中的寄存器以外的所有寄存器。
当以下事件中的一件发生时,产生一个系统复位:
1. NRST管脚上的低电平(外部复位)
2. 窗口看门狗计数终止(WWDG复位)
3. 独立看门狗计数终止(IWDG复位)
4. 软件复位(SW复位)
5. 低功耗管理复位
当以下事件中之一发生时,产生电源复位:
1. 上电/掉电复位(POR/PDR复位)
2. 从待机模式中返回
二、STM32复位过程
   在STM32F10xxx里,可以通过BOOT[1:0]引脚选择三种不同启动模式。

在系统复位后,SYSCLK的第4个上升沿,BOOT管脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。
在从待机模式退出时,BOOT管脚的值将被被重新锁存;因此,在待机模式下BOOT管脚应保持为需要的启动配置。在启动延迟之后,
因为固定的存储器映像,代码区始终从地址0x0000 0000开始,而数据区(SRAM)始终从地址0x2000 0000开始
根据选定的启动模式,主闪存存储器、系统存储器或SRAM可以按照以下方式访问:
              ● 从主闪存存储器启动:主闪存存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(0x0800 0000)访问它,即闪存存储器的内容可以在两个地址区域访问,0x0000 0000或0x0800 0000。
● 从系统存储器启动:系统存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(0x1FFF F000)访问它。
● 从内置SRAM启动:只能在0x2000 0000开始的地址区访问SRAM。
在启动延迟,离开复位状态后,CM3 做的第一件事就是读取下列两个32 位整数的值:
从地址0x0000,0000 处取出堆栈顶的地址(MSP 的初始值)。
从地址0x0000,0004 处取出PC 的初始值——这个值是复位向量,LSB 必须是1。然后从这个值所对应的地址处取指。


因为CM3 使用的是向下生长的满栈,所以MSP 的初始值必须是堆栈内存的末地址加1。举例来说,如果你的堆栈区域在0x20007C00‐0x20007FFF 之间,那么MSP 的初始值就必须是0x20008000。
向量表跟随在MSP 的初始值之后——也就是第2 个表目。要注意因为CM3 是在Thumb态下执行,所以向量表中的每个数值都必须把LSB 置1(也就是奇数)。正是因为这个原因,图3.18 中使用0x101 来表达地址0x100。当0x100 处的指令得到执行后,就正式开始了程序的执行。在此之前初始化MSP 是必需的,因为可能第1 条指令还没执行就会被NMI 或是其它fault 打断。MSP 初始化好后就已经为它们的服务例程准备好了堆栈。
启动代码:
; Reset Handler
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                LDR     R0, =__main
                BX      R0
ENDP

对于要求严格的系统都会有软件复位和硬件复位两种方式都存在。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top