打印
[STM32F1]

[问答] 请教STM32F103ZE的PVD中断问题

[复制链接]
1122|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cr315|  楼主 | 2024-8-30 15:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ZET6的低电压中断,现在进不了中断,网上也看了很多资料,但是始终就不进不了中断,上升和下降都不进入中断,我把程序贴上,恳请前辈指点一下。


这是PVD中断配置函数:


void PVD_Config(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        EXti_InitTypeDef EXTI_InitStructure;
        
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
        
        //PWR_PVDLevelConfig(PWR_PVDLevel_2V8);
        //PWR_PVDCmd(ENABLE);
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
        NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        
        NVIC_Init(&NVIC_InitStructure);
        
        //EXTI_StructInit(&EXTI_InitStructure);
        //EXTI_ClearITPendingBit(EXTI_Line16);
        EXTI_InitStructure.EXTI_Line = EXTI_Line16;        //ía2¿ÖD¶ÏÏß16רÎaPVDÖD¶Ïê1óÃ
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;        //μçÑ1μíóú·§Öμê±2úéúÖD¶Ï
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;       //ê1Äü

        EXTI_Init(&EXTI_InitStructure);
}



这是主函数:
int main(void)
{
        uint8_t i;
        PWR_PVDLevelConfig(PWR_PVDLevel_2V8);
        PWR_PVDCmd(ENABLE);
        LED_GPIO_Config();
        PVD_Config();
        USART2_Config();
        
        for(i=0;i<9;i++)
        {
                USART_SendData(USART2, temp);
                while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
        }
        while(1);

}

这是PVD中断函数:
void PVD_IRQHandler(void)
{
        if(EXTI_GetITStatus(EXTI_Line16) != RESET)
        {
                EXTI_ClearITPendingBit(EXTI_Line16);
                GPIO_SetBits(GPIOB, GPIO_Pin_0);
        }
}



始终看不到LED灯闪一下。另外请教一下,要使用PVD中断,连接备用电池的引脚是否一定要连接一个100nf的陶瓷电容到电源啊?我现在就没有加电容,是直接连接到3.3V电源的,还没来得及加陶瓷电容,先发个帖请教一下。

使用特权

评论回复
沙发
jcky001| | 2024-8-30 15:59 | 只看该作者
检查中断处理函数内是否有任何可能导致程序挂起或死循环的代码。

使用特权

评论回复
板凳
两只袜子| | 2024-8-30 16:00 | 只看该作者
检查电源和硬件连接

使用特权

评论回复
地板
夜阑风雨| | 2024-9-26 02:00 | 只看该作者
你的EXTINVIC配置看起来是正确的,但你可以尝试注释掉EXTI_StructInit(&EXTI_InitStructure);EXTI_ClearITPendingBit(EXTI_Line16);这两行代码,因为它们可能不是必需的

使用特权

评论回复
5
远山寻你| | 2024-9-26 03:00 | 只看该作者
可以看出你的PVD中断服务程序看起来是正确的,但你可以尝试在中断服务程序中添加一些调试信息,比如通过串口发送一些数据,以确保中断服务程序确实被调用了

使用特权

评论回复
6
淡漠安然| | 2024-9-26 04:00 | 只看该作者
虽然连接备用电池的引脚通常建议连接一个100nF的陶瓷电容到电源,但这并不是PVD中断触发所必需的。

使用特权

评论回复
7
暖了夏天蓝了海| | 2024-9-26 05:00 | 只看该作者
一般来说,PVD中断的触发主要依赖于电压检测电路,而不是外部电容。

使用特权

评论回复
8
光辉梦境| | 2024-9-26 06:00 | 只看该作者
确保你的开发板和电源供应稳定,电压在2.8V左右。使用示波器或万用表监测PVD引脚的电压变化,确保电压确实达到了触发PVD中断的阈值。

使用特权

评论回复
9
三生万物| | 2024-9-26 07:00 | 只看该作者
在中断服务程序中添加一些调试信息,比如通过串口发送一些数据,以确保中断服务程序确实被调用了。

使用特权

评论回复
10
江河千里| | 2024-9-26 08:00 | 只看该作者
你可以尝试简化你的代码,确保每个步骤都是必需的,并且没有遗漏任何步骤。例如,你可以尝试只启用上升沿触发,看看是否能进入中断。

使用特权

评论回复
11
别乱了阵脚| | 2024-9-26 09:00 | 只看该作者
请尝试使用调试工具(如JTAG调试器)来单步执行代码,并检查每个步骤的执行情况

使用特权

评论回复
12
冰春彩落下| | 2024-9-26 10:00 | 只看该作者
是不是中断的优先级设置的不对啊?你还有别的中断在吗?

使用特权

评论回复
13
610u| | 2024-9-29 22:25 | 只看该作者
void PVD_Config(void) {         NVIC_InitTypeDef NVIC_InitStructure

使用特权

评论回复
14
g36xcv| | 2024-9-29 22:45 | 只看该作者
上升和下降都不进入中断

使用特权

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

本版积分规则

1339

主题

3897

帖子

0

粉丝