你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm8l的PVD低电压检测程序

[复制链接]
jeromeRo 提问时间:2014-12-9 13:46 /
看了stm8l的资料,知道了可以通过PVD直接对低电压进行程序操作,省去了AD转换那些麻烦问题。但是我从没使用过,看了网上有人发过stm32的PVD电压检测程序,一头雾水。请大家指导下STM8L的PVD低电压检测该怎么写,使用官方固件库,比如低于2.65V就调用LED闪。
void LED_work(void)
{...}
void PWR_INC(void)                                        //PWR初始化
{
  PWR_PVDLevelConfig(PWR_PVDLevel_2V65);                  //PVD设置2.65V  
  PWR_PVDCmd(ENABLE);                                     //PVD使能
  PWR_PVDITConfig(ENABLE);                                //PVD中断使能
__enable_interrupt();                                    //全局中断使能
}
下面该怎么办?
收藏 评论16 发布时间:2014-12-9 13:46

举报

16个回答
巅峰残狼 回答时间:2014-12-9 15:13:33
既然是产生中断,应该会有一个表示产生中断的标志位,检测该标志位是否置位,当置位就点灯,我的理解,仅供参考
jeromeRo 回答时间:2014-12-9 15:35:26
谢谢你的解答,在固件库里定义了:
enum   PWR_FLAG_TypeDef { PWR_FLAG_PVDOF = (uint8_t)0x40, PWR_FLAG_PVDIF = (uint8_t)0x20, PWR_FLAG_VREFINTF = (uint8_t)0x01 }
其中PVDOF是高低电压的标志。但是RM0031手册的70页里面写的是PVDO是0代表高过配置电压,1代表低于配置电压。而不是说的标志,是寄存器配置
有点搞不清该怎么写了
PVDOF: PVD output flag
This bit is set and cleared by hardware.
0: VDD/VDDA is above the VPVD threshold
1: VDD/VDDA is below the VPVD threshold
巅峰残狼 回答时间:2014-12-11 13:16:08
这个是STM32的PVD,应该和STM8差不多少,监测的话应该是通过程序设置,当高于时候会怎么样,低于的时候会怎么样,就是说两个方向的监测 9CB_GIL)FENYX]~FQ`W(`]4.jpg
巅峰残狼 回答时间:2014-12-11 13:21:21
jeromeRo 发表于 2014-12-9 15:35
谢谢你的解答,在固件库里定义了:
enum   PWR_FLAG_TypeDef { PWR_FLAG_PVDOF = (uint8_t)0x40, PWR_FLAG_ ...

“PVDO是0代表高过配置电压,1代表低于配置电压”当高于阀值电压时,表示正常,PVDO为0;低于阀值时PVDO置1,产生中断,起到监测的目的;之后在中断函数里写保护代码就可以了啊
奔跑小蜗牛 回答时间:2014-12-13 14:26:55
主程序:
void main(void)

    时钟初始化;
   GPIO初始化;
   PWR_INC();
   while(1);

stm8l15x_it.c中断函数:
INTERRUPT_HANDLER(EXTIE_F_PVD_IRQHandler,5)
{
LED_work();
}
wambob 回答时间:2014-12-16 21:47:56
#define LED1_L()   (GPIO_ResetBits(GPIOD,GPIO_Pin_6))

void CLK_INC(void)                                        //时钟配置
{
  CLK_SYSCLKDivConfig (CLK_SYSCLKDiv_16);                    //时钟16分频
}

void GPIO_INC(void)                                       //IO口初始化
{
  GPIO_Init(GPIOD,GPIO_Pin_6,GPIO_Mode_Out_PP_High_Slow);
}

void delayms(u16 i)
{
    u16 j;
    for(;i > 0;i --)
        for(j = 500;j > 0;j --);           //延时
}


void PWR_INC(void)                                        //PWR初始化
{
  PWR_PVDLevelConfig(PWR_PVDLevel_2V85);                  //PVD设置2.85V
  PWR_PVDCmd(ENABLE);                                     //PVD使能
  PWR_PVDITConfig(ENABLE);                                //PVD中断使能
}

void main(void)
{
    CLK_INC();
    GPIO_INC();
    PWR_INC();                                              //进入中断点亮LED
  __enable_interrupt();                                    //全局中断使能
  
  while (1)
  {
   
  }
}
jeromeRo 回答时间:2014-12-17 11:21:41
wambob 发表于 2014-12-16 21:47
#define LED1_L()   (GPIO_ResetBits(GPIOD,GPIO_Pin_6))

void CLK_INC(void)                            ...

你这个程序,无法进入中断的,我实验过了,仿真板无任何反应
jeromeRo 回答时间:2014-12-17 11:23:52
奔跑小蜗牛 发表于 2014-12-13 14:26
主程序:
void main(void)

试过了,没反应
wambob 回答时间:2014-12-17 21:31:01
请问楼主的开发环境是否配置好了
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版