基于STM32F1的超级终端显示日历程序思路分析一、准备

洋桃电子 M1 核心板;

用户程序中的“1-2-13-超级终端串口控制程序”;

HyperTerminal 超级终端软件。

二、知识点
  1. RTC( 实时时钟) 和后备寄存器;
  2. 串口操作,包括中断
三、业务说明
  1. 需求说明:打开超级终端软件,连接对应的 COM 口,接收到日历的提示信息如图所示:
  2. 超级终端ymodem 收到重复请求怎么解决 超级终端显示_rtc

  3. 其中,按下回车键更新时间; 键盘输入 "c" 或 "C" 时,初始化时钟; 如果需要重新设置时间,则按照“年月日时分秒”的形式输入,如 20210417173500,按下回车键确定。
四、业务逻辑分析
  1. 总体的思路是在串口中断里判断接收到的命令,确定是显示时间还是重新初始化或者是设置时间,如果都不是则输出指令错误的信息;
  2. 该项目涉及到了时钟的精准走时,由于内部的 RC 低速振荡器存在温漂的问题,因此要使用外部的低速晶振(32.768K)用来精确的显示时间;
  3. STM32 的 RTC 只是用一个 32 位的计数器来计时,而不是用年月日时分秒的分组寄存器。这个计数器每增加 1 就代表增加了 1 秒,32 位计数器都填满对应的时间大约为 136 年;
  4. 该项目加入了 RTC 的相关函数,用户需要调用的函数有 RTC 初始化(RTC_Config)、写入时间函数(RTC_Set)和读出时间函数(RTC_Get)。其余的功能比如判断某一年份是否为闰年、通过年月日推算星期几等则在内部函数中封装好了;
  5. 写入时间函数思路:将收到的 14 位数据进行拆分,前 4 位为年,后面每 2 位一拆分分别为月、日、时、分和秒,然后将每一部分转换为对应的秒。平年为 31536000 秒,闰年为 31622400 秒,以此类推,将月、日、时、分、秒分别转换成秒,和前一个数量级进行相加,将换算好的数据通过标准库函数 RTC_SetCounter 写入 RTC 计数器;
  6. 读出时间函数思路:用标准库函数 RTC_GetCounter 读取 RTC 计数器中的数值,读到的该数值为当前时间的秒数,需要将该数值转化为年、月、日、时、分、秒的形式。每一天有 24 小时,对应的秒数为 86400 ,用读取到的数值对 86400 整除,得到该数值可转换的整的天数,再根据闰年和平年计算出时间到哪一年和余出来多少天,用余出来的天数换算成月份和日期;用读取到的数值对 86400 取余,得到的是非整天的时、分和秒。

愿余生,不负岁月,不负自己。 喜欢就点个赞吧