OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5638|回复: 5

stm32F103如何将实时时间写入SD卡的TXT文件,像各位大牛请教!

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2018-5-14
在线时间
4 小时
发表于 2018-5-14 01:05:28 | 显示全部楼层 |阅读模式
10金钱
问题如标题所示。本人菜鸟一枚,最近刚刚接触STM32F103的学习,如今想把RTC的实时时间数据存入SD卡中,其中已创建FATFS文件系统。学习了原子的SD卡读写例程以及RTC实时时钟例程之后,自己试着把时间数据写入SD卡的TXT文件。但是遇到的问题是时间数据总的乱码显示。看了几位大神的帖子,里面说要进行十六进制与BCD码的转换,对此不太明白 为什么要进行进制的转换?以及如果不进行进制转换的话要如何操作才能将时间数据存入SD卡的TXT文件?像各位大神请教!!!!!

最佳答案

查看完整内容[请看2#楼]

最后用一种很笨的方法处理出来了 程序如下: unsigned int time_buf1[8]={0}; void Read_Time(void) { time_buf1[1]=calendar.w_year-2000; time_buf1[2]=calendar.w_month; time_buf1[3]=calendar.w_date; time_buf1[4]=calendar.hour; time_buf1[5]=calendar.min; time_buf1[6]=calendar.sec; time_buf1[7]=calendar.week; } void u32tostr(unsigned long dat,char *str) //将32位dat转换为字 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2018-5-14
在线时间
4 小时
 楼主| 发表于 2018-5-14 01:05:29 | 显示全部楼层
最后用一种很笨的方法处理出来了 程序如下:

unsigned int time_buf1[8]={0};

void Read_Time(void)
{
  time_buf1[1]=calendar.w_year-2000;
        time_buf1[2]=calendar.w_month;
        time_buf1[3]=calendar.w_date;
        time_buf1[4]=calendar.hour;
        time_buf1[5]=calendar.min;
        time_buf1[6]=calendar.sec;
        time_buf1[7]=calendar.week;
}

void u32tostr(unsigned long dat,char *str) //将32位dat转换为字符串
{
        char temp[20];
        unsigned char i=0,j=0;

        i=0;
        while(dat)
        {
        temp[i]=dat%10+0x30;
        i++;
        dat/=10;
        }
        j=i;
        for(i=0;i<j;i++)
        {
        str[i]=temp[j-i-1];
        }
        if(!i) {str[i++]='0';}
        str[i]=0;
}

void str_if_0(char date,char name[],char str[2],u8 shi, u8 ge)  //将收到的数据转换成字符串
{
        if((date<10&&(date)>0)||date==0)
        {
                name[shi]='0';
                name[ge]=str[0];
        }
        else
        {
                name[shi]=str[0];
                name[ge]=str[1];
        }
}


void  Time_decimal_to_str(void)
{

        Read_Time();
       
        u32tostr(time_buf1[1],str_time[1]);          
        u32tostr(time_buf1[2],str_time[2]);          
        u32tostr(time_buf1[3],str_time[3]);          
        u32tostr(time_buf1[4],str_time[4]);          
        u32tostr(time_buf1[5],str_time[5]);          
        u32tostr(time_buf1[6],str_time[6]);          
        u32tostr(time_buf1[7],str_time[7]);          
}


void Formatting(void)    //整理str时间字符串
{
        Time_decimal_to_str();

        TFT_time[2]=str_time[1][0];                                                             
        TFT_time[3]=str_time[1][1];       
        TFT_time[4]='-';
        TFT_time[7]='-';
        str_if_0(time_buf1[2],TFT_time,str_time[2],5,6);         
        str_if_0(time_buf1[3],TFT_time,str_time[3],8,9);         
        str_if_0(time_buf1[4],TFT_time,str_time[4],11,12);         
        str_if_0(time_buf1[5],TFT_time,str_time[5],14,15);         
        str_if_0(time_buf1[6],TFT_time,str_time[6],17,18);         
}


最后在f_write()数组TFT_time即可。
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2018-5-14
在线时间
4 小时
 楼主| 发表于 2018-5-14 11:24:25 | 显示全部楼层
//获得时间
//User defined function to give a current time to fatfs module      */
//31-25: Year(0-127 org.1980), 24-21: Month(1-12), 20-16: Day(1-31) */                                                                                                                                                                                                                                          
//15-11: Hour(0-23), 10-5: Minute(0-59), 4-0: Second(0-29 *2) */                                                                                                                                                                                                                                                
DWORD get_fattime (void)
{                       
                u32 time=0;
    RTC_Get();
    time=(calendar.w_year-1980)<<25;
    time|=(calendar.w_month)<<21;
    time|=(calendar.w_date)<<16;  
    time|=(calendar.hour)<<11;        
    time|=(calendar.min)<<5;      
    time|=(calendar.sec/2);         
       
    return time;
}

//主函数:       
get_fattime();

res=f_open(&fil1,"0:/mytime.txt", FA_OPEN_ALWAYS|FA_WRITE);
res=f_write(&fil1,&time,50,&bww);
f_close(&fil1);[/mw_shl_code]
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2018-5-14
在线时间
4 小时
 楼主| 发表于 2018-5-14 11:25:31 | 显示全部楼层
2楼是我的代码 不知道哪里弄的不对 时间数据就是存不进TXT文件里
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2018-5-14 12:18:26 | 显示全部楼层
f_printf(&fil, "%d", 1234);            /* "1234" */
    f_printf(&fil, "%6d,%3d%%", -200, 5);  /* "  -200,  5%" */
    f_printf(&fil, "%ld", 12345L);         /* "12345" */
    f_printf(&fil, "%06d", 25);            /* "000025" */
    f_printf(&fil, "%06d", -25);           /* "000-25" */
    f_printf(&fil, "%*d", 5, 100);         /* "  100" */
    f_printf(&fil, "%-6d", 25);            /* "25    " */
    f_printf(&fil, "%u", -1);              /* "65535" or "4294967295" */
    f_printf(&fil, "%04x", 0xAB3);         /* "0ab3" */
    f_printf(&fil, "%08lX", 0x123ABCL);    /* "00123ABC" */
    f_printf(&fil, "%04o", 255);           /* "0377" */
    f_printf(&fil, "%016b", 0x550F);       /* "0101010100001111" */
    f_printf(&fil, "%s", "String");        /* "String" */
    f_printf(&fil, "%8s", "abc");          /* "     abc" */
    f_printf(&fil, "%-8s", "abc");         /* "abc     " */
    f_printf(&fil, "%c", 'a');             /* "a" */
    f_printf(&fil, "%f", 10.0);            /* f_printf lacks floating point support */
一分耕耘一分收获。
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2018-4-8
在线时间
11 小时
发表于 2020-4-2 20:27:04 | 显示全部楼层
48646544444444444444444444444465465
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 11:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表