【NUCLEO-L496ZG评测】基于STM32L496的RTC计时器
STM32L496内置了RTC,完成只需为其配置一个合适的显示器即可实现计时功能。本打算为它配置一个TFT显示屏,然而耗费了大段时间也为如愿,甚是感到奇怪。因为就频率来讲L432与它同为80MHZ,在L432上能实现似乎在L496上应该也可以。此外,F769、F413等主频也都比它高,且也均能驱动,独独L496却难实现。随后也测试了以LCD5110和OLED屏显示,L496与F767、F413等均能驱动显示。从节省GPIO口的角度出发,这里就为其配置一个IIC接口的OLED屏来实现RTC计时功能。经实际测试,使用NUCLEO系列的Arduino接口即可直接实现连接,故使用起来十分方便。OLED屏与L496的连接关系为:SCLK-- PA.5 SDIN-- PA.6 为达到图1和图2的工作效果,主要涉及的OLED函数是初始化函数、字符显示函数、数值显示函数及字符串显示函数。此外,还需对RTC显示函数加以修改,修改后的程序内容如下:static void RTC_CalendarShow(void)
{
RTC_DateTypeDef sdatestructureget;
RTC_TimeTypeDef stimestructureget;
uint8_t p;
/* Get the RTC current Time */
HAL_RTC_GetTime(&RtcHandle, &stimestructureget, RTC_FORMAT_BIN);
/* Get the RTC current Date */
HAL_RTC_GetDate(&RtcHandle, &sdatestructureget, RTC_FORMAT_BIN);
p=stimestructureget.Seconds;
OLED_ShowNum(88,2,p,2,16);
OLED_ShowChar(56,2,':',16);
p=stimestructureget.Minutes;
OLED_ShowNum(64,2,p,2,16);
OLED_ShowChar(80,2,':',16);
p=stimestructureget.Hours;
OLED_ShowNum(40,2,p,2,16);
p=sdatestructureget.Date;
OLED_ShowNum(88,4,p,2,16);
OLED_ShowChar(56,4,'-',16);
p=sdatestructureget.Month;
OLED_ShowNum(64,4,p,2,16);
OLED_ShowChar(80,4,'-',16);
p=sdatestructureget.Year;
OLED_ShowNum(24,4,2000+p,4,16);
OLED_ShowString(24,6,"week:",16);
p=sdatestructureget.WeekDay;
OLED_ShowNum(64,6,p,2,16);
}对应的主函数为:int main(void)
{
HAL_Init();
/* Configure the system clock to 80 MHz */
SystemClock_Config();
BSP_LED_Init(LED3);
__HAL_RTC_RESET_HANDLE_STATE(&RtcHandle);
RtcHandle.Instance = RTC;
RtcHandle.Init.HourFormat = RTC_HOURFORMAT_12;
RtcHandle.Init.AsynchPrediv = RTC_ASYNCH_PREDIV;
RtcHandle.Init.SynchPrediv = RTC_SYNCH_PREDIV;
RtcHandle.Init.OutPut = RTC_OUTPUT_DISABLE;
RtcHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
RtcHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
if(HAL_RTC_Init(&RtcHandle) != HAL_OK)
{
/* Initialization Error */
Error_Handler();
}
/*##-2-Configure RTC Timestamp ############################################*/
RTC_TimeStampConfig();
OLED_Init();
OLED_Clear();
OLED_ShowString(58,0,"RTC",16);
OLED_ShowString(18,2,"jinglixixi",16);
OLED_ShowString(18,4,"2017.5.10",16);
HAL_Delay(1000);
HAL_Delay(1000);
OLED_Clear();
OLED_ShowString(58,0,"RTC",16);
/* Infinite loop */
while (1)
{
RTC_CalendarShow();
HAL_Delay(100);
}
}图1 主界面
图2 工作界面
支持一个!!!!!!!!!;P;P;P;P 感谢分享!!! 多谢支持! :loveliness::loveliness:支持 你这咋接线的啊,小液晶 如果掉电了,如何把时间调整成正确的? 五哥1 发表于 2017-5-13 10:21
如果掉电了,如何把时间调整成正确的?
最好是配个2个小按键,1个键用长短按来设置时间太费事。此外,就是像一般RTC模块一样为它配一个纽扣电池做后备电源供电。 哈佛祖安智 发表于 2017-5-12 18:30
你这咋接线的啊,小液晶
直接插上没连线呀! 谢谢分享!!!
页:
[1]
2