久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

QQ登錄

只需一步,快速開始

搜索
查看: 14832|回復(fù): 7
收起左側(cè)

STM32 RTC實(shí)時(shí)時(shí)鐘設(shè)置與使用方法

[復(fù)制鏈接]
ID:238669 發(fā)表于 2017-10-11 19:35 | 顯示全部樓層 |閱讀模式
自己做的一個(gè)STM32實(shí)時(shí)時(shí)鐘,給有需要的朋友拿去學(xué)習(xí)。
無(wú)標(biāo)題.png
單片機(jī)源程序如下:
  1. //////////////////////////////////////////////////////////
  2. //本例程演示了RTC的設(shè)置與使用方法
  3. //////////////////////////////////////////////////////////
  4. #include <stdio.h>
  5. #include "ASCII.h"
  6. #include "HZ_GB2312.h"
  7. #include "gui.h"
  8. #include "number.c"

  9. #define LED1_OFF                GPIO_SetBits(GPIOC, GPIO_Pin_0)
  10. #define LED1_ON                        GPIO_ResetBits(GPIOC, GPIO_Pin_0)
  11. #define LED2_OFF                GPIO_SetBits(GPIOC, GPIO_Pin_1)
  12. #define LED2_ON                        GPIO_ResetBits(GPIOC, GPIO_Pin_1)
  13. #define LED3_OFF                GPIO_SetBits(GPIOC, GPIO_Pin_2)
  14. #define LED3_ON                        GPIO_ResetBits(GPIOC, GPIO_Pin_2)

  15. #define LED1_STATUS                GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_0)
  16. #define LED2_STATUS                GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_1)
  17. #define LED3_STATUS                GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_2)

  18. //vu32 flag_display = 0;

  19. //配置LED對(duì)應(yīng)端口
  20. void LED_Configuration(void)
  21. {
  22.         GPIO_InitTypeDef GPIO_InitStructure;

  23.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE );
  24.         
  25.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;
  26.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  27.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  28.         GPIO_Init(GPIOC, &GPIO_InitStructure);
  29. }

  30. //通用延時(shí)函數(shù)
  31. #define TIME_MS 12000                        //@72M
  32. #define TIME_US 10                                //@72M

  33. //長(zhǎng)延時(shí)函數(shù)
  34. void Delay_ms(unsigned int n)
  35. {
  36.         unsigned int i,j;
  37.         
  38.         for(i=n;i>0;i--)
  39.                 for(j=TIME_MS;j>0;j--);
  40. }

  41. //短延時(shí)函數(shù)
  42. void Delay_us(unsigned int n)
  43. {
  44.         unsigned int i,j;
  45.         
  46.         for(i=n;i>0;i--)
  47.                 for(j=TIME_US;j>0;j--);
  48. }

  49. //系統(tǒng)中斷管理
  50. void NVIC_Configuration(void)
  51. {
  52.         NVIC_InitTypeDef NVIC_InitStructure;

  53.           NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
  54.           NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  55.           NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  56.           NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  57.           NVIC_Init(&NVIC_InitStructure);
  58. }

  59. void RTC_Configuration(void)
  60. {
  61.           //后備域時(shí)鐘使能
  62.           RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
  63.         //后備域訪問(wèn)使能
  64.           PWR_BackupAccessCmd(ENABLE);
  65.         //復(fù)位后備域
  66.           BKP_DeInit();
  67.          
  68.         //低頻外部時(shí)鐘LSE使能
  69.           RCC_LSEConfig(RCC_LSE_ON);
  70.           //等待LSE就緒
  71.           while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);
  72.          //選擇LSE作為RTC時(shí)鐘源
  73.           RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
  74.         //RTC時(shí)鐘使能
  75.           RCC_RTCCLKCmd(ENABLE);
  76.           //等待RTC寄存器同步
  77.           RTC_WaitForSynchro();
  78.           //等待RTC寄存器最近一次寫操作完成
  79.           RTC_WaitForLastTask();

  80.           //秒中斷使能
  81.           RTC_ITConfig(RTC_IT_SEC, ENABLE);
  82.           //等待RTC寄存器最近一次寫操作完成
  83.           RTC_WaitForLastTask();

  84.           //配置預(yù)分頻系數(shù)為32767+1,當(dāng)選擇32.768kHz晶振時(shí)RTC計(jì)數(shù)頻率為1Hz
  85.           RTC_SetPrescaler(32767);
  86.           //等待RTC寄存器最近一次寫操作完成
  87.           RTC_WaitForLastTask();
  88. }

  89. //配置系統(tǒng)時(shí)鐘,使能各外設(shè)時(shí)鐘
  90. void RCC_Configuration(void)
  91. {
  92.         SystemInit();        
  93.         RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC |RCC_APB2Periph_ADC1  
  94.                                                         |RCC_APB2Periph_GPIOD| RCC_APB2Periph_AFIO , ENABLE );
  95. }

  96. void RTC_Check()
  97. {
  98.         if(BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5)        //如果后備寄存器不為特定值,配置RTC
  99.           {
  100.             RTC_Configuration();                                                //RTC配置
  101.             RTC_WaitForLastTask();                                                //等待RTC寄存器最后一次寫操作完成
  102.             
  103.             RTC_SetCounter(0);                                                        //設(shè)置RTC計(jì)數(shù)器值
  104.             RTC_WaitForLastTask();                                                 //等待RTC寄存器最后一次寫操作完成
  105.         
  106.             BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);
  107.           }
  108.           else                                                                                        //如果后背寄存器為特定值,僅簡(jiǎn)單操作RTC
  109.           {
  110.             
  111.             RTC_WaitForSynchro();                                                //等待RTC寄存器同步
  112.             RTC_ITConfig(RTC_IT_SEC, ENABLE);                        //使能RTC秒中斷
  113.             RTC_WaitForLastTask();                                                //等待RTC寄存器最近一次寫操作完成
  114.           }
  115.         
  116.         RCC_ClearFlag();        //清除標(biāo)志
  117. }

  118. //配置所有外設(shè)
  119. void Init_All_Periph(void)
  120. {
  121.         SystemInit();
  122.         LED_Configuration();
  123.         NVIC_Configuration();
  124.         
  125.         LCD_Init();        //LCD彩屏初始化
  126.         LCD_ClearScreen(WHITE);        //清屏
  127. }

  128. u8 isIn;
  129. //主函數(shù)
  130. int main(void)
  131. {
  132. //        char buf[25];

  133.         u32 TimeVar;
  134.         
  135.         Init_All_Periph();
  136.         
  137.         RTC_Check();        //實(shí)時(shí)時(shí)鐘檢查
  138.          
  139.           GUI_Text(20,50,"Elapsed Time:",BLUE,WHITE);
  140.         
  141.         //先固定顯示兩個(gè)冒號(hào)的位置
  142.         LCD_DrawPicture(100, 120, Colon_Image);
  143.         LCD_DrawPicture(200, 120, Colon_Image);

  144.         while(1)
  145.         {
  146.                 if(isIn)
  147.                 {
  148.                         TimeVar = RTC_GetCounter();
  149.                
  150.                         LCD_DrawPicture(20, 120, Num_Image[TimeVar/3600%24/10]);        //時(shí) 十位
  151.                         LCD_DrawPicture(60, 120, Num_Image[TimeVar/3600%24%10]);        //時(shí) 個(gè)位
  152.                         LCD_DrawPicture(120, 120, Num_Image[TimeVar/60%60/10]);        //分 十位
  153.                         LCD_DrawPicture(160, 120, Num_Image[TimeVar/60%60%10]);        //分 個(gè)位
  154.                         LCD_DrawPicture(220, 120, Num_Image[TimeVar%60/10]);        //秒 十位
  155.                         LCD_DrawPicture(260, 120, Num_Image[TimeVar%60%10]);        //秒 個(gè)位
  156.                         isIn = 0;
  157.                 }
  158.         }
  159. }


  160. //RTC中斷服務(wù)函數(shù)
  161. void RTC_IRQHandler()
  162. {
  163.         if(RTC_GetITStatus(RTC_IT_SEC) != RESET)                        //判斷是否為秒中斷
  164.         {
  165.                 isIn = 1;
  166.             RTC_ClearITPendingBit(RTC_IT_SEC);                                //清除秒中斷標(biāo)志
  167.           }
  168. }
