1807|8

95

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【RISC-V MCU CH32V103测评】实时标记文件创建时间 [复制链接]

  本帖最后由 jennyzhaojie 于 2021-3-19 00:23 编辑

上次提过,在U盘的例程中其新建的文件日期是认为设置的,而非实时时间,因此在识读文件创建日期不能当真。

那是否能为创建的文件添加上实时的时间呢?

方法是启用MCU内部的RTC计时器,当然在使用时你要为RTC配置一个后备电池,否则即使有了RTC的帮助,也奈何不了没电的制约。

为了达到实时标记时间的目的,首要的是在U屏读写的例程中添加RTC计时程序,其运行效果如图1所示。

图1 添加RTC计时功能

 

其后,是验证原来的U盘读写功能是否会受到影响,经实际验证,其执行效果如图2至图4所示。

这说明U盘的读写功能是不受影响的,且生成文件的时间是实时标记的。

有了这个基础,后续我们还可以将其用到数据的采集与记录方面。

图2 文件创建时刻的跟踪处理

 

图3 文件的相关属性

 

图4 文件的写入内容

 

实现演示效果的程序为:

int main()
{
    UINT8 s, c, i,x,y;
    UINT16 TotalCount;
    UINT32 l;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    Delay_Init();
    USART_Printf_Init(115200);
    printf("SystemClk:%d\r\n",SystemCoreClock);
    Delay_Ms( 200 );
    printf("RTC Test\r\n");
    RTC_Init();
    printf("USBHD HOST Test\r\n");
    USBHD_ClockCmd(RCC_USBCLKSource_PLLCLK_1Div5,ENABLE);
    pHOST_RX_RAM_Addr = RxBuffer;
    pHOST_TX_RAM_Addr = TxBuffer;
    USB_HostInit();
    CHRV3LibInit();
    printf( "Wait Device In\r\n" );
    while(1)
    {
       s = ERR_SUCCESS;
       if ( R8_USB_INT_FG & RB_UIF_DETECT )
       {
           R8_USB_INT_FG = RB_UIF_DETECT ;
           s = AnalyzeRootHub( );
           if ( s == ERR_USB_CONNECT )
           {
              printf( "New Device In\r\n" );
              FoundNewDev = 1;
           }
           if( s == ERR_USB_DISCON )
           {
              printf( "Device Out\r\n" );
           }
       }
       printf("%d-%d-%d  %d  %d:%d:%d\r\n",calendar.w_year,calendar.w_month,calendar.w_date,calendar.week,calendar.hour,calendar.min,calendar.sec );
       Delay_Ms(1000);
       if ( FoundNewDev || s == ERR_USB_CONNECT )
       {
           FoundNewDev = 0;
           Delay_Ms( 200 );
           s = InitRootDevice( Com_Buffer );
           if ( s == ERR_SUCCESS )
           {
              // U盘操作流程:USB总线复位、U盘连接、获取设备描述符和设置USB地址、可选的获取配置描述符,之后到达此处,由CH103子程序库继续完成后续工作
              CHRV3DiskStatus = DISK_USB_ADDR;
              for ( i = 0; i != 10; i ++ )
              {
                  printf( "Wait DiskReady\r\n" );
                  s = CHRV3DiskReady( );    //等待U盘准备好
                  if ( s == ERR_SUCCESS )
                  {
                     break;
                  }
                  else
                  {
                     printf("%02x\r\n",(UINT16)s);
                  }
                  Delay_Ms( 50 );
              }
              if ( s == ERR_MISS_DIR || s == ERR_MISS_FILE )
              {
                     printf( "Find No File And Create\r\n" );
                     strcpy( (PCHAR)mCmdParam.Create.mPathName, "/NEWFILE.TXT" );
                     s = CHRV3FileCreate( );
                     mStopIfError( s );
                     printf( "ByteWrite\n" );
                     i = sprintf( (PCHAR)buf,"Note: \xd\xa这个程序是以字节为单位进行U盘文件读写,简单演示功能。\xd\xa");  /*演示 */
                     for(c=0; c<10; c++)
                     {
                         mCmdParam.ByteWrite.mByteCount = i;
                         mCmdParam.ByteWrite.mByteBuffer = buf;
                         s = CHRV3ByteWrite( );
                         mStopIfError( s );
                         printf("成功写入 %02X次\r\n",(UINT16)c);
                     }
                     printf( "Modify\r\n" );
                     mCmdParam.Modify.mFileAttr = 0xff;
                     mCmdParam.Modify.mFileTime = MAKE_FILE_TIME( calendar.hour, calendar.min, calendar.sec );
                     mCmdParam.Modify.mFileDate = MAKE_FILE_DATE( calendar.w_year, calendar.w_month, calendar.w_date );
                     mCmdParam.Modify.mFileSize = 0xffffffff;
                     i = CHRV3FileModify( );
                     mStopIfError( i );
                     printf( "Close\r\n" );
                     mCmdParam.Close.mUpdateLen = 1;
                     i = CHRV3FileClose( );
                     mStopIfError( i );
                     printf("%d-%d-%d  %d  %d:%d:%d\r\n",calendar.w_year,calendar.w_month,calendar.w_date,calendar.week,calendar.hour,calendar.min,calendar.sec );
                  }
              }
           }
       }
       Delay_Ms( 100 );  // 模拟单片机做其它事
       SetUsbSpeed( 1 );  // 默认为全速
    }
}

 

最新回复

谢谢分享!   详情 回复 发表于 2021-3-19 23:03

赞赏

1

查看全部赞赏

点赞(1) 关注
 
 

回复
举报

2万

帖子

343

TA的资源

版主

沙发
 

看来CH32V10创在建的文件添加上实时的时间没问题

为什么要为RTC配置一个后备电池呢

点评

因为RTC也是微小的电能维持着时钟不停摆,否则时钟停摆了时间还有啥用呀?  详情 回复 发表于 2021-3-19 11:56
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

看来CH32V10创在建的文件添加上实时的时间没问题

为什么要为RTC配置一个后备电池呢?这个耗电厉害吗????

点评

具体没计量过,应该不会太高吧,它的作用就相当于电脑中维持配置的纽扣电池。  详情 回复 发表于 2021-3-19 11:59
 
 
 

回复

95

帖子

0

TA的资源

一粒金砂(中级)

4
 
qwqwqw2088 发表于 2021-3-19 07:41 看来CH32V10创在建的文件添加上实时的时间没问题 为什么要为RTC配置一个后备电池呢

因为RTC也是微小的电能维持着时钟不停摆,否则时钟停摆了时间还有啥用呀?

 
 
 

回复

95

帖子

0

TA的资源

一粒金砂(中级)

5
 
zhwps 发表于 2021-3-19 11:20 看来CH32V10创在建的文件添加上实时的时间没问题 为什么要为RTC配置一个后备电池呢?这个耗电厉害吗?? ...

具体没计量过,应该不会太高吧,它的作用就相当于电脑中维持配置的纽扣电池。

 
 
 

回复

1942

帖子

3

TA的资源

版主

6
 

感谢分享!不错哈!

点评

感谢支持!  详情 回复 发表于 2021-3-19 18:30
 
 
 

回复

95

帖子

0

TA的资源

一粒金砂(中级)

7
 
w494143467 发表于 2021-3-19 16:16 感谢分享!不错哈!

感谢支持!

 
 
 

回复

7452

帖子

2

TA的资源

五彩晶圆(高级)

8
 

谢谢分享!

点评

多谢支持!  详情 回复 发表于 2021-3-20 09:53
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

95

帖子

0

TA的资源

一粒金砂(中级)

9
 

多谢支持!

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表