STM32W108的复位可以由多个复位源导致,每个复位源反馈到中央的复位检测逻辑,依据系统的状态和复位事件的性质来复位系统的各个部分。
4.3.1 复位原理
4.3.1.1 复位源
看门狗复位:
STM32W108包含一个看门狗定时器,是由内部1KHz的参考时钟所驱动,当该定时器超时溢出时,它产生WATCHDOG_RESET复位源到复位模块。
软件复位:
ARM Cortex-M3 CPU可以在软件控制下启动一个复位,产生SYSRESETREQ复位源到复位模块。
注:当使用外部调试器时,如果调试器发出SYSRESETREQ请求信号,该芯片可能被锁住,需要一个引脚复位或重新上电。建议不要在应用程序中直接写SCS_AIRCR寄存器,而是使用ST软件提供的一个复位函数,该复位函数能够确保芯片在复位之前处于安全的时钟模式之下。
可选字节错误:
在系统启动时,Flash存储控制器通过一个状态机从Flash存储信息块来读取配置信息,并且在读取的过程中进行执行可选字节错误检测。如果发现错误,则会产生一个错误信号OPT_BYTE_ERROR到复位模块。
如果检测到一个可选字节错误,系统会重新启动,并且会再次执行读取和检测程序。如果再次检测到错误,这个过程会重复进行,直到第三次失败后停止。这时系统进入一个可以自行恢复的模拟深睡眠状态,在这种状态下,Flash存储器读保护被强迫启动,以防止应用程序被破坏。
调试复位:
串口线/JTAG接口(SWJ)可用来访问SWJ调试端口(SWJ-DP)寄存器,通过设置SWJ-DP中的CDBGRSTREQ位,可产生复位源CDBGRSTREQ到复位模块。
JTAG复位:
遵照JTAG标准要求,STM32W108需要提供一个引脚可以配置为JTAG复位功能,此输入复位源独立于其它所有复位源,当该复位引脚有效时,只对JTAG TAP复位,对其它任何片上硬件不进行复位。如果STM32W108处于串行模式或SWJ被禁用,该输入复位引脚无效。
深睡眠复位:
电源管理模块会通知复位模块进入和退出深睡眠状态,深睡眠复位适用于以下情形:在进入深度睡眠之前;存储域和核心域断电时;在深度睡眠状态时;从深度睡眠中唤醒时;在重新上电直到POR LV检测到已处于可靠的供电水平时。
电源管理模块提供一个特殊的模拟深睡眠状态,在该状态时能够保持存储域和核心域的供电。
4.3.1.2 复位记录
STM32W108会记录上次的复位条件来重新启动系统,复位条件记录包括:
● POWER_HV 始终供电域电源供应故障
● POWER_LV 核心域或存储域电源供应故障
● RSTB NRST引脚复位
● W_DOG 看门狗定时器超时
● SW_RST ARM Cortex-M3 CPU的SYSERSETREQ软件复位
● WAKE_UP_DSLEEP 从深睡眠中唤醒
● OPT_BYTE_FAIL 读取Flash内容,检测到可选字节错误
复位事件源寄存器(RESET_EVENT)用于回读上一次复位事件,所有位是互斥的,除OPT_BYTE_FAIL位,当该位使能时,用于保存原始复位事件。
注:当CPU Lockup在软件中被标记为一种复位条件时,CPU Lockup将不再是一个特殊复位事件。CPU Lockup当被设置时,表明CPU已进入一个不可恢复的异常,执行停止但不复位,调试器可以解释错误起因。建议在真实应用中(例如:没有附加的调试器)默认启用看门狗定时器,以便STM32W108可以被重新启动。
4.3.1.3 复位生成
复位生成模块响应复位源并产生以下复位信号:
l PORESET 对ARM Cortex-M3的CPU和系统调试组件(Flash修补和断点,数据监视和跟踪,指令跟踪宏单元,嵌套中断向量控制器)进行复位,ARM定义PORESET作为上电复位域。
l SYSRESET 在不对内核调试和系统调试组件复位情况下复位ARM Cortex-M3的CPU,这样可以保证在不影响调试配置的情况下复位正在运行的系统。
● DAPRESET 复位SWJ的AHB访问端口(AHB-AP)。
● PRESETHV 始终供电域的外围设备复位,
主要用于外围设备在深睡眠期间需要保存配置信息。
● PRESETLV 核心域的外围设备复位,外围设备在深睡眠期间不需要保存配置信息。
表4.2显示了不同复位源产生的复位信号。
表4.2. 产生的复位信号
复位源
产生的复位信号
PORESET
SYSRESET
DAPRESET
PRESETHV
PRESETLV
POR HV
X
X
X
X
X
POR LV(深睡眠时)
X
X
X
X
POR LV(非深睡眠时)
X
X
X
X
X
RSTB
X
X
X
X
看门狗复位
X
X
X
软件复位
X
X
X
可选字节错误
X
X
X
正常深睡眠
X
X
X
X
模拟深睡眠
X
X
调试复位
X
4.3.1.4 复位寄存器
复位事件源寄存器(RESET_EVENT)
地址:0x4000002C
初始值:0x00000001
表4.3. RESET_EVENT位描述
位
名称
描述
Bit7
CPU_LOCKUP
设置为'1'时,复位由于内核被锁住导致。
Bit6
OPT_BYTE_FAIL
设置为'1'时,复位由于可选字节加载失败导致(可以与其它位同时有效)。
Bit5
WAKE_UP_DSLEEP
设置为'1'时,复位由于从深睡眠中唤醒导致。
Bit4
SW_RST
设置为'1'时,复位由于软件复位导致。
Bit3
W_DOG
设置为'1'时,复位由于看门狗定时器超时导致。
Bit2
RSTB_PIN
设置为'1'时,复位由于外部复位引脚信号触发。
Bit1
POWER_LV
设置为'1'时,复位由于核心域电源失效导致(或之前失效)。
Bit0
POWER_HV
始终设置为'1',正常供电。
本文出自《STM32W108嵌入式无线传感器网络》邱铁,夏锋,周玉编著.清华大学出版社,2014年5月