OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 22483|回复: 14

STM32的软复位无效,啥情况?

[复制链接]

12

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-1-21
在线时间
3 小时
发表于 2013-8-6 21:14:32 | 显示全部楼层 |阅读模式
extern void SoftReset(void)
{
__set_FAULTMASK(1);      // 关闭所有中断
NVIC_SystemReset();// 复位
}

这两个
函数如下,和网上看有些函数不一样啊。。我这固件库好象是V3.1版本的。。
static __INLINE void __set_FAULTMASK(uint32_t faultMask)
{
  register uint32_t __regFaultMask       __ASM("faultmask");
  __regFaultMask = (faultMask & 1);
}

static __INLINE void NVIC_SystemReset(void) { SCB->AIRCR = (NVIC_AIRCR_VECTKEY | (SCB->AIRCR & (0x700)) | (1<<NVIC_SYSRESETREQ)); /* Keep priority group unchanged */ __DSB(); /* Ensure completion of memory access */ while(1); /* wait until reset */ }


一运行到复位这里。。就直接死机了,也不重启,除非断电了。。有哪里不对么


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-6 23:04:28 | 显示全部楼层
//系统软复位   
void Sys_Soft_Reset(void)
{   
SCB->AIRCR =0X05FA0000|(u32)0x04;   
}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-1-21
在线时间
3 小时
 楼主| 发表于 2013-8-7 09:59:55 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
就这么简单啊额。。
需要先把所有中断关闭吗?还是直接调用这个函数捏?
回复 支持 反对

使用道具 举报

12

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-1-21
在线时间
3 小时
 楼主| 发表于 2013-8-7 10:11:55 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
敢问原子君。。在哪个是手册里查到呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-7 10:31:38 | 显示全部楼层
 山人自已有妙计
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-1-21
在线时间
3 小时
 楼主| 发表于 2013-8-7 10:39:06 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
山人。。

貌似调用了以后,就死机了啊。。木有重启呢
还差点别的什么东西么
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-7 10:48:14 | 显示全部楼层
回复【6楼】cooljuicy:
---------------------------------
这个我是测试过的哦,木有问题啊.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-1-21
在线时间
3 小时
 楼主| 发表于 2013-8-7 11:13:48 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
extern void SoftReset(void)
{
__set_FAULTMASK(1);      // 关闭所有中断
SCB->AIRCR =0x05FA0000|(u32)0x04;
__DSB();
while(1);
}

我是这样写的。。
貌似执行完毕后,就一直在while(1)了
这个函数在中断函数或者在主函数里调用没有问题的吧。。
回复 支持 反对

使用道具 举报

2

主题

1446

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2256
金钱
2256
注册时间
2010-12-16
在线时间
206 小时
发表于 2013-8-7 11:21:22 | 显示全部楼层
复位代码会拉低RESET引脚,如果外部不能拉低,就会复位失败.
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

12

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-1-21
在线时间
3 小时
 楼主| 发表于 2013-8-7 11:30:26 | 显示全部楼层
回复【9楼】shihantu:
---------------------------------
可以拉低哦。。

我外面接复位引脚接了一个复位芯片

复位脚接了 100K到GND
回复 支持 反对

使用道具 举报

12

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-1-21
在线时间
3 小时
 楼主| 发表于 2013-8-7 11:36:40 | 显示全部楼层
回复【10楼】cooljuicy:
---------------------------------
还是不行。。那JTAG下载程序的时候 ,是怎么复位设备的呢?

实在不行还是用清除所有中断, while(1)等待看门狗复位吧。。
回复 支持 反对

使用道具 举报

2

主题

1446

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2256
金钱
2256
注册时间
2010-12-16
在线时间
206 小时
发表于 2013-8-7 11:40:26 | 显示全部楼层
它是复位脚内部拉低.如果复位芯片无法拉低,就复位不了.
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

12

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-1-21
在线时间
3 小时
 楼主| 发表于 2013-8-7 11:40:28 | 显示全部楼层


下载完毕程序,有个警告诶。。
说不能复位成功。。
神马情况

回复 支持 反对

使用道具 举报

12

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-1-21
在线时间
3 小时
 楼主| 发表于 2013-8-7 13:35:55 | 显示全部楼层
回复【13楼】cooljuicy:
---------------------------------
我把复位芯片去掉就居然可以复位了

和复位芯片有冲突啊,我拿示波器测量引脚,发现 软件复位时,只把复位脚的电平拉低了一点点。。
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2013-12-3
在线时间
8 小时
发表于 2013-12-3 11:42:49 | 显示全部楼层
楼主还在吗 
我遇到了和你一样的问题  我的程序是有 bootload 起始地址0x0800 0000   然后app 起始地址 0x0800 0000   我设置了一个按键   是实现 从app重新回到bootload  但是 使用了
__set_FAULTMASK(1);      // 关闭所有中断
NVIC_SystemReset();// 复位

这两个函数   只能重启我的app  无法回到bootload的部分
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-8 07:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表