## stm32F1 VL53L0X例程及部分代码讲解(可调工作模式版)
生活随笔
收集整理的這篇文章主要介紹了
## stm32F1 VL53L0X例程及部分代码讲解(可调工作模式版)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
stm32F1 VL53L0X例程及部分代碼講解(可調工作模式版)
前段時間為了使用這個模塊,翻看手冊,發現全是英文看不太懂,就到處從網上找VL53L0X的例程,發現下載的很多個例程都不能用。為了避免大家少走彎路,我在這里總結一下容易出錯誤的地方。順便在介紹一下多個I2C工作的基本配置。
1.1 模塊初始化
VL53L0X_Error vl53l0x_init(VL53L0X_Dev_t *dev) {GPIO_InitTypeDef - GPIO_InitStructure;VL53L0X_Error Status = VL53L0X_ERROR_NONE;VL53L0X_Dev_t *pMyDevice = dev;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能IOpMyDevice->I2cDevAddr = VL53L0X_Addr;//I2C地址pMyDevice->comms_type = 1; //I2C通信模式pMyDevice->comms_speed_khz = 400; //I2C通信速率VL53L0X_i2c_init();//初始化I2CVL53L0X_Xshut=0;//使能端0為傳感器不工作delay_ms(30);VL53L0X_Xshut=1;//使能端1為傳感器工作delay_ms(30);==vl53l0x_Addr_set(pMyDevice,0x52)==;//I2C地址/******************這個地方大家記得設成0x52之前有個博主提供的例程是默認0x54的************/1.2 I2C接口的速率設置
void VL53L0X_i2c_init(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;==GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;==//這個地方記得設置成2MHZ 50MHZ是不能用的GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;==GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;==//也需要設置成2MHZ 50MHZ是不能用的GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;GPIO_Init(GPIOB, &GPIO_InitStructure);還有一點,大家從網下下載的例程記得把他們設置的I2C接口更改一下,很多人的接口都是不一樣的。
1.3 I2C的時間設置
那段時間模塊不能用,一直在糾結于I2C的delay_us(4)和delay_us(1)的問題,其實這兩個并不影響。這兩個的差別在I2C的SDA和SCL發送和接收時間段是允許。希望大家不要糾結這個,節約時間。
2 激光測距模塊的模式配置問題
網上代碼分兩種,有一種是閹割版的不能配置工作模式,另一種是可以配置的。
可以配置的我已經上傳了大家可以下載。
順便提一句,高速率模式對于智能小車定位有很好的響應效果,其它模式延遲大,不建議使用
3 多個激光模塊的共同工作
我采用的是通過配置使能端口實現的,還有一種是配置地址(暫時沒有成功)。
XSHUT接高電平為工作狀態,接低電平為休眠狀態。可以給不同的傳感器配置不同的IO來實現讀取每個傳感器的值。
另外,可以把多個模塊的SCL和SDA并在一起,一起接到開發板上的I2C口上,這樣可以節省端口,想用哪個的時候使能它的端口就行了。
//該文章僅僅是拋磚引玉,因為本人水平有限,如果大家可以看了本文之后可以少走一些彎路就OK了//
總結
以上是生活随笔為你收集整理的## stm32F1 VL53L0X例程及部分代码讲解(可调工作模式版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java g1 配置_项目G1 jvm
- 下一篇: 一看就会的奇偶分频电路