sylar^z

  • 2020-05-29
  • 回复了主题帖: STM32驱动LIS25BA

    下来看看

  • 回复了主题帖: 颁奖:有奖直播:TI 低功耗 MCU 产品和 Zigbee 无线解决方案

    已确认个人信息无误,谢谢!

  • 2020-05-24
  • 发表了主题帖: 【 ST NUCLEO-H743ZI测评】+ LIS25BA数据采集

    本帖最后由 sylar^z 于 2020-5-24 00:36 编辑     这是在EE之前的活动中获得的ST骨振动传感器板子,可以采集说话时通过骨头震动传递的音频信号,不受环境中其他声源的影响。具体可以参看论坛的帖子(http://bbs.eeworld.com.cn/thread-1080360-1-1.html)。     在之前活动中,我分享过一篇基于NUCLEO-F767ZI的LIS25BA骨振动传感器数据采集帖(http://bbs.eeworld.com.cn/thread-1089664-1-1.html),部分说明性内容这里不再复述了。本帖介绍一下NUCLEO-H743ZI设置LIS25BA骨振动传感器参数、基于SAI采集LIS25BA骨振动传感器具体实现。       控制通信部分,通过STM32CubeMX开启I2C1,配置为Fast Mode,速度为400Khz,其他默认。为了便于接线,将I2C1_SCL从默认的PB6调整为PB8,I2C1_SDA为PB9,可以在STM32CubeMX的pinout view界面直接点击引脚修改。       数据采集选用了SAI1_A,NUCLEO-H743ZI将SAI1的统一引出到CN9上,连接很方便。开启SAI1_A的DMA传输,选了DMA2 Stream1,并使能DMA中断。       关于LIS25BA骨振动传感器的数据采集时钟要求,在之前的帖子已经介绍过了。这里说一下H743ZI和F767ZI的SAI在这个应用中的不同之处。由于F767ZI的SAI中MCLK与FCLK的频率之间固定为256倍,使得F767ZI无法只是用一个SAI单独实现对LIS25BA骨振动传感器的数据采集。H743ZI则通过增加了一个OSR位,通过OSR位可以配置MCLK与FCLK的频率之间固定为256倍或512倍。MCLK频率为FCLK频率512倍刚好满足LIS25BA骨振动传感器24KHz采集时的始终要求。故H743ZI单个SAI就可以采集LIS25BA的数据。   LIS25BA骨振动传感器参数配置代码:   int32_t LIS25BA_Init() {   uint8_t ret = LIS25BA_OK;   uint8_t id;   lis25ba_tmd_ctrl_t tmd_ctrl;   lis25ba_ctrl_t     ctrl;     if(BSP_I2C1_ReadReg(LIS25BA_I2C_ADDRESS, LIS25BA_WHO_AM_I, &id, 1) != LIS25BA_OK)   {     return LIS25BA_ERROR;   }   if(LIS25BA_ID != id)   {     return LIS25BA_ERROR;   }     tmd_ctrl.not_used_01 = 0x0;   tmd_ctrl.WCLK_fq = 0x1;   tmd_ctrl.not_used_02 = 0x0;   tmd_ctrl.mapping = 0x1;   tmd_ctrl.data_valid = 0x0;   tmd_ctrl.Delayed = 0x0;   tmd_ctrl.TDM_pd = 0x0;   if(BSP_I2C1_WriteReg(LIS25BA_I2C_ADDRESS, LIS25BA_TDM_CTRL, (uint8_t *)&tmd_ctrl, 1) != LIS25BA_OK)   {     return LIS25BA_ERROR;   }     ctrl.not_used_01 = 0x0;   ctrl.PD = 0x0;   ctrl.not_used_02 = 0x0;   if(BSP_I2C1_WriteReg(LIS25BA_I2C_ADDRESS, LIS25BA_CTRL, (uint8_t *)&ctrl, 1) != LIS25BA_OK)   {     return LIS25BA_ERROR;   }       return ret; }   LIS25BA骨振动传感器数据采集SAI初始化配置代码。其中红色字体代码为手动添加,用于设置OSR位。   static void MX_SAI1_Init(void) {     /* USER CODE BEGIN SAI1_Init 0 */     /* USER CODE END SAI1_Init 0 */     /* USER CODE BEGIN SAI1_Init 1 */   hsai_BlockA1.Init.MckOverSampling = SAI_MCK_OVERSAMPLING_ENABLE;     /* USER CODE END SAI1_Init 1 */   hsai_BlockA1.Instance = SAI1_Block_A;   hsai_BlockA1.Init.AudioMode = SAI_MODEMASTER_RX;   hsai_BlockA1.Init.Synchro = SAI_ASYNCHRONOUS;   hsai_BlockA1.Init.OutputDrive = SAI_OUTPUTDRIVE_DISABLE;   hsai_BlockA1.Init.NoDivider = SAI_MASTERDIVIDER_ENABLE;   hsai_BlockA1.Init.FIFOThreshold = SAI_FIFOTHRESHOLD_EMPTY;   hsai_BlockA1.Init.AudioFrequency = SAI_AUDIO_FREQUENCY_22K;   hsai_BlockA1.Init.SynchroExt = SAI_SYNCEXT_DISABLE;   hsai_BlockA1.Init.MonoStereoMode = SAI_STEREOMODE;   hsai_BlockA1.Init.CompandingMode = SAI_NOCOMPANDING;   if (HAL_SAI_InitProtocol(&hsai_BlockA1, SAI_I2S_STANDARD, SAI_PROTOCOL_DATASIZE_16BIT, 8) != HAL_OK)   {     Error_Handler();   }   /* USER CODE BEGIN SAI1_Init 2 */     /* USER CODE END SAI1_Init 2 */   }     开启、关闭LIS25BA骨振动传感器DMA数据采集功能。LIS25BA_AUDIO_IN_Record传入的指针地址和空间大小即DMA接收的数据缓冲区空间。   void LIS25BA_AUDIO_IN_Record(uint8_t* pbuf, uint16_t size) {        /* 开启 SAI1 BLOCK A外设 */ //  HAL_SAI_Receive_DMA(&hsai_BlockA2, dataTmp, SAI2_DATA_LEN);   HAL_SAI_Receive_DMA(&hsai_BlockA1, pbuf, size); }   uint8_t BSP_LIS25BA_AUDIO_IN_Stop(void) {        /* 禁能 SAI1 BLOCK A外设 */        __HAL_SAI_DISABLE(&hsai_BlockA1);   HAL_SAI_DMAStop(&hsai_BlockA1);     return 0; }   DMA接收缓冲区半满及全满时中断的处理函数,具体功能待实现。 void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai) {   if(&hsai_BlockA1 == hsai)   {     BSP_AUDIO_IN_LIS25BA_TransferComplete_CallBack();   } }   void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai) {   if(&hsai_BlockA1 == hsai)   {     BSP_AUDIO_IN_LIS25BA_HalfTransfer_CallBack();   } }       根据LIS25BA骨振动传感器书册的说明及配置。将提取有效数据,提取X,Y的数据作为左右声道数据。LIS25BA骨振动传感器的数据为8SLOT,程序中配置的图7模式。 上电   程序运行后,采集到缓冲区的数据。

  • 2020-05-19
  • 发表了主题帖: 【 ST NUCLEO-H743ZI测评】+ USB OTG+FATFS

    本帖最后由 sylar^z 于 2020-5-19 00:38 编辑     NUCLEO-H743ZI板子自带USB接口,既可以作为设备USB口,也可以作为主USB口来外接U盘、HID设备等。   一、硬件原理图     NUCLEO-H743ZI板子USB接口的硬件电路。USB_VBUS、USB_DM、USB_DP、USB_ID、GND为USB5个引脚。USB_PowerSwitchOn为电源输出控制引脚。USB_OverCurrent为电源型号检测引脚。   二、STM32CubeMX创建工程      首先通过STM32CubeMX来创建工程,不熟悉STM32CubeMX的朋友可以参看我上一篇帖子(http://bbs.eeworld.com.cn/thread-1122042-1-1.html)有关于STM32CubeMX创建NUCLEO-H743ZI工程的说明。     进入NUCLEO-H743ZI的配置界面,主要配置如下几个功能项:     1. USB_OTG_FS配置     左边列表选择USB_OTG_FS,配置模式为Host_Only,并启用VBUS_sensing检测。开启global中断。其他默认即可。       2. USB中间层功能配置          左边列表选择USB_HOST,配置模式为MSC,大容量存储器模式。电源驱动选择IO输出,引脚为PG6。其他默认即可。       3. FATFS功能配置     左边列表选择FATFS,配置模式为USB Disk。配置中CODE_PAGE选择支持简体中文。其他默认即可。       4.添加按键中断     板子上的用户按键为PC13,默认配置为上升沿触发中断,即按键按下时触发。       5. 保存工程后,点击右上角的GENERATE CODE自动生成工程代码   三、编程     1. STM32CubeMX生成的源码文件已对USB OTG功能做了基本配置。在配置之后需要开启USB供电输出使能,代码中红色部分。 /**   * Init USB host library, add supported class and start the library   * @retval None   */ void MX_USB_HOST_Init(void) {   /* USER CODE BEGIN USB_HOST_Init_PreTreatment */   /* USER CODE END USB_HOST_Init_PreTreatment */   /* Init host Library, add supported class and start the library. */   if (USBH_Init(&hUsbHostFS, USBH_UserProcess, HOST_FS) != USBH_OK)   {     Error_Handler();   }   if (USBH_RegisterClass(&hUsbHostFS, USBH_MSC_CLASS) != USBH_OK)   {     Error_Handler();   }   if (USBH_Start(&hUsbHostFS) != USBH_OK)   {     Error_Handler();   }   /* USER CODE BEGIN USB_HOST_Init_PostTreatment */   /* Activate VBUS on the port */   USBH_LL_DriverVBUS(&hUsbHostFS, 0);   /* USER CODE END USB_HOST_Init_PostTreatment */ }       2. 在USB连接、断开等事件中添加FATFS功能代码。 void MX_FATFS_Init(void) {   /*## FatFS: Link the USBH driver ###########################*/   retUSBH = FATFS_LinkDriver(&USBH_Driver, USBHPath);   /* USER CODE BEGIN Init */   /* additional user code for init */    /* USER CODE END Init */ }   /*  * user callback definition  */ static void USBH_UserProcess  (USBH_HandleTypeDef *phost, uint8_t id) {   /* USER CODE BEGIN CALL_BACK_1 */   switch(id)   {   case HOST_USER_SELECT_CONFIGURATION:   break;     case HOST_USER_DISCONNECTION:   Appli_state = APPLICATION_DISCONNECT;   FATFS_UnLinkDriver(USBHPath);   f_mount(NULL, "", 0);   break;     case HOST_USER_CLASS_ACTIVE:   Appli_state = APPLICATION_READY;   break;     case HOST_USER_CONNECTION:   Appli_state = APPLICATION_START;   f_mount(&USBHFatFS, (TCHAR const*)USBHPath, 0);   break;     default:   break;   }   /* USER CODE END CALL_BACK_1 */ }          3. 按键中断处理。置一个标志位。 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {   if(USER_Btn_Pin == GPIO_Pin)   {     btnClickFlag = 1;   } }       4. 按键实现创建文件功能。在主函数的while循环中添加功能代码。测试在U盘中生成文件名为testFile的txt文件。     if(btnClickFlag)     {       btnClickFlag = 0;       //创建一个文件       f_open(&testFile, "testFile.txt", FA_CREATE_ALWAYS | FA_WRITE);       f_close(&testFile);     }   四、板子USB OTG接U盘测试。此处注意,U盘的格式须为FAT格式,NTFS、exFAT等无法识别。   五、文件查看,在U盘中生成testFile.txt文件。由于没有内容,文件大小为0Kb。  

  • 2020-05-15
  • 加入了学习《福禄克fcal_cn》,观看 福禄克fcal_cn

  • 加入了学习《福禄克fcal_cn》,观看 FCAL台式数字表

  • 2020-05-12
  • 回复了主题帖: 获奖名单|是德科技的蜂窝车联网(C-V2X)测试解决方案

    确认个人信息无误,感谢EEWorld,感谢是德科技!

  • 回复了主题帖: 【 ST NUCLEO-H743ZI测评】+ 开箱点灯

    littleshrimp 发表于 2020-5-12 04:28 cubemx建工程确实方便
    是的,省去了创建工程时的很多操作

  • 2020-05-11
  • 回复了主题帖: 颁奖:下载富士通 《频谱验证解决方案 》白皮书 好礼送! 颁奖啦~

    个人信息确认无误,谢谢ee,谢谢富士通!

  • 发表了主题帖: 【 ST NUCLEO-H743ZI测评】+ 开箱点灯

    本帖最后由 sylar^z 于 2020-5-11 17:00 编辑          收到论坛评测的ST NUCLEO-H743ZI开发板了。感谢ST和EE提供的测评机会。     一、开箱上图。           NUCLEO-H743ZI开发板载ST-Link,只要连上一根USB线,就可以供电,并调试和下载程序了(这一步需要驱动,我之前装了KEIL,所以自动识别了)。         NUCLEO-H743ZI开发板上还有10/100Mbps的以太网口和USB OTG口,当然还有按键和LED灯。            二 、STM32CubeMX生成工程代码   在STM32CubeMX上选择通过板子来选择,搜索H743,选定NUCLEO-H743ZI。           在确认框中选择YES,软件会自动加板载外设进行配置。选NO的话,所有外设功能清零,之后可自己手动配置。           选YES,软件自动配置了外设。下图右边标识了已配置的IO。            设置程序路径及IDE类型版本后,点击右上角的GENERATE CODE生成源码。            然后直接打开程序。           三、添加点灯代码          STM32CubeMX生成的源码已经把板子上的相关外设,包括网口、串USB、LED及GPIO等外设已做了配置()。            在主函数的while循环了,增加LED灯闪烁代码。下载程序,LED就开始闪烁了。接下去就能开心的玩板了。     tick_1ms = HAL_GetTick();     if(tick_1ms > (tick_1ms_old + 500))     {       tick_1ms_old = tick_1ms;       HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);     }           NUCLEO-H743ZI手册资料:                                                           

  • 2020-05-07
  • 点评了资料: CPU卡技术2

  • 2020-04-29
  • 回复了主题帖: 颁奖: 适用于任何云服务的Trust&GO|Microchip 安全解决方案系列研讨会第3场

    确认个人信息无误,感谢Microchip,感谢EE!

  • 2020-04-28
  • 回复了主题帖: 【测评入选名单公布】STM32H743开发板测评

    okhxyyo 发表于 2020-4-28 15:44 板子需要等到五一放假归来后才能给大家寄送哦。因为办公室办公人数管控的原因,负责寄送的同事五一放完假 ...
    好的。管管,你给我回了两条,楼上会说你偏心的。

  • 回复了主题帖: 【测评入选名单公布】STM32H743开发板测评

    确认个人信息无误

  • 2020-04-24
  • 加入了学习《深入了解PCI Express 5.0测试》,观看 解决PCI Express 5.0测试方法和测量挑战

  • 回复了主题帖: MicroPython 用户开发指南

    学习一下

  • 回复了主题帖: 使用MicroPython开发ESP32 CAM

    围观

  • 2020-04-17
  • 回复了主题帖: 趣玩示波器,不止于波形显示

    确认个人信息无误,感谢EE。

  • 2020-04-11
  • 回复了主题帖: 趣玩示波器+奔跑的多边形

    led2015 发表于 2020-4-9 22:41 很牛啊,如果有详细的步骤就好了,这样大家都可以得到一点经验
    已经添加在帖子里了

  • 回复了主题帖: 趣玩示波器+奔跑的多边形

    兰博 发表于 2020-4-9 09:18 很牛啊!有代码吗?
    代码写的有点乱,就不上传了。我把原理和我的思路分享出来。看看是否对你有点用处。

最近访客

< 1/3 >

统计信息

已有49人来访过

  • 芯币:400
  • 好友:2
  • 主题:20
  • 回复:77
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言