<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32學(xué)習(xí)筆記——實(shí)時(shí)時(shí)鐘RTC

          STM32學(xué)習(xí)筆記——實(shí)時(shí)時(shí)鐘RTC

          作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏

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

          //通過(guò)該例程,學(xué)會(huì)RTC的配置和讀取計(jì)數(shù)值,數(shù)值格式的轉(zhuǎn)換的方法,要想控制好的話,要多看資料,多看程序

          #include"stm32f10x_lib.h"

          vu32TimeDisplay=0;

          ErrorStatusHSEStartUpStatus;

          u32THH=0,TMM=0,TSS=0;

          unsignedintjj=0;

          unsignedintLedNumVal=0,LedNumVal1=0;//變量定義

          //此表為LED的字模,共陰數(shù)碼管0-9-

          unsignedcharDisp_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//段碼控制

          //此表為8個(gè)數(shù)碼管位選控制,共陰數(shù)碼管1-8個(gè)-

          unsignedchardispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};//位選控制查表的方法控制

          unsignedintLedOut[10];//變量定義

          voidRCC_Configuration(void);

          voidGPIO_Configuration(void);

          voidUSART_Configuration(void);

          voidRTC_Configuration(void);

          voidNVIC_Configuration(void);

          u32Time_Regulate(void);

          voidTime_Adjust(void);

          voidTime_Show(void);

          voidTime_Display(u32TimeVar);

          voidDelay(vu32nCount);

          intmain(void)

          {

          #ifdefDEBUG

          debug();

          #endif

          RCC_Configuration();//系統(tǒng)時(shí)鐘配置函數(shù)

          NVIC_Configuration();//NVIC配置函數(shù)

          GPIO_Configuration();//配置GPIO

          //從指定的后備寄存器中讀取數(shù)據(jù),參數(shù)用來(lái)選擇后備寄存器,可以是BKP_DR1~BKP_DR1010個(gè)后備寄存器

          if(BKP_ReadBackupRegister(BKP_DR1)!=0xA5A5)//???為什么要檢測(cè)0xA5A5

          {

          //配置RTC

          RTC_Configuration();

          Time_Adjust();

          BKP_WriteBackupRegister(BKP_DR1,0xA5A5);//向指定的后備寄存器中寫入用戶程序數(shù)據(jù)這里是向BKP_DR1中寫入0xA5A5

          }

          else

          {

          if(RCC_GetFlagStatus(RCC_FLAG_PORRST)!=RESET)//檢查指定的RCC標(biāo)志位設(shè)置與否,這里檢查POR/PDR復(fù)位

          //{

          RTC_WaitForSynchro();//等待最近一次對(duì)RTC寄存器的寫操作完成,也即等待RTC寄存器同步

          RTC_ITConfig(RTC_IT_SEC,ENABLE);//使能或失能指定的RTC中斷第一個(gè)參數(shù)指定待配置的RTC中斷源,可以是RTC_IT_SEC:秒中斷

          //RTC_IT_OW:溢出中斷,RTC_IT_ALR:鬧鐘中斷。第二個(gè)參數(shù)可以是ENABLE或DISABLE

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

          }

          #ifdefRTCClockOutput_Enable

          //使能或失能APB1外設(shè)時(shí)鐘具體說(shuō)明詳見(jiàn)《STM32函數(shù)說(shuō)明》P208

          RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE);

          PWR_BackupAccessCmd(ENABLE);//使能或失能RTC和后備寄存器訪問(wèn)

          //該函數(shù)使能或失能管腳的侵入檢測(cè)功能這里是失能

          BKP_TamperPinCmd(DISABLE);

          //調(diào)用該函數(shù)前必須先失能管腳的侵入檢測(cè)功能

          BKP_RTCOutputConfig(BKP_RTCOutputSource_CalibClock);//選擇在侵入檢測(cè)管腳上輸出的RTC時(shí)鐘源

          //參數(shù)指定RTC輸出時(shí)鐘源,可以是:BKP_RTCOutputSource_CalibClock:侵入檢測(cè)管腳上輸出,其時(shí)鐘頻率為RTC時(shí)鐘除以64

          //BKP_RTCOutputSource_None:侵入檢測(cè)管腳上無(wú)RTC輸出,BKP_RTCOutputSource_Alarm:侵入檢測(cè)管腳上輸出RTC鬧鐘脈沖

          //BKP_RTCOutputSource_Second:侵入檢測(cè)管腳上輸出RTC秒脈沖

          #endif

          //清除復(fù)位標(biāo)志

          RCC_ClearFlag();

          while(1)

          {unsignedinti;

          //if(++jj>=0x01ff)

          //{LedNumVal1++;

          //jj=0;

          //}

          //得到時(shí)間并顯示RTC_GetCounter():獲得RTC計(jì)數(shù)器的值返回值是u32類型的RTC計(jì)數(shù)器的值

          Time_Display(RTC_GetCounter());

          LedOut[0]=Disp_Tab[THH0/10];//時(shí)

          LedOut[1]=Disp_Tab[THH];

          LedOut[2]=~0XBF;//橫線

          LedOut[3]=Disp_Tab[TMM0/10];//分

          LedOut[4]=Disp_Tab[TMM];

          LedOut[5]=~0XBF;//橫線

          LedOut[6]=Disp_Tab[TSS0/10];//十位

          LedOut[7]=Disp_Tab[TSS];//個(gè)位

          for(i=0;i<8;i++)

          {

          //BSRR:端口位設(shè)置/復(fù)位寄存器,詳細(xì)的GPIO寄存器結(jié)構(gòu)體說(shuō)明見(jiàn)《STM32函數(shù)說(shuō)明》P120

          GPIOB->BSRR=LedOut[i]<<8&0xFF00;

          GPIOB->BRR=(~(LedOut[i]<<8))&0xFF00;//BRR:端口位復(fù)位寄存器

          GPIOB->BSRR=dispbit[i]&0x00FF;//使用查表法進(jìn)行位選

          GPIOB->BRR=(~dispbit[i])&0x00FF;

          Delay(0x000ff);//掃描間隔時(shí)間

          }

          }//while

          }

          voidDelay(vu32nCount)

          {

          for(;nCount!=0;nCount--);

          }

          voidRCC_Configuration(void)

          {

          //復(fù)位RCC外部設(shè)備寄存器到默認(rèn)值

          RCC_DeInit();

          //打開外部高速晶振

          RCC_HSEConfig(RCC_HSE_ON);

          //等待外部高速時(shí)鐘準(zhǔn)備好

          HSEStartUpStatus=RCC_WaitForHSEStartUp();


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();