我使用的是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'
}
答案 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;