【CH32X035 DIY】+U盘读写与花样文件参数拾取
[复制链接]
本帖最后由 jinglixixi 于 2024-2-3 23:28 编辑
在绣花机的仿真系统中,涉及花样文件读取及参数提取,对于一个裸机系统要解决这个问题是比较费事的。
那么在CH32X035评估板上要解决这方面的问题又怎样呢?
回答是较为方便的,因为它自身就配有极强的U盘读写能力。
要进行U盘的读写,其硬件连接如图1所示。
其中,电源是由USB转TTL模块提供的,并以此来实现串行通讯功能。对于U屏则是通过转换接口来实现。
图1 硬件连接
在对例程进行修改的情况下,可顺利地读取文件的数据,见图2和图3所示。
图2 读取U盘文件
图3 读取文件数据
对于绣花机所使用的花样文件,它是一种与位图文件相近的文件,它分为文件头、数据体这2个主要部分。
其文件头的数据格式如图4所示,是对文件的整体描述。
图4前导数据格式
那么如何来提取这些数据呢?
TotalCount = 125; // 设置读取字节长度
strcpy( (char *)mCmdParam.Open.mPathName, "/JZ.DST" );
CHRV3FileOpen( ); // 打开文件
printf( "读出的前%d个字符是:\r\n",TotalCount );
j=0;
while ( TotalCount )
{
if ( TotalCount> (MAX_PATH_LEN-1) )
{
t = MAX_PATH_LEN-1; // 剩余数据较多,限制单次读写的长度不能超过
}
else
{
t = TotalCount; // 最后剩余的字节数
}
mCmdParam.ByteRead.mByteCount = t; // 请求读出几十字节数据
mCmdParam.ByteRead.mByteBuffer= &Com_Buffer[0];
ret = CHRV3ByteRead( ); // 以字节为单位读取数据块,单次读写的长度不能超过MAX_BYTE_IO,第二次调用时接着刚才的向后读
mStopIfError( ret );
TotalCount -= mCmdParam.ByteRead.mByteCount; // 计数,减去当前实际已经读出的字符数
if ( mCmdParam.ByteRead.mByteCount< t ) //实际读出的字符数少于要求读出的字符数,说明已经到文件的结尾
{
printf("\r\n" );
printf( "文件已经结束\r\n" );
break;
}
if(j==0)
{
for ( i=0; i!=3; i++ )
{
printf( "%c", mCmdParam.ByteRead.mByteBuffer[i] ); // 显示读出的字符
}
printf("\r\n" );
j=1;
}
if(j==1)
{
for ( i=3; i!=20; i++ )
{
printf( "%c", mCmdParam.ByteRead.mByteBuffer[i] ); //显示读出的字符
}
printf("\r\n" );
j=2;
}
if(j==2)
{
for ( i=20; i!=23; i++ )
{
printf( "%c", mCmdParam.ByteRead.mByteBuffer[i] ); //显示读出的字符
}
printf("\r\n" );
j=3;
}
if(j==3)
{
for ( i=23; i!=31; i++ )
{
printf( "%c", mCmdParam.ByteRead.mByteBuffer[i] ); //显示读出的字符
}
printf("\r\n" );
j=4;
}
}
...
i = CHRV3FileClose( ); //关闭文件
mStopIfError(i );
}
该程序实现的参数提取效果如图5和图6所示。
图5 提取首个参数
图6 提取前4个参数
|