OpenEdv-开源电子网

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

掉电检测怎么也进不了中断,差不多持续一星期了。快崩溃了。

[复制链接]

4

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2012-8-22
在线时间
0 小时
发表于 2012-8-27 08:19:51 | 显示全部楼层 |阅读模式

stm32f103ze的片子,手段用尽还是进不了中断。

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-8-27 08:44:17 | 显示全部楼层
 给个别人的经历(STM32学习笔记4(失败的尝试)-掉电检测+Flash存取 ):
   看到STM32有PVD的掉电检测功能,flash也可以直接存取;就动了用flash掉电保存参数的念头。
1、搞定Flash擦、写函数。
void  F_ErasePage(u32 age_Address)
{
 U32 tmp;
 while((FLASH->SR&FLASH_FLAG_BSY)==FLASH_FLAG_BSY)
 {  //PutCnstStr2Usart1("waiting\n"); }
 FLASH->SR |= FLASH_FLAG_PGERR;
 FLASH->CR |= CR_PER_Set;
 FLASH->AR=Page_Address;
 FLASH->CR |= CR_STRT_Set;
  while((FLASH->SR&FLASH_FLAG_BSY)==FLASH_FLAG_BSY)
 {  //PutCnstStr2Usart1("waiting\n"); }
 FLASH->CR &= ~CR_PER_Set;//这个不能忘
 }
void FLASH_Program(u32 Address, u16 Data)
{
 U32 tmp;
Fstart:
 if((FLASH->CR&CR_LOCK_Set)==CR_LOCK_Set)  //如果写被锁死
 {
  FLASH->KEYR = FLASH_KEY1;
    FLASH->KEYR = FLASH_KEY2;
    //PutCnstStr2Usart1("Unclock\n");
 }
  while((FLASH->SR&FLASH_FLAG_BSY)==FLASH_FLAG_BSY)
 {
  //PutCnstStr2Usart1("waiting\n");
 }
 FLASH->CR |= CR_PG_Set;
 *(vu16*)Address = Data; 
 FLASH->CR &= ~CR_PG_Set;
 if((FLASH->SR&FLASH_FLAG_PGERR)==FLASH_FLAG_PGERR)
 {    
  //PutCnstStr2Usart1("No earase\n");
  F_ErasePage(Address);
  goto Fstart;//竟然用了goto,咳咳^_^
 }
}
有了这两个函数基本就行了,反正一次要擦一个page,全拿过来保存参数就行了,比较可靠。
U16 const flashdata[1024]__at(0x08001000);//因为flash一次能且只能写16bit,另外访问奇地址会出错。
还有不要忘了#include <absacc.h>,绝对定位全靠它了。
将要保存的参数放到一个结构里面,每次上电复位的时候加载,需要存储时写入flash
2、搞定掉电检测

void VD_Init(void)
{
 NVIC_InitTypeDef NVIC_InitStruct;
 NVIC_InitStruct.NVIC_IRQChannel = VD_IRQChannel;
 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x00;
 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x00;
 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
  RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3 |
RCC_APB1Periph_TIM4 | RCC_APB1Periph_USART2|RCC_APB1Periph_PWR, ENABLE); //_PWR, ENABLE); // 这个是必需的
PWR->CR |=  1<<4;//使能
PWR->CR |=  0xE0;//2.9V检测 
 NVIC_Init(&NVIC_InitStruct);//借用一下库,允许中断
 }
寄存器设置有效,手动置相应中断标志可进入中断
3、联合工作,失败
void VD_IRQHandler(void)
{
 U16 i;
 U32 tmp;
 tmp = 0x08001000;

 if((PWR->CSR & WR_FLAG_PVDO)==PWR_FLAG_PVDO) //低于阈值(电压回升也会中断)
 {
  F_ErasePage(tmp);
  for(i=0;i<2000;i++)
  {
   FLASH_Program(tmp,i);
   tmp+=2;
  }
 }

}
分析:1、Vdda经过LC滤波可能会比Vdd掉的慢,而据说stm32会因此产生检测问题。2、电源回路电容量小,时间来不及。
尝试:从ATX电源上拆了一个1000uF的电容,接上,无改善。
思考:把掉电检测跟电源脚做在一起实在意义不大,一般情况下MCU的电源都是经过LDO稳压的,掉电检测使用专门的IO,可以用稳压器前的电压用于检测。
由于目前还不能对电路板进行破坏性改造,手头也没有示波器,可调电源,暂时放弃对此做进一步的研究。
套用某大人物的逻辑,这次尝试是部分失败,
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

158

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
400
金钱
400
注册时间
2011-11-23
在线时间
0 小时
发表于 2012-8-27 08:48:20 | 显示全部楼层
回复【楼主位】stm0574:
---------------------------------
在休眠前设置好这个中断允许,就是那几个中断允许位置1就可以,一旦电压低于门槛电压,就中断触发复位了,
回复 支持 反对

使用道具 举报

4

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2012-8-22
在线时间
0 小时
 楼主| 发表于 2012-8-27 09:23:50 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
多谢版主,这个例程我前些天也找到了。
说实话,我觉得我的配置没有大的问题,但就是进不了中断。
我十分怀疑是外部硬件是否有什么问题,但是查看了ST的中、英文手册,相应的内容提到的都比较少。也没看出什么问题。
因为我这里条件非常有限,也无法提供外部的直流电源做模拟,现在基本上束手无策了。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-8-27 10:34:49 | 显示全部楼层
回复【4楼】stm0574:
---------------------------------
可调电源都没有????那你怎么测试啊。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2012-8-22
在线时间
0 小时
 楼主| 发表于 2012-8-27 11:36:46 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
往外部EEPROM里写数据,上电再读出来。
可是数据一直没有写进去。
我只写一个数据,所以只要能进中断,按2.9V的掉电检测,这个时间肯定够保存一个数据的。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-8-27 12:44:32 | 显示全部楼层
用printf观察一下,有仿真器就最好跟踪了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2012-8-22
在线时间
0 小时
 楼主| 发表于 2012-8-27 12:59:33 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
不瞒你说,我不知道怎么用printf,我根本没有用过。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-8-27 13:42:54 | 显示全部楼层
看我们的串口实验,熟悉下
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2012-8-22
在线时间
0 小时
 楼主| 发表于 2012-8-27 16:45:13 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
谢版主指点,因为进不了PVD,已经放弃了。
现在改用复位芯片的管脚做EXTI中断检测,已实现。

现在就等待你们的stm32f103zet的新板推出.
我看了你们的功能预览图,基本上把芯片的功能都挖掘出来了,非常不容易。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

4

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2012-8-22
在线时间
0 小时
 楼主| 发表于 2012-8-28 08:57:04 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
终于进PVD了,我把外围的复位芯片拆掉就进去了!
真TM不容易!!!!!!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

12

主题

216

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2011-4-7
在线时间
3 小时
发表于 2012-8-30 13:10:25 | 显示全部楼层
mark
回复 支持 反对

使用道具 举报

27

主题

308

帖子

1

精华

高级会员

Rank: 4

积分
774
金钱
774
注册时间
2012-6-19
在线时间
19 小时
发表于 2012-8-31 01:34:18 | 显示全部楼层
mark
回复 支持 反对

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
发表于 2014-6-15 12:10:09 | 显示全部楼层
这个我也得试试,这个检测电源的功能还是挺好的。
手艺人要内外兼修。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-7 05:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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