VL53L1X调试记录

本文探讨了在使用VL53L1x多模块时如何解决FreeRTOS环境下I2C通信卡死问题。关键在于合理设置I2C地址,避免冲突,并在任务上下文中正确管理I2C访问,分离FreeRTOS时基与HAL库定时器。作者分享了如何通过taskENTER_CRITICAL()和taskEXIT_CRITICAL()来调整I2C操作,以防止超时判断阻塞。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 在通过I2C驱动多路VL53L1x模块时,设置的I2C的地址不能相差太小(最小得差2)
  2. 在选定指定模块后要有短暂的延时,等待设备稳定,再通过I2C操作。
  3. 在FreeRTOS中移植ST的VL53L1x的多模块测距例程后,会存在卡死在I2C函数超时判断的地方:
/* when not customized by application define dummy one */
#ifndef VL53L1_GetI2cBus
/** This macro can be overloaded by user to enforce i2c sharing in RTOS context
 */
#   define VL53L1_GetI2cBus(...) taskENTER_CRITICAL()//(void)0
#endif

#ifndef VL53L1_PutI2cBus
/** This macro can be overloaded by user to enforce i2c sharing in RTOS context
 */
#   define VL53L1_PutI2cBus(...) taskEXIT_CRITICAL()//(void)0
#endif

这里将具体的I2C操作函数添加在taskENTER_CRITICAL()taskEXIT_CRITACAL()之间,会导致I2C的超时判断函数卡死。因此,FreeRTOS的时基和HAL库的时基最好分开,占用不同的定时器。

[UV2] ORGANIZATION="Microsoft" NAME="Microsoft", "ALIENTEK" EMAIL="277038235@qq.com" ARMSEL=1 BOOK0=UV3\RELEASE_NOTES.HTM("uVision Release Notes",GEN) [ARM] PATH="F:\\STM32MDK\\ARM\\" VERSION=3.80a PATH1="C:\Program Files\CodeSourcery\Sourcery G++ Lite\" CPUDLL0=SARM.DLL(TDRV0,TDRV5,TDRV6,TDRV8) # Drivers for ARM7/9 devices CPUDLL1=SARMCM3.DLL(TDRV1,TDRV3,TDRV4,TDRV5,TDRV7,TDRV8) # Drivers for Cortex-M devices BOOK0=HLP\RELEASE_NOTES.HTM("Release Notes",GEN) BOOK1=HLP\ARMTOOLS.chm("Complete User's Guide Selection",C) BOOK2=HLP\RL_RELEASE_NOTES.HTM("RTL-ARM Release Notes",GEN) BOOK3=HLP\RVI.chm("RV Compiler Introduction",GEN) BOOK4=C:\Program Files\CodeSourcery\Sourcery G++ Lite\share\doc\arm-2007q3-53-arm-none-eabi\pdf\gcc\gcc.pdf("GNU C Compiler",GEN) BOOK5=C:\Program Files\CodeSourcery\Sourcery G++ Lite\share\doc\arm-2007q3-53-arm-none-eabi\pdf\as.pdf("GNU Assembler",GEN) BOOK6=C:\Program Files\CodeSourcery\Sourcery G++ Lite\share\doc\arm-2007q3-53-arm-none-eabi\pdf\ld.pdf("GNU Linker",GEN) BOOK7=C:\Program Files\CodeSourcery\Sourcery G++ Lite\share\doc\arm-2007q3-53-arm-none-eabi\pdf\binutils.pdf("GNU Binary Utilities",GEN) TDRV0=BIN\UL2ARM.DLL("ULINK ARM Debugger") TDRV1=BIN\UL2CM3.DLL("ULINK Cortex Debugger") TDRV2=BIN\AGDIRDI.DLL("RDI Interface Driver") TDRV3=BIN\ABLSTCM.dll("Altera Blaster Cortex Debugger") TDRV4=BIN\lmidk-agdi.dll("Luminary Eval Board") TDRV5=Signum\SigUV3Arm.dll("Signum Systems JTAGjet") TDRV6=Segger\JLTAgdi.dll("J-LINK / J-TRACE") TDRV7=Segger\JL2CM3.dll("Cortex-M3 J-LINK") TDRV8=STLink\ST-LINKIII-KEIL.dll ("ST-Link Debugger") LIC0=EXJEV-PGITZ-RXIUD-8A562-3JTCY-2C6VU [ARMADS] PATH="F:\\STM32MDK\\ARM\\" PATH1="BIN40\"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值