你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【NUCLEO-L496ZG评测】基于STM32L496的RTC计时器

[复制链接]
jinglixixi 提问时间:2017-5-12 08:53 /
    STM32L496内置了RTC,完成只需为其配置一个合适的显示器即可实现计时功能。本打算为它配置一个TFT显示屏,然而耗费了大段时间也为如愿,甚是感到奇怪。因为就频率来讲L432与它同为80MHZ,在L432上能实现似乎在L496上应该也可以。此外,F769F413等主频也都比它高,且也均能驱动,独独L496却难实现。
随后也测试了以LCD5110OLED屏显示,L496F767F413等均能驱动显示。从节省GPIO口的角度出发,这里就为其配置一个IIC接口的OLED屏来实现RTC计时功能。
经实际测试,使用NUCLEO系列的Arduino接口即可直接实现连接,故使用起来十分方便。
OLED屏与L496的连接关系为:

SCLK  -- PA.5     SDIN  -- PA.6
为达到图1和图2的工作效果,主要涉及的OLED函数是初始化函数、字符显示函数、数值显示函数及字符串显示函数。此外,还需对RTC显示函数加以修改,修改后的程序内容如下:
  1. static void RTC_CalendarShow(void)
  2. {
  3.     RTC_DateTypeDef sdatestructureget;
  4.     RTC_TimeTypeDef stimestructureget;
  5.     uint8_t p;
  6.     /* Get the RTC current Time */
  7.     HAL_RTC_GetTime(&RtcHandle, &stimestructureget, RTC_FORMAT_BIN);
  8.     /* Get the RTC current Date */
  9.     HAL_RTC_GetDate(&RtcHandle, &sdatestructureget, RTC_FORMAT_BIN);
  10.     p=stimestructureget.Seconds;
  11.         OLED_ShowNum(88,2,p,2,16);
  12.         OLED_ShowChar(56,2,':',16);
  13.         p=stimestructureget.Minutes;
  14.         OLED_ShowNum(64,2,p,2,16);
  15.         OLED_ShowChar(80,2,':',16);
  16.     p=stimestructureget.Hours;
  17.         OLED_ShowNum(40,2,p,2,16);
  18.         p=sdatestructureget.Date;
  19.         OLED_ShowNum(88,4,p,2,16);
  20.         OLED_ShowChar(56,4,'-',16);
  21.         p=sdatestructureget.Month;
  22.         OLED_ShowNum(64,4,p,2,16);
  23.         OLED_ShowChar(80,4,'-',16);
  24.     p=sdatestructureget.Year;
  25.         OLED_ShowNum(24,4,2000+p,4,16);
  26.         OLED_ShowString(24,6,"week:",16);
  27.         p=sdatestructureget.WeekDay;
  28.         OLED_ShowNum(64,6,p,2,16);
  29.        
  30. }
复制代码
对应的主函数为:
  1. int main(void)
  2. {

  3.   HAL_Init();
  4.   /* Configure the system clock to 80 MHz */
  5.   SystemClock_Config();
  6.   BSP_LED_Init(LED3);
  7.   __HAL_RTC_RESET_HANDLE_STATE(&RtcHandle);
  8.   RtcHandle.Instance           = RTC;
  9.   RtcHandle.Init.HourFormat     = RTC_HOURFORMAT_12;
  10.   RtcHandle.Init.AsynchPrediv    = RTC_ASYNCH_PREDIV;
  11.   RtcHandle.Init.SynchPrediv     = RTC_SYNCH_PREDIV;
  12.   RtcHandle.Init.OutPut         = RTC_OUTPUT_DISABLE;
  13.   RtcHandle.Init.OutPutPolarity   = RTC_OUTPUT_POLARITY_HIGH;
  14.   RtcHandle.Init.OutPutType     = RTC_OUTPUT_TYPE_OPENDRAIN;

  15.   if(HAL_RTC_Init(&RtcHandle) != HAL_OK)
  16.   {
  17.     /* Initialization Error */
  18.     Error_Handler();
  19.   }

  20.   /*##-2-  Configure RTC Timestamp ############################################*/
  21.   RTC_TimeStampConfig();
  22.   OLED_Init();                         
  23.   OLED_Clear();
  24.   OLED_ShowString(58,0,"RTC",16);       
  25.   OLED_ShowString(18,2,"jinglixixi",16);
  26.   OLED_ShowString(18,4,"2017.5.10",16);
  27.   HAL_Delay(1000);
  28.   HAL_Delay(1000);
  29.   OLED_Clear();
  30.   OLED_ShowString(58,0,"RTC",16);       
  31.   /* Infinite loop */  
  32.   while (1)
  33.   {
  34.         RTC_CalendarShow();
  35.         HAL_Delay(100);
  36.   }
  37. }
复制代码
图片2.png
图1 主界面

图片1.png
图2 工作界面

评分

参与人数 2 ST金币 +22 收起 理由
zero99 + 20
MrJiu + 2 赞一个!

查看全部评分

收藏 2 评论14 发布时间:2017-5-12 08:53

举报

14个回答
MrJiu 回答时间:2017-5-12 09:25:51
支持一个!!!!!!!!!
creep 回答时间:2017-5-12 09:53:42
感谢分享!!!
jinglixixi 回答时间:2017-5-12 10:41:41
多谢支持!
Paderboy 回答时间:2017-5-12 11:45:30
支持
Stm32McuLover 回答时间:2017-5-12 18:30:59
你这咋接线的啊,小液晶
五哥1 回答时间:2017-5-13 10:21:12
如果掉电了,如何把时间调整成正确的?
jinglixixi 回答时间:2017-5-15 01:18:33
五哥1 发表于 2017-5-13 10:21
如果掉电了,如何把时间调整成正确的?

最好是配个2个小按键,1个键用长短按来设置时间太费事。此外,就是像一般RTC模块一样为它配一个纽扣电池做后备电源供电。
jinglixixi 回答时间:2017-5-15 01:19:30
哈佛祖安智 发表于 2017-5-12 18:30
你这咋接线的啊,小液晶

直接插上没连线呀!
epochal 回答时间:2017-5-15 07:09:21
谢谢分享!!!
zhao.zhao 回答时间:2017-5-15 09:12:50
用CUBE做RTC太方便了,就是初始化现在的计算机时间有点烦,但也可以解决
zbber 回答时间:2017-5-15 14:57:35
如果掉电了,如何把时间调整成正确的?
jinglixixi 回答时间:2017-5-15 18:24:38
zbber 发表于 2017-5-15 14:57
如果掉电了,如何把时间调整成正确的?

最好是添加调整按键,否则只好刷程序了!
jinglixixi 回答时间:2017-5-16 10:17:22
看来大家对掉电问题很关注,正在考虑以串行通讯的方式来解决,将电脑上的时钟时间发到L496来供RTC更新系统时间,这样可能会简便些。
alisa123 回答时间:2017-6-2 18:09:03
楼主,你好,首先感谢你的分享, 在请问下你的RTC用的时钟是那个,LSE还是LSI ??

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版