在数据检测系统中,数据的地位是十分重要的,为了便于后期的数据分析,需对数据加以保存。
要进行数据保存,既困难,也简单。困难在于要有存储监制来保存,而一般的系统是难以支撑文件系统的。
简单则在于有了数据记录模块的出现,借助串行通讯就可将数据保存到文件中。
为与数据记录模块进行通讯,这里使用的UART4,其引脚占用见图1所示。
图1 引脚占用
图2 连接与测试
由于数据记录模块工作时的波特率为9600bps,故在使用时要按此来设置波特率。
在满足这些条件后,即可如下的主程序来实现数据保存的测试。
int main(void)
{
u16 i;
FL_Init();
MF_Config_Init();
MF_UART4_Init();
i=0;
while(1)
{
GetVoltage = GetSingleChannelVoltage_POLL(FL_ADC_EXTERNAL_CH6);
printf("%d,%d \r\n",i,GetVoltage);
FL_DelayMs(500);
i=i+1;
}
}
经程序的编译与下载,其测试效果如图3所示。
图3串口输出测试
在接入数据记录模块后,其数据被存入TF卡,其文件名是由“urc+数字串”构成,其记录文件的格式及内容如图4所示。
图4 记录形式
此外,通过与串口屏的配合还可绘制出采集数据的波形曲线。
依照串口屏的使用方式,显示采样值的指令被存放到数组中,其格式为:
uint8_t sj[15]={0x74,0x31,0x2E,0x74,0x78,0x74,0x3D,0x22,0x31,0x32,0x33,0x22,0xFF,0xFF,0xFF};
对于绘制波形曲线的指令也存放在数组中,其格式为:
uint8_t hz[15]={0x61,0x64,0x64,0x20,0x31,0x37,0x2C,0x30,0x2C,0x31,0x32,0x30,0xFF,0xFF,0xFF};
在使用时,只需用检测值替代数组中的数据部分即可。
在以串口测试输出时,其输出内容如图5所示。
图5 输出测试
实现检测数据显示与波形绘制的主程序为:
int main(void)
{
u16 i,v,u;
uint8_t hz[15]={0x61,0x64,0x64,0x20,0x31,0x37,0x2C,0x30,0x2C,0x31,0x32,0x30,0xFF,0xFF,0xFF};
uint8_t sj[15]={0x74,0x31,0x2E,0x74,0x78,0x74,0x3D,0x22,0x31,0x32,0x33,0x22,0xFF,0xFF,0xFF};
/* 使能IWDT */
IWDT_Init(FL_IWDT_PERIOD_4000MS);
/* Initialize FL Driver Library */
/* SHOULD BE KEPT!!! */
FL_Init();
/* 使能SVD, 阈值4.157V(falling)~4.257V(rising) */
SVD_Init(SVD_MONTIOR_VDD, FL_SVD_WARNING_THRESHOLD_GROUP11, FL_SVD_REFERENCE_1P0V);
/* 确认SVD监测结果是否高于阈值,如否则持续等待 */
while(false == SVD_Result_Confirmed(SVD_HIGHER_THRESHOLD, 2000U/*us*/));
/* 使能BOR */
RMU_BOR_Init(FL_RMU_BOR_THRESHOLD_2P00V);
/* Initialize all configured peripherals */
/* SHOULD BE KEPT!!! */
MF_Config_Init();
FL_IWDT_ReloadCounter(IWDT);
MF_UART4_Init();
i=0;
FL_IWDT_ReloadCounter(IWDT);
while(1)
{
/* 清狗 */
FL_IWDT_ReloadCounter(IWDT);
/* 电源掉电监测处理 */
PowerDownMonitoring();
/* 功能执行 */
GetVoltage = GetSingleChannelVoltage_POLL(FL_ADC_EXTERNAL_CH6);
v=250-GetVoltage/20; // =x/20
u=GetVoltage/20;
hz[9]=(v%1000)/100+0x30;
sj[8]=(u%1000)/100+0x30;
hz[10]=(v%100)/10+0x30;
sj[9]=(u%100)/10+0x30;
hz[11]=v%10+0x30;
sj[10]=u%10+0x30;
for(i=0;i<15;i++)
{
FL_UART_WriteTXBuff(UART4, hz[i]); //将发送数据写入发送寄存器
while(FL_UART_IsActiveFlag_TXBuffEmpty(UART4) != 0x01UL){}; // 等待发送完成
}
FL_IWDT_ReloadCounter(IWDT);
for(i=0;i<15;i++)
{
FL_UART_WriteTXBuff(UART4, sj[i]); //将发送数据写入发送寄存器
while(FL_UART_IsActiveFlag_TXBuffEmpty(UART4) != 0x01UL){}; // 等待发送完成
}
FL_DelayMs(500);
FL_IWDT_ReloadCounter(IWDT);
}
}
经程序的编译与下载,其测试效果如图6所示。这样就圆满地解决了开发板无法完成实现波形绘制的问题。
图6 显示效果