[ ST NUCLEO-U575ZI-Q 测评]+ 串口屏电子时钟计时及校正
<div class='showpostmsg'> 本帖最后由 jinglixixi 于 2023-1-11 00:30 编辑<p><br />
在环境状态检测记录仪中,时间是数据采集的基准点,因此它的作用十分作用。</p>
<p>要在串口屏上让时钟走起来,就必须有串口通信功能和RTC计时功能的配合,为此相应将这两者在程序上结合在一起。</p>
<p>经程序的调试处理,其测试效果如图1所示。</p>
<p></p>
<p>图1 串口发送时间值测试</p>
<p> </p>
<p>实现图1功能时间显示函数为:</p>
<pre>
<code class="language-cpp">static void RTC_TimeShow(uint8_t *showtime)
{
RTC_DateTypeDef sdatestructureget;
RTC_TimeTypeDef stimestructureget;
HAL_RTC_GetTime(&hrtc, &stimestructureget, RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &sdatestructureget, RTC_FORMAT_BIN);
if(p!=stimestructureget.Seconds)
{
zl=stimestructureget.Hours/10+'0';
zl=stimestructureget.Hours%10+'0';
zl=stimestructureget.Minutes/10+'0';
zl=stimestructureget.Minutes%10+'0';
zl=stimestructureget.Seconds/10+'0';
zl=stimestructureget.Seconds%10+'0';
p=stimestructureget.Seconds;
HAL_UART_Transmit(&huart2, (uint8_t *)zl,20, 5000);
}
}
</code></pre>
<p> </p>
<p>对应的主程序是:</p>
<pre>
<code class="language-cpp">int main(void)
{
HAL_Init();
HAL_PWR_EnableBkUpAccess();
__HAL_RCC_BACKUPRESET_FORCE();
__HAL_RCC_BACKUPRESET_RELEASE();
SystemClock_Config();
SystemPower_Config();
MX_ICACHE_Init();
MX_RTC_Init();
RTCStatus = 1;
MX_USART2_UART_Init();
while (1)
{
RTC_TimeShow(aShowTime);
}
}
</code></pre>
<p> </p>
<p>此时,将串口屏与开发板按图2所示连接起来,即可让时钟走起来。</p>
<p> 图2 器件连接</p>
<p> </p>
<p>为了进行时间的校正,相应借助串口屏的参数设置界面,其工作界面及设计界面如图3和图4所示。</p>
<p>图3 工作界面</p>
<p> </p>
<p>图4 界面设计</p>
<p> </p>
<p>在图3界面中,通过触摸不同的区域可选择设置参数的类型,然后使用右侧的操作面板即可完成参数的设置。</p>
<p>在完成参数设置后,通过触摸校正日期或校正时间键就能将参数方式给开发板。</p>
<p> </p>
<p>以设置时间值为例,在发送校正时间后,就会在设置时间的基础上开始计时,如图5所示。</p>
<p> 图5 校正时间</p>
<p>实现显示处理的程序为:</p>
<pre>
<code class="language-cpp">while (y)
{
HAL_UART_Receive(&huart2, (uint8_t *)aRxBuffer, 7, 1000);
if (aRxBuffer==0x4E)
{
tn=(aRxBuffer-'0')*16+aRxBuffer-'0';
ty=(aRxBuffer-'0')*16+aRxBuffer-'0';
tt=(aRxBuffer-'0')*16+aRxBuffer-'0';
zp=aRxBuffer;
zp=aRxBuffer;
zp=aRxBuffer;
zp=aRxBuffer;
zp=aRxBuffer;
zp=aRxBuffer;
HAL_UART_Transmit(&huart2, (uint8_t *)zp,22, 1000);
aRxBuffer=0x0;
MX_RTC_Init();
}
if (aRxBuffer==0x54)
{
th=(aRxBuffer-'0')*16+aRxBuffer-'0';
tm=(aRxBuffer-'0')*16+aRxBuffer-'0';
ts=(aRxBuffer-'0')*16+aRxBuffer-'0';
p=ts;
MX_RTC_Init();
y=0;
}
if (Buffercmp((uint8_t *)aTxBuffer3, (uint8_t *)aRxBuffer, 5)==0)
{
MX_RTC_Init();
y=0;
}
}
</code></pre>
<p> </p>
<p>这样在连接串口屏后,就可达到理想的设计效果。 </p>
<p> </p>
<p> 演示视频: e8498db8a2709d0f1797038e1e8c2956</p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> 串口屏是哪家的产品?这样结合起来,挺有新意! lugl4313820 发表于 2023-1-9 18:03
串口屏是哪家的产品?这样结合起来,挺有新意!
<p>淘晶驰的</p>
<p>看着还不错,后面是不是要显示波形了。</p>
wangerxian 发表于 2023-1-10 09:22
看着还不错,后面是不是要显示波形了。
<p>马上来</p>
<p>测评汇总:免费申请|ST NUCLEO-U575ZI-Q https://bbs.eeworld.com.cn/thread-1228653-1-1.html</p>
页:
[1]