找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2166|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

STM32 PVD寄存器版本源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:161657 發(fā)表于 2020-3-4 13:46 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
前幾天研究了一下STM32的電源控制部分的功能,剛好需要一個(gè) 掉電瞬間保存數(shù)據(jù)到SMT32內(nèi)部的功能,其實(shí)這個(gè)功能也是很簡單的,簡單的配置一下幾個(gè)寄存器的配置,然后打開中斷就可以了。這個(gè)。c文件經(jīng)過我測試過的,470uf的電容LED會(huì)閃爍一下,但是無法保存數(shù)據(jù),換了一個(gè)1000uf的電容可以保存11個(gè)2字節(jié)的數(shù)據(jù)到STM32(只測試這么多了,我實(shí)際上只需要2個(gè)字節(jié)就夠用了,掉電瞬間只是保存關(guān)鍵數(shù)據(jù))C文件如下:
#include "pvd.h"
#include "sys.h"
#include "led.h"
#include "usart.h"
#include "stmflash.h"
#include "BMJ_data_ding_yi.h"//包埋機(jī)數(shù)據(jù)定義頭文件下
//掉電寫入數(shù)據(jù)測試成功  1000uf的電容可以測試寫入了12個(gè)字節(jié)的 數(shù)據(jù) 是沒有什么問題的
void PWR_PVD_Init(void)
{      
    RCC->APB1ENR|=1<<28;    //使能PORTB時(shí)鐘
    PWR->CR |= 7<<5; //2.9V 電壓閥值
    PWR->CR |= 1<<4; //PVD使能   
    EXTI->IMR|=1<<16;
    //EXTI->FTSR|=1<<16;//這里寫錯(cuò)了 這樣寫進(jìn)入不了中斷,注意上升沿和下降沿產(chǎn)生的中斷剛好是翻過來的,這里感覺是資料翻譯錯(cuò)誤的原因造成的
   //改為下面這樣就正常了
   EXTI->RTSR|=1<<16;//配置這個(gè)寄存器才是斷電瞬間保存數(shù)據(jù)
    EXTI->EMR |=1<<16;
    EXTI->SWIER |= 1<<16;
    MY_NVIC_Init(1,0,PVD_IRQn,2);//組2,最低優(yōu)先級(jí)
}
void PVD_IRQHandler(void)
{
   EXTI->PR |=1<<16;//清中斷   
   if (((PWR->CSR)&(1<<2))!=0)
         {
                                                        ZLG_LED=0;
                                                        LLZ_LED=0;
                                                        ZLH_LED=0;
                                                        YLH_LED1=0;
                                                        CZT_LED=0;
                                         
                                                                         TSJ_can_shu_she_zhi[0]=1;
                                                                         TSJ_can_shu_she_zhi[1]=2;
                                                                         TSJ_can_shu_she_zhi[2]=3;
                                                                         TSJ_can_shu_she_zhi[3]=4;
                                                                         TSJ_can_shu_she_zhi[4]=5;
                                                                         TSJ_can_shu_she_zhi[5]=6;
                                                                         TSJ_can_shu_she_zhi[6]=7;
                                                                         TSJ_can_shu_she_zhi[7]=8;
                                                                         TSJ_can_shu_she_zhi[8]=9;
                                                                         TSJ_can_shu_she_zhi[9]=10;
                                                                         TSJ_can_shu_she_zhi[10]=11;
                                                                        STMFLASH_Unlock();//解鎖
                                                                        STMFLASH_ErasePage(dou_dong_ci_shu_FLASH_BASE);//擦除地址 0X08070000  此函數(shù)內(nèi)部有等待擦出完成
                                                                        STMFLASH_WriteHalfWord(dou_dong_ci_shu_FLASH_BASE,TSJ_can_shu_she_zhi[0]);//0X08070000地址寫入數(shù)組的第一個(gè)元素BMJ_wen_du_she_zhi[0]
                                                                        STMFLASH_WriteHalfWord(zhi_liu_shi_jian_FLASH_BASE,TSJ_can_shu_she_zhi[1]);//0X08070000地址寫入數(shù)組的第一個(gè)元素BMJ_wen_du_she_zhi[0]
                                                                        STMFLASH_WriteHalfWord(bao_hu_gang_hao_FLASH_BASE,TSJ_can_shu_she_zhi[2]);//0X08070000地址寫入數(shù)組的第一個(gè)元素BMJ_wen_du_she_zhi[0]
                                                                        STMFLASH_WriteHalfWord(ti_qian_jia_wen_FLASH_BASE,TSJ_can_shu_she_zhi[3]);//0X08070000地址寫入數(shù)組的第一個(gè)元素BMJ_wen_du_she_zhi[0]
                                                                        STMFLASH_WriteHalfWord(kuai_su_Time_FLASH_BASE,TSJ_can_shu_she_zhi[4]);//0X08070000地址寫入數(shù)組的第一個(gè)元素BMJ_wen_du_she_zhi[0]               
                                                                        STMFLASH_WriteHalfWord(shi_gang_la_wen_FLASH_BASE,TSJ_can_shu_she_zhi[5]);//0X08070000地址寫入數(shù)組的第一個(gè)元素BMJ_wen_du_she_zhi[0]
                                                                        STMFLASH_WriteHalfWord(shi_yi_gang_la_wen_FLASH_BASE,TSJ_can_shu_she_zhi[6]);//0X08070000地址寫入數(shù)組的第一個(gè)元素BMJ_wen_du_she_zhi[0]
                                                                        STMFLASH_WriteHalfWord(shi_er_gang_la_wen_FLASH_BASE,TSJ_can_shu_she_zhi[7]);//0X08070000地址寫入數(shù)組的第一個(gè)元素BMJ_wen_du_she_zhi[0]
                                                                        STMFLASH_WriteHalfWord(shi_gang_kuai_su_la_wen_FLASH_BASE,TSJ_can_shu_she_zhi[8]);//0X08070000地址寫入數(shù)組的第一個(gè)元素BMJ_wen_du_she_zhi[0]
                                                                        STMFLASH_WriteHalfWord(shi_yi_gang_kuai_sula_wen_FLASH_BASE,TSJ_can_shu_she_zhi[9]);//0X08070000地址寫入數(shù)組的第一個(gè)元素BMJ_wen_du_she_zhi[0]
                                                                        STMFLASH_WriteHalfWord(shi_er_gang_kuai_sula_wen_FLASH_BASE,TSJ_can_shu_she_zhi[10]);//0X08070000地址寫入數(shù)組的第一個(gè)元素BMJ_wen_du_she_zhi[0]
                                                                        STMFLASH_Lock();//上鎖
//                     
//                STMFLASH_Unlock();                                            
//                FLASH->SR|=1<<2; //清除PGERR位.
//                FLASH->SR|=1<<4; //清除WRPRT位.   
//                FLASH->SR|=1<<5; //清除WRPRT位.   
//                STMFLASH_Write_NoCheck(FLASH_ENSAVE_ADDR,(u16*)&TEXT_Buffer,sizeof(TEXT_Buffer));
//                  STMFLASH_Lock();                                                  
         }        
}


以上代碼資料51hei下載地址:
PVD.rar (1.33 KB, 下載次數(shù): 8)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:161657 發(fā)表于 2020-3-4 13:49 | 只看該作者
聲明一下,附件里面只有一個(gè).c和.h文件,大家可以不需要下載附件,只看文中的代碼就行了,
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表