SDcard文件名作为日期戳

时间:2018-05-09 16:36:55

标签: stm32 sd-card

我使用的是STM32F072RB核板,我已经连接了SD卡呼吸板。 我能够读/写文本文件,我也在使用RTC。项目更像是一个数据记录器 我已将LM35与STM32模拟引脚接口,并且我能够使用时间戳记录数据。

我接下来要做的就是拥有文件名,例如" MAY09_00.TXT"。要获得上面提到的文件名,我必须阅读RTC日期和时间,然后将其放入文件名。问题是当我读取date(在uint8_t中)并将其转换为(char)时,它占用ASCII char值而不是char作为日期。这似乎是一个经典的问题,我确实尝试在网上查找,但无法找到很多帮助。我知道我正在寻找类似itoa()的功能,但这些功能确实适用于标准C库。我不知道ST是否为他们的MCU提供了这样的实用程序库。

char *fname;
char filename[12] = {' ',' ',' ',' ',' ','_','0','0','.','T','X','T'};

HAL_RTC_GetTime(&hrtc, &time3, RTC_FORMAT_BIN);
  HAL_RTC_GetDate(&hrtc, &date, RTC_FORMAT_BIN);  

  if(date.Month == 1)
  {
    fname = "JAN ";
  }
  else if(date.Month == 2)
  {
    fname = "FEB ";
  }
  else if(date.Month == 3)
  {
    fname = "MAR ";
  }
  else if(date.Month == 4)
  {
    fname = "APR ";
  }
  else if(date.Month == 5)
  {
    fname = "MAY ";
  }

  if(date.Date < 60)
  {
    int i = 0; int j = 0;
    int len = 0;
    for(i=0; *(fname) != NULL; i++)
    {
      filename[i] = *(fname);
      if(*(fname)==' ')
      {
        filename[i] = '0';
      }
      fname++;
    }
    filename[4] = (date.Date); // when I use today's date 9, it takes /t instead of '9'
  }

1 个答案:

答案 0 :(得分:0)

这是完整的逻辑。以下逻辑是两位数日期。

dt = date.Date;
dt = (dt % 10);
dt &= 0x0f;
dt |= 0x30;
filename[3] = (char) dt;

dt2 = date.Date;
dt2 = (dt2 / 10);
dt2 &= 0x0f;
dt2 |= 0x30;
filename[4] = (char) dt2;