2215|0

94

帖子

4

TA的资源

一粒金砂(中级)

楼主
 

BlueMicrosystem2_V2.1.3标准例程测试及简单解读 [复制链接]

 
本帖最后由 w562601331 于 2017-3-4 14:47 编辑

近日研究了sensertile的标准例程,对一些基本的功能做一下简单的分享和解读。
首先感谢@littleshrimp 的帖子
https://bbs.eeworld.com.cn/thread-511807-1-1.html
该技术贴针对STSW-STLKT01例程里的LSM6DSM加速度传感器的初始化解读了函数的调用过程,大体的调用过程如下:
main.c ->SensorTile_accelero.c –> LSM6DSM_ACC_GYRO_driver_HL.c -> LSM6DSM_ACC_GYRO_driver.c -> SensorTile.c -> stm32l4xx_hal_gpio.c

main.c ->SensorTile_accelero.c –> LSM6DSM_ACC_GYRO_driver_HL.c -> LSM6DSM_ACC_GYRO_driver.c -> SensorTile.c ->stm32l4xx_hal_spi.h


通过这两个步骤解决了传感器的初始化过程。

翌日,我对BlueMicrosystem2_V2.1.3的main函数进行了研究,总体的流程是这样的:

1.首先是编译器的选择以及变量定义、函数声明,此处省略无数字;
进入int main(void)主函数:
  1. HAL_Init();
复制代码


HAL的初始化,什么是HAL呢,其实就是硬件抽象层。
硬件抽象层是位于操作系统 内核与硬件电路之间的接口层,其目的在于将硬件抽象化。它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。 从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。


2.硬件抽象层初始化完成之后,进行
  1. JumpToBootloader();
复制代码
  1. RestartInBootLoaderMode = 0x0;
复制代码

启动BootLoader。BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核备好正确的环境。

3.系统的时钟配置
  1. SystemClock_Config();
  2. Sensor_IO_SPI_CS_Init_All();
  3. InitTargetPlatform(TARGET_NUCLEO);或者InitTargetPlatform(TARGET_NUCLEO);
  4. InitLicenseManager();
复制代码



4.输出一些版本信息
5.初始化蓝牙服务
  1.   Init_BlueNRG_Stack();
  2. Init_BlueNRG_Custom_Services();
复制代码



6.设置加速度计的级别为2G
  1.   Set2GAccelerometerFullScale();
复制代码


读取加速度计的灵敏度
  1.   BSP_ACCELERO_Get_Sensitivity(TargetBoardFeatures.HandleAccSensor,&sensitivity);
  2.   sensitivity_Mul = sensitivity * ((float) FROM_MG_TO_G);
复制代码



7.初始化定时器
  1.   InitTimers();
复制代码


8.判断校准是不是在内存中已经使用,进行控制,然后设置起始时间
  1. if(LicensesIndexMap[OSX_MOTION_FX] != -1)
  2.   {
  3.     if(osxLicencesManager.LicVector[LicensesIndexMap[OSX_MOTION_FX]].osxLicenseInitialized) {
  4.       ReCallCalibrationFromMemory(osxLicencesManager.Header.MagnetoCalibration);
  5.     }
  6.   }
  7.   StartTime = HAL_GetTick();
复制代码



