打印

为什么这么悲剧,PVD中断不响应。

[复制链接]
4263|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qzx0580|  楼主 | 2012-8-22 11:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TI, ic, vi, ni, ST
void RCC_Conf(void)
{ ...
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
   ...
}
void NVIC_Conf(void)
{
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = PVD_IRQ_PRI;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

void EXTI_Conf(void)
{
    EXTI_ClearITPendingBit(EXTI_Line16);
  EXTI_InitStructure.EXTI_Line =        EXTI_Line16;
  EXTI_InitStructure.EXTI_Mode =   EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger =       EXTI_Trigger_Rising;//EXTI_Trigger_Falling同样不响应
  EXTI_Init(&EXTI_InitStructure);
}
int main()
{
  RCC_Conf();
  NVIC_Conf();
  EXTI_Conf();
PWR_PVDLevelConfig(PWR_PVDLevel_2V9);
PWR_PVDCmd(ENABLE);
  while(1);
}

void PVD_IRQHandler(void)
{
  EXTI_ClearITPendingBit(EXTI_Line16);
  if(PWR_GetFlagStatus(PWR_FLAG_PVDO))
  {
     此处向外部EEPROM写一个字;
     试验过,在EXTI中断里这个字能写进去,放在这里就没写进去,说明这个中断根本没有响应。
   //备注:这个中断的优先级最高(0,0)级的。
  }

}

有谁知道这个悲剧是怎么造成的?


}
沙发
qzx0580|  楼主 | 2012-8-22 13:12 | 只看该作者
邪门了,网上例程看了很多遍都没看出问题。
咋回事?

使用特权

评论回复
板凳
qzx0580|  楼主 | 2012-8-22 13:45 | 只看该作者
是不是需要外部硬件管脚将电压引入,再监测?
按理不需要啊,我没有看到文档里有这样的要求。况且本身VDD,VSS接电源的接电源,接地的接地。
都接上了。

火大啊!!!!

使用特权

评论回复
地板
qzx0580|  楼主 | 2012-8-23 08:45 | 只看该作者
在这个版块发了很多帖,一概没人回。
咋回事?

使用特权

评论回复
5
qzx0580|  楼主 | 2012-8-23 13:47 | 只看该作者
Power Control&Status寄存器显示:
PVDE=1;
PVDO是灰色不可选的。这个一定有问题,但是原因不明。
在做PVD中断的时候外部硬件电路是否也需要做哪些连接?

使用特权

评论回复
6
liumulan| | 2012-8-23 14:41 | 只看该作者
网上例程看了很多遍都没看出问题

使用特权

评论回复
7
ling13147| | 2012-8-23 14:57 | 只看该作者
PVDO是只读的这应该是不可选的原因。你PVD中断是上升沿有效,PVD使能前PVDO是0,只有Vdd电压高于你设定的2.9V时PVDO才会为1,此时中断产生,所以我想如果你要做这个实验就需要冒险把Vdd的电压抬高一点。如果还是不行,就用调试器一步步查看NVIC和EXTI中断寄存器的状态。

使用特权

评论回复
8
qzx0580|  楼主 | 2012-8-23 15:08 | 只看该作者
7# ling13147

PVDO是只读状态寄存器,但是它应该能够实时指示实际的电压与阈值电压的比较状态,正常情况下,PVDO应该是0,只有当电压>或者<我设定的阈值电压时,PVDO才会是1,现在状态位呈灰色唯一的解释就是它没有被激活(不能指示现在实际与阈值电压的比较值)。EXTI与NVIC状态寄存器我看过了,应该没问题。
我试试看能不能上传图片。 桌面.rar (57.59 KB)

使用特权

评论回复
9
qzx0580|  楼主 | 2012-8-23 15:10 | 只看该作者
这是Power&Control Status截图

status.rar

10.31 KB

使用特权

评论回复
10
香水城| | 2012-8-23 17:25 | 只看该作者
什么芯片?

使用特权

评论回复
11
香水城| | 2012-8-23 17:28 | 只看该作者
邪门了,网上例程看了很多遍都没看出问题。
咋回事?
qzx0580 发表于 2012-8-22 13:12


不知道你用的什么芯片,但是看网上例程是不可靠的,可靠的是ST提供的例程库,建议你下载一个官方例程库,然后你就会发觉,你少了一句关键代码:


EXTI_InitStructure.EXTI_LineCmd = ENABLE;

使用特权

评论回复
12
qzx0580|  楼主 | 2012-8-23 17:31 | 只看该作者
11# 香水城

使用特权

评论回复
13
qzx0580|  楼主 | 2012-8-23 17:34 | 只看该作者
11# 香水城

我的片子是TMS32LF103ZE,
EXTI_InitStructure.EXTI_LineCmd =  ENABLE;这条指令我的配置里有,这里可能疏忽了没有写上。
我请教了一下FAE,他说我的VBAT管脚悬空,这是不行的,要接到VDD上去。我觉得可能真是这个原因。因为PVDO这个状态位显示不可用,而配置寄存器又没有什么问题(自查没有看出问题来,我上传了两张附件)。所以我按FAE的方法再试一试,或许就能进中断了。
非常感谢版主的回复。

使用特权

评论回复
14
香水城| | 2012-8-23 17:52 | 只看该作者
你的型号很奇怪啊

当然VBAT引脚是必须连接的,需要注意以下警告:

Warning:     During tRSTTEMPO (temporization at VDD startup) or after a PDR
is detected, the power switch between VBAT and VDD remains
connected to VBAT.
During the startup phase, if VDD is established in less than
tRSTTEMPO (Refer to the datasheet for the value of tRSTTEMPO)
and VDD > VBAT + 0.6 V, a current may be injected into VBAT
through an internal diode connected between VDD and the
power switch (VBAT).
If the power supply/battery connected to the VBAT pin cannot
support this current injection, it is strongly recommended to
connect an external low-drop diode between this power
supply and the VBAT pin.
If no external battery is used in the application, it is recommended to connect VBAT
externally to VDD with a 100 nF external ceramic decoupling capacitor (for more details refer
to AN2586).

使用特权

评论回复
15
qzx0580|  楼主 | 2012-8-24 08:16 | 只看该作者
你的型号很奇怪啊

当然VBAT引脚是必须连接的,需要注意以下警告:

Warning:     During tRSTTEMPO (temporization at VDD startup) or after a PDR
is detected, the power switch between VBAT and VDD remains  ...
香水城 发表于 2012-8-23 17:52


谢谢版主的提醒,我的电路板上没有备用电池,所以不用考虑电流倒灌的问题。现在只需要把VBAT接到有100nF外接陶瓷电容的电VDD电源上就可以了。
自我纠正一下:我的芯片型号是:STM32F103ZE。谢谢给我留了面子没有直接指出来。
还有,我想请教一下:用固件库写的程序与直接操作SFR的程序除了比较占用存储空间,代码的执行效率会不会也下降?(比如固件库很多都是对SFR的位作#define的,在编译时要替代,运行的时候会不会因此效率低下呢?)

使用特权

评论回复
16
qzx0580|  楼主 | 2012-8-24 10:41 | 只看该作者
请教一下,在硬件上是否要做哪些必要的配置?
我的软件配置应该没有问题。

使用特权

评论回复
17
qzx0580|  楼主 | 2012-8-24 14:42 | 只看该作者
娘的,为什么就进不了这个垃圾中断?
火大了!!

使用特权

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

本版积分规则

28

主题

172

帖子

0

粉丝