注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
wugx的个人空间 https://home.eeworld.com.cn/space-uid-501860.html [收藏] [复制] [分享] [RSS]
日志

ST Sensortile 评测分享计划 第三篇 初学总结及功能试玩

已有 1200 次阅读2016-12-17 13:40

一、玩sensortile已验证流程及常见错误总结:
  首先申明一下,下面分享的经验是和这次评测参与人员讨论、请教而来。

1〉sensortile安装,其有两个基板,大板子带有IC卡槽,直接将sensortile按丝印正方向安装,小板子需要将开发版焊接在其上,所以建议先测试大板子。

2〉sensortile例程固件下载调试:

i>首先你手头要备有SWD编程器或st-link编程器,当然也可用necleo板Stlink编程器

细节见李sir SensorTile物联网开发套件(3)——程序烧录与注册
顺便晒一下买来的stm32L476rg necleo

ii>stlink驱动安装:由于我用的是stlinkV2.1所以下载stsw-link008或009即可,内有64或32位的自行安装。在这 说一下sensortile套件驱动的问题,首先它是个虚拟串口驱动,请下载STSW-STM32102,
帖子见johnrey的帖子【sensorTile评测】02:软硬件开发环境评测
sensortile固件包中有三个例程程序,其中一个是提前已下载的蓝牙通信,一个是data-log,后者应用了虚拟串口功能,所以只有下载这个固件你才能用串口工具看数据数据传送,具体应用将在下面详解。下载完data-log例程后,电脑硬件管理如下图,在原来stlink驱动的基础上多了个虚拟串口。


iii>软件安装,你可以用keil5、IAR、stcuboe,我这用的是keil5.16,其安装破解就不说了,说一下装包,由于其内部库无stm32l476rg硬件包,所以你需下载和安装Keil.STM32L4xx_DFP.1.2.0.pack这个包,已在群中上传。

iv>固件烧写,下载蓝牙通信实例后出现通信没了(led灭了),于是询问李sir,原来是之前注册过license,而注册码你注意一下当时注册邮件里在一个数组内,也就是说会不会存在原来固件的数组中,由于license会存在sensortile flash第三区,里面是不是有个注册码的指针呢?还是说由于覆盖而引起的信息缺失,这个没细看,所以debug的时候发现指针就停在了license管理处,如下图:


于是李sir建议全部擦除,重新下载bootloader及固件,问题来了之前没这么玩过,怎么办,试呗,好,咱来看一下过程:
首先是擦除全部,点击魔术棒或找工具栏中的Flash,然后将内存起始地址改为0x08000000,用keil5如下图:




内存分配见me的:ST Sensortile分享计划——第二篇 集成开发平台体验
紧接着烧写bootloader,在关键文件夹里找到了BootLoaderL4.bin文件,忽然发现keil5怎么烧?于是找到stm32 st-link utility,
发现这个软件刷写内存就方便多了,于是连接了一下硬件,弹出一个错误,说是没有发现该硬件ID,搞了半天和坛友讨论一下,驱动能显示应该是软件没有库文件,于是看了一下,软件里面果然没有L476的loader,这包在那?没找着,于是下了个STM32 ST-LINK Utility3.9版本,重装后有了,连接后如下图:


于是按内存分配设置好起始地址后,先后烧入了bootloader和固件
于是就到了me的下文:sensortile评测分享计划之 第二篇外传 跟着Debug探针一起来看固件MAIN
好了,前期操作就到这了。

二、Datalog例程试玩:

同样先找到例程用keil5打开,观察一下其主函数,
变量申明---》硬件抽象层初始化---》系统时钟初始化---》实时时钟及时间戳配置---》使能usb供电---》根据usb发送状态初始化USB及SD卡数据日志---》配置IC引脚及传感器配置与使能---》进入while(1),根据系统数据周期更新发送数据,及等待加速度传感器Double Tap中断事件,等待处于睡眠状态,附图运行图一张:


详贴见@johnrey 的帖子【sensorTile评测】02:软硬件开发环境评测

主函数中先对usb进行了初始化,并打开了对应中断,过程数据被存至dataout数组中,其它传感器句柄函数都将数据dataout,用以发送,另外还将数据以FatFS的格式存入了SD卡,这个没做深入研究,USB配置程序如下:
  1.   if(SendOverUSB) /* Configure the USB */
  2.   {
  3.     /*** USB CDC Configuration ***/
  4.     /* Init Device Library */
  5.     USBD_Init(&USBD_Device, &VCP_Desc, 0);
  6.     /* Add Supported Class */
  7.     USBD_RegisterClass(&USBD_Device, USBD_CDC_CLASS);
  8.     /* Add Interface callbacks for AUDIO and CDC Class */
  9.     USBD_CDC_RegisterInterface(&USBD_Device, &USBD_CDC_fops);
  10.     /* Start Device Process */
  11.     USBD_Start(&USBD_Device);
  12.   }
复制代码
三、AudioLoop应用体验:

这个例程主函数体较简练,其音频编码是PCM,其AD过程被设置成了Σ-Δ形式,以前研究过,现在模糊了,他大概的原理就是先将频谱从基带进行搬移,然后用高通滤波的形式降低噪声功率,用数学推导可得出这个结论,大家可以看我上传的一篇关于D类功放设计的论文,Main如下:
  1. HAL_Init();
  2.   
  3.   /* Configure the system clock */
  4.   SystemClock_Config();
  5.   
  6.   /* Configure Audio Output peripheral (SAI) and external DAC */
  7.   BSP_AUDIO_OUT_Init(PCM1774_0, &PCM1774_X_0_handle, NULL, 20, AUDIO_SAMPLING_FREQUENCY);
  8.   BSP_AUDIO_OUT_SetVolume(PCM1774_X_0_handle, 20);
  9.   
  10.   /* Configure Audio Input peripheral - DFSDM */  
  11.   BSP_AUDIO_IN_Init(AUDIO_SAMPLING_FREQUENCY, 16, AUDIO_CHANNELS);  
  12.   
  13.   /* Start Microphone acquisition */
  14.   BSP_AUDIO_IN_Record(PCM_Buffer,0);
  15.   
  16.   while (1)
  17.   {
  18.     /* Go to Sleep, everything is done in the interrupt service routines */
  19.     __WFI();
  20.   }
复制代码
插着耳机试了一下音效,还可以,但是高频音较大,可能就是Σ-Δ的原因。

今天就写到这,本来要在我们厂现场试一下大型同步电机连杆加速度如何,和PDA对比一下sensortile数据采集与拟合能力的、实时性等问题的,但出于安全问题有可能做不了,下周尽力看一下吧。

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章