打印

STM32软件复位问题。

[复制链接]
16717|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lzt7_519|  楼主 | 2008-11-15 14:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32软件复位问题。
系统运行中我想软件复位,看了CortexM3手册上说明:
代码如下下面:
*(unsigned long*)0xE000ED0C |= 0x04;
但是系统仍然不复位

CortexM3手册上相关说明
P6-7
System reset
A system or warm reset initializes the majority of the macrocell, excluding the NVIC 
debug logic, Flash Patch and Breakpoint (FPB), Data Watchpoint and Trigger (DWT), 
and Instruction Trace Macrocell (ITM). System reset is typically used for resetting a 
system that has been operating for some time, for example, watchdog reset.
Because the SYSRESETn signal is synchronized within the processor, you do not have 
to synchronize this signal. Figure 6-3 shows the reset synchronization.
Cortex-M3 exports a signal, SYSRESETREQ, that is asserted when the 
SYSRESETREQ bit of the Application Interrupt and Reset Control Register is set. 
This can be used, for example, as an input to a watchdog timer as shown in Figure 6-1 
on page 6-6

P8-21
Application Interrupt and Reset Control Register 
Use the Application Interrupt and Reset Control Register to: 
? determine data endianness 
? clear all active state information for debug or to recover from a hard failure 
? execute a system reset 
? alter the priority grouping position (binary point).
The register address, access type, and Reset state are: 
Address  0xE000ED0C 
Access  Read/write 
Reset state  0x00000000

[2] SYSRESETREQ
沙发
hkap| | 2008-11-15 17:06 | 只看该作者

*((u32 *)0xE000ED0C) = 0x05fa0004; //实现系统复位

使用特权

评论回复
板凳
lzt7_519|  楼主 | 2008-11-15 19:59 | 只看该作者

有的板子管用,有的板子不管用,一批做的板子

使用特权

评论回复
地板
lixun00| | 2008-11-15 20:52 | 只看该作者

NVIC_GenerateSystemReset

使用特权

评论回复
5
lzt7_519|  楼主 | 2008-11-15 20:58 | 只看该作者

终于找到原因了,但是仍然觉得非常奇怪

原来跟复位芯片有关,接的是IMP809R(2.63V的)
CPU复位时,用示波器能看到复位脚电压突然拉低到2V以下,再也升不高了
去掉在IMP809R,用下面的语句就能正常复位后又能运行程序。非常奇怪,
我前面的关于看门狗的问题也跟这个有关。实际上我是做IAP让系统复位,想不到居然有这样的问题,

*((u32 *)0xE000ED0C) = 0x05fa0004;    //实现系统复位
确实能复位

使用特权

评论回复
6
香水城| | 2008-11-15 22:21 | 只看该作者

STM32的复位引脚既是输入脚也是输出脚,用外部复位芯片时要

请看旧帖:

使用特权

评论回复
7
lzt7_519|  楼主 | 2008-11-15 23:51 | 只看该作者

原来这样

原来这样:


供电监控器
本产品内部集成了上电复位(POR)/掉电复位(PDR)电路,该电路始终处于工作状态,保证系统在供
电超过2V时工作;当VDD低于设定的阀值(VPOR/PDR)时,置器件于复位状态,而不必使用外部复
位电路。
器件中还有一个可编程电压监测器(PVD),它监视VDD供电并与阀值VPVD比较,当VDD低于或高
于阀值VPVD时将产生中断,中断处理程序可以发出警告信息或将微控制器转入安全模式。需要通
过程序开启PVD。
有关VPOR/PDR和VPVD数值,请参考表九“内置复位和电源控制模块特性”

使用特权

评论回复
8
fqingy2003| | 2008-11-16 13:44 | 只看该作者

我帮你一下吧

你的电压复位芯片必须选择开漏输出的芯片,就是说通过上拉电阻保持复位脚为高电平,就没有问题了。或者你可以将你的IMP809R加一个三态缓冲器也是没有问题的,入HC125

使用特权

评论回复
9
hkap| | 2008-11-16 15:38 | 只看该作者

看了半天,没明白,能解释清楚点吗

接IMP809R上电复位时为什么电压会拉低到2V以下,再也上不去,复位电路不是有上拉电阻Rpu吗?

使用特权

评论回复
10
lzt7_519|  楼主 | 2008-11-16 17:10 | 只看该作者

谢8楼的

IMP809R手册上说连接IO特性得复位端,可以在中间串一4.7K的电阻,不知道实际有没人这样操作过,上面是针对原来摩托得一款CPU举得例子

使用特权

评论回复
11
lzt7_519|  楼主 | 2008-11-16 17:14 | 只看该作者

回 hkap

接IMP809R上电复位 上电复位是正常的,我是软件复位(通过看门狗或者NVIC_GenerateSystemReset)的时候复位脚突然被拉低,然后一直为低无法恢复

使用特权

评论回复
12
fqingy2003| | 2008-11-17 09:22 | 只看该作者

如果没有开漏回路的话,内部复位,这个电阻是必须的

如果没有开漏回路的话,内部复位,这个电阻是必须的

使用特权

评论回复
13
lzt7_519|  楼主 | 2008-11-17 11:41 | 只看该作者

楼上的都对

所以请像我一样第1次使用这样的复位IO一定注意这个问题了

使用特权

评论回复
14
gujiamao| | 2013-12-31 11:51 | 只看该作者
有没有用R15进行复位的。

使用特权

评论回复
15
zhzzh18| | 2016-8-14 12:43 | 只看该作者
__asm void SystemReset(void)
{
     MOV R0, #1           //;
     MSR FAULTMASK, R0    //; 清除FAULTMASK 禁止一切中断产生
     LDR R0, =0xE000ED0C  //;
     LDR R1, =0x05FA0004  //;
     STR R1, [R0]         //; 系统软件复位   
     
     deadloop
        B deadloop        //; 死循环使程序运行不到下面的代码
}
     deadloop
        B deadloop      这个地方编译不过,是怎么回事?提示:startup\target.c(167): error: A1163E: Unknown opcode deadloop: , expecting opcode or Macro

使用特权

评论回复
16
a718642154| | 2016-12-6 16:09 | 只看该作者
zhzzh18 发表于 2016-8-14 12:43
__asm void SystemReset(void)
{
     MOV R0, #1           //;

deadloop前面的空格去掉再编译

使用特权

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

本版积分规则

9

主题

21

帖子

0

粉丝