11784|14

90

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于PVD进中断请教香主和各位大哥 [复制链接]

关于PVD进中断请教香主和各位大哥,小弟刚学这个,程序想实现检测到电压低时(也就是要断电时),马上进中断做一些处理,可是下面我的配置得到的结果是开始跑程序就不停的进中断
主程序:
  PWR_PVDLevelConfig(PWR_PVDLevel_2V2); 
  PWR_PVDCmd(ENABLE);

  while(1)
``````

NVIC配置:

void NVIC_Configuration(void)

  NVIC_InitTypeDef NVIC_InitStructure;
#ifdef  VECT_TAB_RAM  
  /* Set the Vector Table base location at 0x20000000 */ 
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 
#else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 */ 
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
#endif
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
//PVD
  NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQChannel; 
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; 
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; 
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
  NVIC_Init(&NVIC_InitStructure);      
}

 EXTI配置:


void ExterLineInterrupt(void)
{
    EXTI_InitTypeDef EXTI_InitStructure;
    EXTI_DeInit(); 
    EXTI_StructInit(&EXTI_InitStructure); 
  
    EXTI_InitStructure.EXTI_Line = EXTI_Line16; 
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; 
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; 
    EXTI_InitStructure.EXTI_LineCmd = ENABLE; 
    EXTI_Init(&EXTI_InitStructure);
}

进中断程序:

void PVD_IRQHandler(void)
{
  if (PWR_GetFlagStatus(PWR_FLAG_PVDO))
  {
    PWR_ClearFlag(PWR_FLAG_PVDO);
   `````
   ```
   ```
  }
}



请问我哪有错误,谢谢

此帖出自stm32/stm8论坛

最新回复

void ExterLineInterrupt(void) {     EXTI_InitTypeDef EXTI_InitStructure;     EXTI_DeInit();     EXTI_StructInit(&EXTI_InitStructure);        EXTI_InitStructure.EXTI_Line = EXTI_Line16;     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;     EXTI_InitStructure.EXTI_LineCmd = ENABLE;     EXTI_Init(&EXTI_InitStructure); } 把外部中断触发方式改下,改成上升触发,这个有点反。  详情 回复 发表于 2012-8-13 11:36
点赞 关注
 

回复
举报

85

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

在线等,谢谢

                                 在线等,在线等,请大家帮帮我
此帖出自stm32/stm8论坛
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

我用的芯片了STM32F103

                                 我用的芯片了STM32F103
此帖出自stm32/stm8论坛
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 

可能是你刚上电开始时电压不稳,请用示波器看看

                                 再改变PVD电压至较高电平,现提高触发电压,待系统稳定程序调通后再降低触发电压。
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 

先谢谢香主

                                 回香主,2.9V试了,还一样,电压没问题,我在自己的板上调试,板上有供电3.26V,用示波器看稳定,再加上下载程序用的是万利199的板子,下载线上有供电供电也稳定
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

6
 

补充

供电电压纹波小于15mV;
本来要求能测到低于2.8V左右就进中断的,看它一直进中断以为是由纹波引起,所以改到2.2
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 

请问还有什么其它可能导致这结果吗??

                                 请问还有什么其它可能导致这结果吗??请高手多指教
此帖出自stm32/stm8论坛
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

8
 

你忘了清除外部中断16线的标志位了

void PVD_IRQHandler(void)
{
    EXTI_ClearITPendingBit(EXTI_Line16);
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    if (PWR_GetFlagStatus(PWR_FLAG_PVDO))
    {
        PWR_ClearFlag(PWR_FLAG_PVDO);
        ```
        ```
    }
}

此帖出自stm32/stm8论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

9
 

谢谢LS的大哥

谢谢LS的大哥,那个我忘了贴上,那个有了
if (PWR_GetFlagStatus(PWR_FLAG_PVDO))
    {
        PWR_ClearFlag(PWR_FLAG_PVDO);

       EXTI_ClearITPendingBit(EXTI_Line16);
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

10
 

没仔细看你的代码

void PVD_IRQHandler(void)
{
    EXTI_ClearITPendingBit(EXTI_Line16);
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    if (PWR_GetFlagStatus(PWR_FLAG_PVDO))
    {
        PWR_ClearFlag(PWR_FLAG_PVDO); 这一行是错误的,PWR_ClearFlag函数的参数中没有PWR_FLAG_PVDO。
        ```
        ```
    }
}

正确的使用方法是:
void PVD_IRQHandler(void)
{
    EXTI_ClearITPendingBit(EXTI_Line16); //必须在if外面。

    if (PWR_GetFlagStatus(PWR_FLAG_PVDO)== SET) {
        ...
    }
    else {
        ...
    }
}
此帖出自stm32/stm8论坛
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

11
 

回10楼的哥哥

先谢谢您的帮助,
PWR_FLAG_PVDO。确实不能操作,是只读的,谢谢

“EXTI_ClearITPendingBit(EXTI_Line16);”
这个应该放哪都一样,只要在中断里给清了,因为中断不会抢占同一中断,不知道我理解是否错误。
老进中断通过重启电脑解决了,晕,可是好像断电时也不进中断了,因为断电不好调试,不知道各位大哥有什么好的方法没??用过PVD的大哥,发个例子给看下谢谢
此帖出自stm32/stm8论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

12
 

找一个直流变压电源,

能够提供0~3.6V可调的直流电源,将电压缓慢下调即可。


(你那个例程,有不能将中断标志清掉的可能性。)
此帖出自stm32/stm8论坛
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

13
 

先谢谢您的帮助

                                 可是下载线上有电源调没用吧,如果调下载线上的电源,应该也会不能用IAR调试了
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

14
 

请单独给目标芯片供电

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(中级)

15
 
void ExterLineInterrupt(void)
{
    EXTI_InitTypeDef EXTI_InitStructure;
    EXTI_DeInit();
    EXTI_StructInit(&EXTI_InitStructure);
  
    EXTI_InitStructure.EXTI_Line = EXTI_Line16;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
}

把外部中断触发方式改下,改成上升触发,这个有点反。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表