SD保存文件如下,每个传感器一个文件
打开气压传感器,数据如下
其中时间戳值变化感觉和手机界面的曲线的横坐标值变化挺像的
其中RawData值是怎么转成pressure值的?我是没找到方法。另外,时间戳是怎么加上去的?SensorTile上无时钟芯片啊,STM32L476内部晶振?但没见设置的程序啊?又想了一下,这个日期显示是我第一次上电连接APP使用时间,也就是说官方出厂程序既支持蓝牙通信,又支持SD存储。但是目前又发现核心板、mini板、arduino板三个不能同时使用啊。我后面专门发过一篇返回出厂程序的帖子,见
http://bbs.eeworld.com.cn/thread-521170-1-1.html
可是,三个板子确实不能同时使用啊。这个数据是怎么保存进SD卡的?用哪个程序?让我捋一捋
之前发帖讨论过使用DataLog_USB程序未能成功在SD中保存数据,见
蓝牙搜素无设备,SD卡无数据记录 - 意法半导体AMG SensorTile开发大赛 - 电子工程世界-论坛 http://bbs.eeworld.com.cn/thread-520890-1-1.html
注意程序说明
[AppleScript] 纯文本查看 复制代码 ?
1 | Thisapplicationcontainsan example which shows howtoobtaindatafromthevarious sensorsontheSensorTile. Thedatacan either be streamedtothePC via USBorsavedonSD Card |
这个例程是不带BLE的,蓝牙搜不到,这个例程是通过USB虚拟串口发送到电脑或是存到SD卡中,也就是二选一。
当SD存储选择时,见下说明,数据会保存为.tsv文件,但是我明明是.CSV啊
[AppleScript] 纯文本查看 复制代码 ?
1 2 3 4 5 6 7 | If SD Cardisselected,thedatastreamisloggedona tsvfile(Tab Separated Values). Aftertheapplicationisstarted: -theuser canview/recorddatafromtheon-board environmental sensors like Temperature, Humidity(ifavailable)andPressure. -theuser canview/recorddatafromtheon-board MEMS sensors like Accelerometer, GyroscopeandMagnetometer. -theuser canview/recorddatafromtheGas Gauge ICtomonitorthebattery status. |
不知道存储的电池电量监测数据是什么样的?大家有兴趣看一下
下来看程序,打开DataLog工程,有一个头文件是
#include <math.h> /* trunc */
trunc是一种函数,功能是截取日期或数字,返回指定的值。语法TRUNC(number,num_digits)
Number 需要截尾取整的数字
Num_digits 用于指定取整精度的数字
宏定义数据请求周期100ms
[AppleScript] 纯文本查看 复制代码 ?
1 | #define DATA_PERIOD_MS (100) |
这两句很重要,初始值是1
[AppleScript] 纯文本查看 复制代码 ?
1 2 | /*SendOverUSB=0 --> Save sensors data on SDCard (enable with double click) */ /*SendOverUSB=1 --> Send sensors data via USB */ |
关于RTC_Config定义如下,采用12小时制
[AppleScript] 纯文本查看 复制代码 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 | static void RTC_Config(void) { RtcHandle.Instance=RTC; RtcHandle.Init.HourFormat =RTC_HOURFORMAT_12; RtcHandle.Init.AsynchPrediv =RTC_ASYNCH_PREDIV; RtcHandle.Init.SynchPrediv =RTC_SYNCH_PREDIV; RtcHandle.Init.OutPut =RTC_OUTPUT_DISABLE; RtcHandle.Init.OutPutPolarity=RTC_OUTPUT_POLARITY_HIGH; RtcHandle.Init.OutPutType =RTC_OUTPUT_TYPE_OPENDRAIN; if(HAL_RTC_Init(&RtcHandle)!=HAL_OK) { /*Initialization Error*/ Error_Handler(); } } |
后面RTC_TimeStampConfig定义中,初始时间默认2000-1-1 00:00:00,星期一
main中,变量初始定义
[AppleScript] 纯文本查看 复制代码 ?
1 2 | uint32_t msTick,msTickPrev=0; uint8_t doubleTap=0;//双击核心板标志, |
NVIC:嵌套中断向量控制器,优先级4
如果数据传到串口,LED1亮
[AppleScript] 纯文本查看 复制代码 ?
1 2 3 4 5 6 | if(SendOverUSB) { /*Initialize LED*/ BSP_LED_Init(LED1); BSP_LED_On(LED1); } |
紧接着初始化USB库,否则初始化SD
只有SendOverUSB为0的时候才会判断SD_Log_Enabled是否为1,进而写入数据
[AppleScript] 纯文本查看 复制代码 ?
1 2 3 4 | if(SD_Log_Enabled) { DATALOG_SD_NewLine(); } |
如下关于双击核心板中断,保存文件的操作
[AppleScript] 纯文本查看 复制代码 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | if(MEMSInterrupt) { MEMSInterrupt=0; BSP_ACCELERO_Get_Double_Tap_Detection_Status_Ext(LSM6DSM_X_0_handle,&doubleTap); if(doubleTap){/*Double Tapevent*/ if(SD_Log_Enabled) { DATALOG_SD_Log_Disable(); SD_Log_Enabled=0; } else { while(SD_Log_Enabled !=1) { if(DATALOG_SD_Log_Enable()) { SD_Log_Enabled=1; } else { DATALOG_SD_Log_Disable(); } HAL_Delay(100); } } } } |
后面initializeAllSensors( void )中关于双击核心板硬件使能
[AppleScript] 纯文本查看 复制代码 ?
1 2 3 4 5 | if(!SendOverUSB) { BSP_ACCELERO_Enable_Double_Tap_Detection_Ext(LSM6DSM_X_0_handle); BSP_ACCELERO_Set_Tap_Threshold_Ext(LSM6DSM_X_0_handle,LSM6DSM_TAP_THRESHOLD_MID); } |
函数BSP_ACCELERO_Enable_Double_Tap_Detection_Ext定义,设置ODR 416HZ,不知道这里ODR是引脚电平输出的寄存器吗?
DrvStatusTypeDef BSP_ACCELERO_Enable_Double_Tap_Detection_Ext( void *handle )
{
DrvContextTypeDef *ctx = (DrvContextTypeDef *)handle;
if(ctx == NULL)
{
return COMPONENT_ERROR;
}
if ( ctx->pExtVTable == NULL )
{
return COMPONENT_ERROR;
}
/* At the moment this feature is only implemented for LSM6DS3 */
if ( ctx->who_am_i == LSM6DSM_ACC_GYRO_WHO_AM_I )
{
LSM6DSM_X_ExtDrv_t *extDriver = ( LSM6DSM_X_ExtDrv_t * )ctx->pExtVTable;
if ( extDriver->Enable_Double_Tap_Detection == NULL )
{
return COMPONENT_ERROR;
}
else
{
return extDriver->Enable_Double_Tap_Detection( ctx );
}
}
else
{
return COMPONENT_ERROR;
}
}
把程序看完也没明白当时这个文件是怎么保存的,当时确实将SD插到SD上试了一下,没反应又拔了,当时未刷程序
不明白是怎么SD卡新建.tsV文件?还请指点,我之前操作SD卡都是txt文件