9.此时初始化完成,开始进入运行的wihle(1)循环,在其中控制指示灯的闪烁频率,并且通过中断的方式来实现各个传感器数据的读取,以完成整个系统的常规运行。

  1.   while (1){
  2.     /* Led Blinking when there is not a client connected */
  3.     if(!connected) {
  4.       if(!TargetBoardFeatures.LedStatus) {
  5.         if(HAL_GetTick()-StartTime > 1000) {
  6.           LedOnTargetPlatform();
  7.           TargetBoardFeatures.LedStatus =1;
  8.           StartTime = HAL_GetTick();
  9.         }
  10.       } else {
  11.         if(HAL_GetTick()-StartTime > 50) {
  12.           LedOffTargetPlatform();
  13.           TargetBoardFeatures.LedStatus =0;
  14.           StartTime = HAL_GetTick();
  15.         }
  16.       }
  17.     }

  18.     /* Handle Interrupt from MEMS */
  19.     if(MEMSInterrupt) {
  20.       MEMSCallback();
  21.       MEMSInterrupt=0;
  22.     }

  23.     /* Handle user button */
  24.     if(ButtonPressed) {
  25.       ButtonCallback();
  26.       ButtonPressed=0;      
  27.     }

  28.     /* Handle Re-Calibration */
  29.     if(ForceReCalibration) {
  30.       ForceReCalibration=0;
  31.       ReCalibration();
  32.     }

  33.     /* handle BLE event */
  34.     if(HCI_ProcessEvent) {
  35.       HCI_ProcessEvent=0;
  36.       HCI_Process();
  37.     }

  38.     if(set_connectable){
  39.       /* Initializes the osx libraries if there is a valid license */
  40.       /* Initialize MotionFX library */
  41.       if(LicensesIndexMap[OSX_MOTION_FX] != -1){
  42.         if((osxLicencesManager.LicVector[LicensesIndexMap[OSX_MOTION_FX]].osxLicenseInitialized) & (TargetBoardFeatures.osxMotionFXIsInitalized==0)){
  43.           MotionFX_manager_init();
  44.           MotionFX_manager_start_9X();
  45.         }
  46.       }

  47. #ifdef OSX_BMS_MOTIONAR
  48.       /* Initialize MotionAR Library */
  49.       if(LicensesIndexMap[OSX_MOTION_AR] != -1){
  50.         if((osxLicencesManager.LicVector[LicensesIndexMap[OSX_MOTION_AR]].osxLicenseInitialized) & (TargetBoardFeatures.osxMotionARIsInitalized==0)){
  51.           MotionAR_manager_init();
  52.         }
  53.       }
  54. #endif /* OSX_BMS_MOTIONAR */

  55. #ifdef OSX_BMS_MOTIONCP
  56.       /* Initialize MotionCP Library */
  57.       if(LicensesIndexMap[OSX_MOTION_CP] != -1){
  58.         if((osxLicencesManager.LicVector[LicensesIndexMap[OSX_MOTION_CP]].osxLicenseInitialized) & (TargetBoardFeatures.osxMotionCPIsInitalized==0)){
  59.           MotionCP_manager_init();
  60.         }
  61.       }
  62. #endif /* OSX_BMS_MOTIONCP */

  63. #ifdef OSX_BMS_MOTIONGR
  64.       /* Initialize MotionGR Library */
  65.       if(LicensesIndexMap[OSX_MOTION_GR] != -1){
  66.         if((osxLicencesManager.LicVector[LicensesIndexMap[OSX_MOTION_GR]].osxLicenseInitialized) & (TargetBoardFeatures.osxMotionGRIsInitalized==0)){
  67.           MotionGR_manager_init();
  68.         }
  69.       }
  70. #endif /* OSX_BMS_MOTIONGR */
  71.       
  72. #ifdef OSX_BMS_ACOUSTIC_SOURCE_LOCALIZATION
  73.       /* Initialize AcousticSL Library */
  74.       if(LicensesIndexMap[OSX_ACOUSTIC_SL] != -1){
  75.         if((osxLicencesManager.LicVector[LicensesIndexMap[OSX_ACOUSTIC_SL]].osxLicenseInitialized) & (TargetBoardFeatures.osxAcousticSLIsInitalized==0)){
  76.           AcousticSL_Manager_init();
  77.         }
  78.       }
  79. #endif /* OSX_BMS_ACOUSTIC_SOURCE_LOCALIZATION */

  80. #ifdef OSX_BMS_BLUEVOICE
  81.       /* Initialize BlueVoice Library */
  82.       if(LicensesIndexMap[OSX_AUDIO_BV] != -1) {
  83.         if((osxLicencesManager.LicVector[LicensesIndexMap[OSX_AUDIO_BV]].osxLicenseInitialized) & (TargetBoardFeatures.osxAudioBVIsInitalized==0)){
  84.           AudioBV_Manager_init();
  85.         }
  86.       }
  87. #endif /* OSX_BMS_BLUEVOICE */

  88.       if(NecessityToSaveLicense!=0) {
  89.         if(NecessityToSaveLicense & OSX_BMS_RESET_LIC) {
  90.           /* Reset before write data in Memory */
  91.           NecessityToSaveLicense &= (~OSX_BMS_RESET_LIC);
  92.           ResetLicensesStatus();
  93.         }

  94.         if(NecessityToSaveLicense & OSX_BMS_SAVE_LIC) {
  95.           /* Save the data in Memory */
  96.           NecessityToSaveLicense &= (~OSX_BMS_SAVE_LIC);
  97.           SaveLicensesStatus();
  98.         }
  99.       }

  100. #if 0
  101.       /* Update the BlueNRG firmware */
  102.       if(MakeUpdateBlueNRG){
  103.         UpdateFWBlueNRG(SizeOfUpdateBlueNRG);
  104.         MakeUpdateBlueNRG=0;
  105.         /* Restart the Bluethoot services */
  106.         /* Initialize the BlueNRG */
  107.         Init_BlueNRG_Stack();
  108.         /* Initialize the BlueNRG Custom services */
  109.         Init_BlueNRG_Custom_Services();
  110.       }
  111. #endif

  112.       /* Now update the BLE advertize data and make the Board connectable */
  113.       setConnectable();
  114.       set_connectable = FALSE;
  115.       
  116. #ifdef USE_STM32F4XX_NUCLEO
  117.         //BSP_AUDIO_IN_Record(PDM_Buffer, 0);
  118. #endif /* USE_STM32F4XX_NUCLEO */

  119.     }

  120.     /* Environmental Data */
  121.     if(SendEnv) {
  122.       SendEnv=0;
  123.       SendEnvironmentalData();
  124.     }
  125.    
  126.     /* Mic Data */
  127.     if (SendAudioLevel) {
  128.       SendAudioLevel = 0;
  129.       SendAudioLevelData();
  130.     }

  131.     /* Motion Data */
  132.     if(SendAccGyroMag) {
  133.       SendAccGyroMag=0;
  134.       SendMotionData();
  135.     }

  136.     /* osxMotionFX */
  137.     if(Quaternion) {
  138.       Quaternion=0;
  139.       ComputeQuaternions();
  140.     }

  141. #ifdef OSX_BMS_BLUEVOICE
  142.     /* BlueVoice Data */
  143.     if(SendBlueVoice){
  144.       osx_BlueVoice_SendData(&num_byte_sent);
  145.       SendBlueVoice = 0;
  146.     }     
  147. #endif /* OSX_BMS_BLUEVOICE */

  148. #ifdef OSX_BMS_MOTIONAR
  149.     /* osxMotionAR */
  150.     if(UpdateMotionAR) {
  151.       UpdateMotionAR=0;
  152.       ComputeMotionAR();
  153.     }
  154. #endif /* OSX_BMS_MOTIONAR */

  155. #ifdef OSX_BMS_MOTIONCP
  156.     /* osxMotionCP */
  157.     if(UpdateMotionCP) {
  158.       UpdateMotionCP=0;
  159.       ComputeMotionCP();
  160.     }
  161. #endif /* OSX_BMS_MOTIONCP */

  162. #ifdef OSX_BMS_MOTIONGR
  163.     /* osxMotionGR */
  164.     if(UpdateMotionGR) {
  165.       UpdateMotionGR=0;
  166.       ComputeMotionGR();
  167.     }
  168. #endif /* OSX_BMS_MOTIONGR */
  169.    
  170. #ifdef OSX_BMS_ACOUSTIC_SOURCE_LOCALIZATION   
  171.     /* Audio Source Localization Data */
  172.     if (SendAudioSourceLocalization)
  173.     {
  174.       SendAudioSourceLocalization = 0;
  175.       SendAudioSourceLocalizationData();
  176.     }
  177. #endif /* OSX_BMS_ACOUSTIC_SOURCE_LOCALIZATION */

  178.     /* Wait for Event */
  179.     __WFI();
  180.   }
复制代码






点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表