欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STM32 RTC實時時鐘設置與使用方法
[打印本頁]
作者:
623709067
時間:
2017-10-11 19:35
標題:
STM32 RTC實時時鐘設置與使用方法
自己做的一個STM32實時時鐘,給有需要的朋友拿去學習。
無標題.png
(50.08 KB, 下載次數: 157)
下載附件
2017-10-11 19:34 上傳
單片機源程序如下:
//////////////////////////////////////////////////////////
//本例程演示了RTC的設置與使用方法
//////////////////////////////////////////////////////////
#include <stdio.h>
#include "ASCII.h"
#include "HZ_GB2312.h"
#include "gui.h"
#include "number.c"
#define LED1_OFF GPIO_SetBits(GPIOC, GPIO_Pin_0)
#define LED1_ON GPIO_ResetBits(GPIOC, GPIO_Pin_0)
#define LED2_OFF GPIO_SetBits(GPIOC, GPIO_Pin_1)
#define LED2_ON GPIO_ResetBits(GPIOC, GPIO_Pin_1)
#define LED3_OFF GPIO_SetBits(GPIOC, GPIO_Pin_2)
#define LED3_ON GPIO_ResetBits(GPIOC, GPIO_Pin_2)
#define LED1_STATUS GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_0)
#define LED2_STATUS GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_1)
#define LED3_STATUS GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_2)
//vu32 flag_display = 0;
//配置LED對應端口
void LED_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
//通用延時函數
#define TIME_MS 12000 //@72M
#define TIME_US 10 //@72M
//長延時函數
void Delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=n;i>0;i--)
for(j=TIME_MS;j>0;j--);
}
//短延時函數
void Delay_us(unsigned int n)
{
unsigned int i,j;
for(i=n;i>0;i--)
for(j=TIME_US;j>0;j--);
}
//系統中斷管理
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void RTC_Configuration(void)
{
//后備域時鐘使能
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
//后備域訪問使能
PWR_BackupAccessCmd(ENABLE);
//復位后備域
BKP_DeInit();
//低頻外部時鐘LSE使能
RCC_LSEConfig(RCC_LSE_ON);
//等待LSE就緒
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);
//選擇LSE作為RTC時鐘源
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
//RTC時鐘使能
RCC_RTCCLKCmd(ENABLE);
//等待RTC寄存器同步
RTC_WaitForSynchro();
//等待RTC寄存器最近一次寫操作完成
RTC_WaitForLastTask();
//秒中斷使能
RTC_ITConfig(RTC_IT_SEC, ENABLE);
//等待RTC寄存器最近一次寫操作完成
RTC_WaitForLastTask();
//配置預分頻系數為32767+1,當選擇32.768kHz晶振時RTC計數頻率為1Hz
RTC_SetPrescaler(32767);
//等待RTC寄存器最近一次寫操作完成
RTC_WaitForLastTask();
}
//配置系統時鐘,使能各外設時鐘
void RCC_Configuration(void)
{
SystemInit();
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC |RCC_APB2Periph_ADC1
|RCC_APB2Periph_GPIOD| RCC_APB2Periph_AFIO , ENABLE );
}
void RTC_Check()
{
if(BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5) //如果后備寄存器不為特定值,配置RTC
{
RTC_Configuration(); //RTC配置
RTC_WaitForLastTask(); //等待RTC寄存器最后一次寫操作完成
RTC_SetCounter(0); //設置RTC計數器值
RTC_WaitForLastTask(); //等待RTC寄存器最后一次寫操作完成
BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);
}
else //如果后背寄存器為特定值,僅簡單操作RTC
{
RTC_WaitForSynchro(); //等待RTC寄存器同步
RTC_ITConfig(RTC_IT_SEC, ENABLE); //使能RTC秒中斷
RTC_WaitForLastTask(); //等待RTC寄存器最近一次寫操作完成
}
RCC_ClearFlag(); //清除標志
}
//配置所有外設
void Init_All_Periph(void)
{
SystemInit();
LED_Configuration();
NVIC_Configuration();
LCD_Init(); //LCD彩屏初始化
LCD_ClearScreen(WHITE); //清屏
}
u8 isIn;
//主函數
int main(void)
{
// char buf[25];
u32 TimeVar;
Init_All_Periph();
RTC_Check(); //實時時鐘檢查
GUI_Text(20,50,"Elapsed Time:",BLUE,WHITE);
//先固定顯示兩個冒號的位置
LCD_DrawPicture(100, 120, Colon_Image);
LCD_DrawPicture(200, 120, Colon_Image);
while(1)
{
if(isIn)
{
TimeVar = RTC_GetCounter();
LCD_DrawPicture(20, 120, Num_Image[TimeVar/3600%24/10]); //時 十位
LCD_DrawPicture(60, 120, Num_Image[TimeVar/3600%24%10]); //時 個位
LCD_DrawPicture(120, 120, Num_Image[TimeVar/60%60/10]); //分 十位
LCD_DrawPicture(160, 120, Num_Image[TimeVar/60%60%10]); //分 個位
LCD_DrawPicture(220, 120, Num_Image[TimeVar%60/10]); //秒 十位
LCD_DrawPicture(260, 120, Num_Image[TimeVar%60%10]); //秒 個位
isIn = 0;
}
}
}
//RTC中斷服務函數
void RTC_IRQHandler()
{
if(RTC_GetITStatus(RTC_IT_SEC) != RESET) //判斷是否為秒中斷
{
isIn = 1;
RTC_ClearITPendingBit(RTC_IT_SEC); //清除秒中斷標志
}
}
復制代碼
所有資料51hei提供下載(大家不要下載,資源不正確,編譯不通過,求大神幫忙修改下):
RTC實時時鐘.rar
(514.44 KB, 下載次數: 138)
2017-10-11 22:17 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
周杰倫的爸爸
時間:
2018-6-4 11:02
可以給我number.c嗎?
大家不要下載
資源不正確,編譯不通過。。
也沒有注釋需要添加那些文件,跟沒有文字說明
作者:
0123654
時間:
2018-6-16 17:40
真棒。。謝謝樓主。。
作者:
bnbn123456
時間:
2019-3-14 11:05
謝謝樓主
作者:
sukiKIKO
時間:
2019-4-22 17:26
真棒!謝謝樓主的分享!
作者:
0714
時間:
2019-6-12 11:17
為什么我直接運行代碼會出現這個錯誤? 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)"
作者:
x88484532
時間:
2019-6-17 17:13
收藏了,后面要使用RTC功能了。
作者:
metalmadman
時間:
2019-12-7 09:03
樓主,有沒有stm32f051的RTC例子?
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1