在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32學習筆記——實時時鐘RTC

            STM32學習筆記——實時時鐘RTC

            作者: 時間:2016-11-28 來源:網絡 收藏

            本文引用地址:http://www.biyoush.com/article/201611/322893.htm

            if(HSEStartUpStatus==SUCCESS)//外部高速時鐘已經準別好

            {

            //開啟FLASH的預取功能

            FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

            //FLASH延遲2個周期

            FLASH_SetLatency(FLASH_Latency_2);

            //配置AHB(HCLK)時鐘=SYSCLK

            RCC_HCLKConfig(RCC_SYSCLK_Div1);

            //配置APB2(PCLK2)鐘=AHB時鐘

            RCC_PCLK2Config(RCC_HCLK_Div1);

            //配置APB1(PCLK1)鐘=AHB1/2時鐘

            RCC_PCLK1Config(RCC_HCLK_Div2);

            //配置PLL時鐘==外部高速晶體時鐘*9PLLCLK=8MHz*9=72MHz

            RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

            //使能PLL時鐘

            RCC_PLLCmd(ENABLE);

            //等待PLL時鐘就緒

            while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)

            {

            }

            //配置系統(tǒng)時鐘=PLL時鐘

            RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

            //檢查PLL時鐘是否作為系統(tǒng)時鐘

            while(RCC_GetSYSCLKSource()!=0x08)

            {

            }

            }

            //啟動GPIO

            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);

            //啟動AFIO

            RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

            }

            voidNVIC_Configuration(void)

            {

            NVIC_InitTypeDefNVIC_InitStructure;//定義NVIC配置的結構體變量

            #ifdefVECT_TAB_RAM

            NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);

            #else

            NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);

            #endif

            NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

            NVIC_InitStructure.NVIC_IRQChannel=RTC_IRQChannel;//指定是RTC全局中斷

            NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;

            NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;

            NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

            NVIC_Init(&NVIC_InitStructure);

            }

            voidGPIO_Configuration(void)

            {

            GPIO_InitTypeDefGPIO_InitStructure;//定義配置GPIO的結構體變量

            GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);//改變指定管腳的映射

            //第一個參數選擇重映射的管腳用以選擇用作事件輸出的GPIO端口在這里是SWJ完全失能詳見《STM32函數說明》P132

            //第二個參數指定管腳重映射的新狀態(tài),可以是:ENABLE或DISABLE

            GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;//選擇所有管腳

            GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出模式

            GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//引腳頻率50M

            GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化PA

            GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化PB

            //????

            GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;

            GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

            GPIO_Init(GPIOB,&GPIO_InitStructure);

            }

            voidRTC_Configuration(void)

            {

            //啟用PWR和BKP的時鐘(fromAPB1)

            RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE);

            //后備域解鎖

            PWR_BackupAccessCmd(ENABLE);//使能后備寄存器訪問

            //備份寄存器模塊復位

            BKP_DeInit();//將BKP的全部寄存器重設為缺省值

            RCC_LSEConfig(RCC_LSE_ON);//設置外部低速晶振(LSE)32.768K參數指定LSE的狀態(tài),可以是:RCC_LSE_ON:LSE晶振ON

            //RCC_LSE_ON:LSE晶振OFF,RCC_LSE_Bypass:LSE晶振被外部時鐘旁路

            //等待穩(wěn)定

            while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET)

            {}

            //RTC時鐘源配置成LSE(外部32.768K)

            RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//設置RTC時鐘,參數指定RTC時鐘,可以是:RCC_RTCCLKSource_LSE:選擇LSE作為RTC時鐘

            //RCC_RTCCLKSource_LSI:選擇LSI作為RTC時鐘,RCC_RTCCLKSource_HSE_Div128:選擇HSE時鐘128分頻作為RTC時鐘

            //RTC開啟

            RCC_RTCCLKCmd(ENABLE);

            //開啟后需要等待APB1時鐘與RTC時鐘同步,才能讀寫寄存器

            RTC_WaitForSynchro();

            //每一次讀寫寄存器前,要確定上一個操作已經結束

            RTC_WaitForLastTask();//等待最近一次對RTC寄存器的寫操作完成

            //使能秒中斷

            RTC_ITConfig(RTC_IT_SEC,ENABLE);

            //讀寫寄存器前,要確定上一個操作已經結束

            RTC_WaitForLastTask();

            //設置RTC分頻器,使RTC時鐘為1Hz

            //RTCperiod=RTCCLK/RTC_PR=(32.768KHz)/(32767+1)

            RTC_SetPrescaler(32767);

            //等待寄存器寫入完成

            RTC_WaitForLastTask();

            //等待寫入完成

            RTC_WaitForLastTask();

            }

            voidTime_Adjust(void)//校準時間函數

            {

            RTC_WaitForLastTask();

            RTC_SetCounter(12*3600+2*60+0);//設置RTC計數器的值參數是新的RTC計數器的值

            //在使用本函數前必須先調用函數RTC_WaitForLastTask(),等待標志位RTOFF被設置

            RTC_WaitForLastTask();

            }

            voidTime_Display(u32TimeVar)//把RTC計數器的值轉化為時,分,秒進制

            {

            THH=TimeVar/3600;

            TMM=(TimeVar%3600)/60;

            TSS=(TimeVar%3600)%60;

            }

            voidassert_failed(u8*file,u32line)

            {

            while(1)

            {}

            }

            中斷服務程序在stm32f10x_it.c文件中,其中RTC中斷處理函數如下:

            voidRTC_IRQHandler(void)//RTC的中斷服務程序

            {

            GPIO_WriteBit(GPIOB,GPIO_Pin_7,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_7)));//B7口取反

            if(RTC_GetITStatus(RTC_IT_SEC)!=RESET)

            {

            RTC_ClearITPendingBit(RTC_IT_SEC);//清除RTC的中斷待處理位

            GPIO_WriteBit(GPIOB,GPIO_Pin_7,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_7)));

            TimeDisplay=1;

            RTC_WaitForLastTask();

            if(RTC_GetCounter()==0x00015180)

            {

            RTC_SetCounter(0x0);

            RTC_WaitForLastTask();

            }

            }

            }


            上一頁 1 2 下一頁

            關鍵詞: STM32實時時鐘RT

            評論


            技術專區(qū)

            關閉