一、玩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配置程序如下:
- if(SendOverUSB) /* Configure the USB */
- {
- /*** USB CDC Configuration ***/
- /* Init Device Library */
- USBD_Init(&USBD_Device, &VCP_Desc, 0);
- /* Add Supported Class */
- USBD_RegisterClass(&USBD_Device, USBD_CDC_CLASS);
- /* Add Interface callbacks for AUDIO and CDC Class */
- USBD_CDC_RegisterInterface(&USBD_Device, &USBD_CDC_fops);
- /* Start Device Process */
- USBD_Start(&USBD_Device);
- }
复制代码三、AudioLoop应用体验:
这个例程主函数体较简练,其音频编码是PCM,其AD过程被设置成了Σ-Δ形式,以前研究过,现在模糊了,他大概的原理就是先将频谱从基带进行搬移,然后用高通滤波的形式降低噪声功率,用数学推导可得出这个结论,大家可以看我上传的一篇关于D类功放设计的论文,Main如下:
- HAL_Init();
-
- /* Configure the system clock */
- SystemClock_Config();
-
- /* Configure Audio Output peripheral (SAI) and external DAC */
- BSP_AUDIO_OUT_Init(PCM1774_0, &PCM1774_X_0_handle, NULL, 20, AUDIO_SAMPLING_FREQUENCY);
- BSP_AUDIO_OUT_SetVolume(PCM1774_X_0_handle, 20);
-
- /* Configure Audio Input peripheral - DFSDM */
- BSP_AUDIO_IN_Init(AUDIO_SAMPLING_FREQUENCY, 16, AUDIO_CHANNELS);
-
- /* Start Microphone acquisition */
- BSP_AUDIO_IN_Record(PCM_Buffer,0);
-
- while (1)
- {
- /* Go to Sleep, everything is done in the interrupt service routines */
- __WFI();
- }
复制代码插着耳机试了一下音效,还可以,但是高频音较大,可能就是Σ-Δ的原因。
今天就写到这,本来要在我们厂现场试一下大型同步电机连杆加速度如何,和PDA对比一下sensortile数据采集与拟合能力的、实时性等问题的,但出于安全问题有可能做不了,下周尽力看一下吧。
本文来自论坛,点击查看完整帖子内容。