金牌会员
 
- 积分
- 2008
- 金钱
- 2008
- 注册时间
- 2014-7-1
- 在线时间
- 189 小时
|
1金钱
本帖最后由 shenqihao 于 2025-3-5 08:44 编辑
f103zet6怎么进不去pvd中断,请帮看看。
单片机供电从2V到3.6V,来回调整,也进不去。
测试方法
1、测试pc9引脚电压
2、调节电压后,仿真进去看看0X08070F00 的值。
- #include "pvd.h"
- #include "delay.h"
- #include "stmflash.h"
- #define FLASH_SAVE_PVDTest_ADDR 0X08070F00 //电量模式
- void write_PVDTest(u16 d);
- void write_PVDTest2(u16 d);
- //PVD初始化
- void PvdInit(void)
- {
-
- EXTI->IMR |=(1<<16);//开启PVD中断
- EXTI->FTSR |=(1<<16);//下降沿触发
- EXTI->RTSR |=(1<<16);//上升沿触发
-
- PWR->CR |= PWR_CR_PVDE;//使能PVD
- PWR->CR &=0xFFFFFF1F;//
- PWR->CR |=0xFFFFFF6F;//选择电压阈值,011是2.5V
- MY_NVIC_Init(3,3,PVD_IRQn,2);//组2,抢占优先级为3,响应优先级为3
-
-
- RCC->APB2ENR |=1<<4;//使能端口PORTC口时钟
-
- GPIOC->CRH &=0xFFFFFF0F;
- GPIOC->CRH |=0x00000030;//PORTC9推挽输出
- GPIOC->ODR |=(1<<9);//GPIOC9输出为0
- }
- //
- void PVD_IRQHandler(void)
- {
- EXTI->PR=1<<16; //
- if((PWR->CSR&PWR_CSR_PVDO)==PWR_CSR_PVDO)//低于PVD阈值
- {
- write_PVDTest(1);
- delay_ms(1);
- GPIOC->ODR &=~(1<<9);//GPIOC8输出为0
- }
- else//高于PVD阈值
- {
- write_PVDTest2(2);
- delay_ms(1);
- GPIOC->ODR |=(1<<9);//GPIOC8输出为1
- }
- }
- void write_PVDTest(u16 d)
- {
- u16 datatemp[1];
- datatemp[0]=d;
- STMFLASH_Write(FLASH_SAVE_PVDTest_ADDR,(u16*)datatemp,1);
- }
- void write_PVDTest2(u16 d)
- {
- u16 datatemp[1];
- datatemp[0]=d;
- STMFLASH_Write(FLASH_SAVE_PVDTest_ADDR+2,(u16*)datatemp,1);
- }
复制代码
|
|