復(fù)制代碼

所有資料51hei提供下載(大家不要下載,資源不正確,編譯不通過(guò),求大神幫忙修改下):
RTC實(shí)時(shí)時(shí)鐘.rar (514.44 KB, 下載次數(shù): 138)

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:344485 發(fā)表于 2018-6-4 11:02 | 顯示全部樓層
可以給我number.c嗎?

大家不要下載

資源不正確,編譯不通過(guò)。。
也沒(méi)有注釋需要添加那些文件,跟沒(méi)有文字說(shuō)明

回復(fù)

使用道具 舉報(bào)

ID:352921 發(fā)表于 2018-6-16 17:40 | 顯示全部樓層
真棒。。謝謝樓主。。
回復(fù)

使用道具 舉報(bào)

ID:490549 發(fā)表于 2019-3-14 11:05 | 顯示全部樓層
謝謝樓主
回復(fù)

使用道具 舉報(bào)

ID:494664 發(fā)表于 2019-4-22 17:26 | 顯示全部樓層
真棒!謝謝樓主的分享!
回復(fù)

使用道具 舉報(bào)

ID:453032 發(fā)表于 2019-6-12 11:17 | 顯示全部樓層
為什么我直接運(yùn)行代碼會(huì)出現(xiàn)這個(gè)錯(cuò)誤?  C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x.h(80): error:  #35: #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"
回復(fù)

使用道具 舉報(bào)

ID:561907 發(fā)表于 2019-6-17 17:13 | 顯示全部樓層
收藏了,后面要使用RTC功能了。
回復(fù)

使用道具 舉報(bào)

ID:55207 發(fā)表于 2019-12-7 09:03 | 顯示全部樓層
樓主,有沒(méi)有stm32f051的RTC例子?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区三区免费在线观看 | 天天久久 | aaaa一级毛片 | 91五月天| 日韩欧美在线播放 | 国产精品视频久久久久 | 日韩欧美三级在线 | 天天天操操操 | 久久这里只有精品首页 | 玖玖在线免费视频 | 狠狠爱一区二区三区 | 精品在线一区 | 午夜小视频在线观看 | 亚洲日韩中文字幕一区 | 色站综合| 亚洲va欧美va天堂v国产综合 | 麻豆亚洲 | 日韩电影免费在线观看中文字幕 | 亚洲欧美中文字幕在线观看 | 午夜国产 | 国产黄色在线观看 | 色桃网 | 男女下面一进一出网站 | 国产精品亚洲综合 | 在线中文字幕日韩 | 日韩久久久久久久 | 国产成人精品久久久 | 欧美伊人| 国内精品视频在线观看 | 亚洲精品一区二区网址 | www.玖玖玖 | 最新国产在线 | 日韩欧美一区二区三区免费观看 | 91在线看| 久久中文字幕一区 | 欧美一区二区在线观看 | 四虎在线观看 | 亚洲v区| 亚洲国产一区在线 | 日韩在线免费播放 | 欧美日韩国产不卡 |