正确操作步骤:
开时钟;配置电源检测;配置中断优先级
/* includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "stm32_eval.h"
void exti_configuration(void);
void nvic_configuration(void);
int main(void)
{
stm_eval_ledinit(led1);
gpio_setbits(gpioc, gpio_pin_7);
/* enable pwr and bkp clock */
rcc_apb1periphclockcmd(rcc_apb1periph_pwr | rcc_apb1periph_bkp, enable);//电源管理部分时钟开启
exti_configuration();
nvic_configuration();
pwr_pvdlevelconfig(pwr_pvdlevel_2v9);// 设定监控阀值
/* enable the pvd output */
pwr_pvdcmd(enable);// 使能pvd
while (1)
{
}
}
void exti_configuration(void)
{
exti_inittypedef exti_initstructure;
exti_clearitpendingbit(exti_line16);
exti_initstructure.exti_line = exti_line16;// pvd连接到中断线16上
exti_initstructure.exti_mode = exti_mode_interrupt;//使用中断模式
exti_initstructure.exti_trigger = exti_trigger_rising_falling;//电压上升或下降越过设定阀值时都产生中断。
exti_initstructure.exti_linecmd = enable;// 使能中断线
exti_init(&exti_initstructure);// 初始
}
void nvic_configuration(void)
{
nvic_inittypedef nvic_initstructure;
nvic_prioritygroupconfig(nvic_prioritygroup_1);//中断优先级配置
//设置pvd中断
nvic_initstructure.nvic_irqchannel = pvd_irqn;
nvic_initstructure.nvic_irqchannelpreemptionpriority = 0;
nvic_initstructure.nvic_irqchannelsubpriority = 0;
nvic_initstructure.nvic_irqchannelcmd = enable;
nvic_init(&nvic_initstructure);
}
注意:gpio驱动led模式为gpio_initstructure.gpio_mode = gpio_mode_out_pp;还是推挽输出。
中断处理函数:
void pvd_irqhandler(void)
{
if(exti_getitstatus(exti_line16) != reset)
{
stm_eval_ledtoggle(led1);
exti_clearitpendingbit(exti_line16);
}
}
『本文转载自网络,u球体育app下载的版权归原作者所有,如有侵权请联系删除』