您的位置 首页 厂商

STM32学习笔记——实时时钟RTC

通过该例程,学会RTC的配置和读取计数值,数值格式的转换的方法,要想控制好的话,要多看资料,多看程序includestm32f10x_libhvu32Ti

//经过该例程,学会RTC的装备和读取计数值,数值格局的转化的办法,要想操控好的话,要多看材料,多看程序

#include“stm32f10x_lib.h”

vu32TimeDisplay=0;

ErrorStatusHSEStartUpStatus;

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

unsignedintjj=0;

unsignedintLedNumVal=0,LedNumVal1=0;//变量界说

//此表为LED的字模,共阴数码管0-9

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

//此表为8个数码管位选操控,共阴数码管1-8个

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();//体系时钟装备函数

NVIC_Configuration();//NVIC装备函数

GPIO_Configuration();//装备GPIO

//从指定的后备寄存器中读取数据,参数用来挑选后备寄存器,可所以BKP_DR1~BKP_DR1010个后备寄存器

if(BKP_ReadBackupRegister(BKP_DR1)!=0xA5A5)//???为什么要检测0xA5A5

{

//装备RTC

RTC_Configuration();

Time_Adjust();

BKP_WriteBackupRegister(BKP_DR1,0xA5A5);//向指定的后备寄存器中写入用户程序数据这儿是向BKP_DR1中写入0xA5A5

}

else

{

if(RCC_GetFlagStatus(RCC_FLAG_PORRST)!=RESET)//查看指定的RCC标志位设置与否,这儿查看POR/PDR复位

//{

RTC_WaitForSynchro();//等候最近一次对RTC寄存器的写操作完结,也即等候RTC寄存器同步

RTC_ITConfig(RTC_IT_SEC,ENABLE);//使能或失能指定的RTC中止第一个参数指定待装备的RTC中止源,可所以RTC_IT_SEC:秒中止

//RTC_IT_OW:溢出中止,RTC_IT_ALR:闹钟中止。第二个参数可所以ENABLE或DISABLE

RTC_WaitForLastTask();//等候最近一次对RTC寄存器的写操作完结

}

#ifdefRTCClockOutput_Enable

//使能或失能APB1外设时钟具体阐明详见《STM32函数阐明》P208

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE);

PWR_BackupAccessCmd(ENABLE);//使能或失能RTC和后备寄存器拜访

//该函数使能或失能管脚的侵入检测功用这儿是失能

BKP_TamperPinCmd(DISABLE);

//调用该函数前必须先失能管脚的侵入检测功用

BKP_RTCOutputConfig(BKP_RTCOutputSource_CalibClock);//挑选在侵入检测管脚上输出的RTC时钟源

//参数指定RTC输出时钟源,可所以:BKP_RTCOutputSource_CalibClock:侵入检测管脚上输出,其时钟频率为RTC时钟除以64

//BKP_RTCOutputSource_None:侵入检测管脚上无RTC输出,BKP_RTCOutputSource_Alarm:侵入检测管脚上输出RTC闹钟脉冲

//BKP_RTCOutputSource_Second:侵入检测管脚上输出RTC秒脉冲

#endif

//铲除复位标志

RCC_ClearFlag();

while(1)

{unsignedinti;

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

//{LedNumVal1++;

//jj=0;

//}

//得到时刻并显现RTC_GetCounter():取得RTC计数器的值返回值是u32类型的RTC计数器的值

Time_Display(RTC_GetCounter());

LedOut[0]=Disp_Tab[THH0/10];//时

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];//个位

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

{

//BSRR:端口位设置/复位寄存器,具体的GPIO寄存器结构体阐明见《STM32函数阐明》P120

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

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

GPIOB->BSRR=dispbit[i]&0x00FF;//运用查表法进行位选

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

Delay(0x000ff);//扫描间隔时刻

}

}//while

}

voidDelay(vu32nCount)

{

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

}

voidRCC_Configuration(void)

{

//复位RCC外部设备寄存器到默认值

RCC_DeInit();

//翻开外部高速晶振

RCC_HSEConfig(RCC_HSE_ON);

//等候外部高速时钟准备好

HSEStartUpStatus=RCC_WaitForHSEStartUp();

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/256330.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部