K_A12_022 基于STM32等單片機驅動VL53L0X子產品 序列槽與OLED0.96雙顯示
- 一、資源說明
- 二、基本參數
-
- 參數
- 引腳說明
- 三、驅動說明
-
- UART對應程式:
- IIC對應程式:
- 四、部分代碼說明
-
- 1、接線引腳定義
-
- 1.1、STC89C52RC+VL53L0X子產品
- 1.2、STM32F103C8T6+VL53L0X子產品
- 五、基礎知識學習與相關資料下載下傳
- 六、視訊效果展示與程式資料擷取
- 七、注意事項
- 八、接線說明
-
- STC89C52RC
-
- UART:
- IIC:
- STM32F103C8T6
-
- UART:
- IIC:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjcWZwpmL3gzNyQ2M1AzY4IzN5UTZhRTYhRDN5EDZkZWNxADMwgzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpeg)
注:偏差校準步驟(均十六進制發送)
1、偏差校準指令
A5 21 0A D0(此處是在10CM處校準)
2、加載資料指令
A5 43 04 EC(斷電重新開機後加載偏差補償)
3、儲存設定指令
A5 87 01 2D(儲存設定後生效)
一、資源說明
單片機型号 | 測試條件 | 子產品名稱 | 代碼功能 |
---|---|---|---|
STC89C52RC | 晶振11.0592M | VL53L0X子產品 | STC89C52RC驅動VL53L0X子產品參數 序列槽與OLED0.96雙顯示 |
STM32F103C8T6 | 晶振8M/系統時鐘72M | VL53L0X子產品 | STM32F103C8T6驅動VL53L0X子產品參數 序列槽與OLED0.96雙顯示 |
其他資料目錄 直戳跳轉
二、基本參數
參數
引腳說明
VL53L0X子產品 | 引腳說明 |
---|---|
VCC | 正極 3.3-5V供電 |
GND | 負極 接GND |
CT | 序列槽 USART_TX / IIC_SCL |
DR | 序列槽 USART_RX / IIC_SDA |
SET | 設定上下限距離報警值(電壓 0~3.3V) |
OUT | 報警值狀态輸出 |
三、驅動說明
UART對應程式:
以51為例
void UartInit(void)
{
SCON=0x50; //UART方式1:8位UART; REN=1:允許接收
PCON=0x00; //SMOD=0:波特率不加倍
TMOD=0x20; //T1方式2,用于UART波特率
TH1=0xFD;
TL1=0xFD; //UART波特率設定:FDFD,9600;FFFF,57600
TR1=1; //允許T1計數
EA=1;
TCON |=0x40;//啟動定時器1
IE |=0x90;//打開序列槽中斷,MCU總中斷
}
void UartSend(uint8_t dat)
{
while(send_ok);//等待發送緩存為空
SBUF = dat;
send_ok=1;//緩存标志置1
}
void UartSendStr(uint8_t *p)
{
uint8_t k=0;
while ((*(p+k))!='\0')
{
UartSend(*(p+k));
k++;
}
}
IIC對應程式:
以51為例
/*
*@brief IIC總線初始化函數
*@param[in] NULL
*@author MrWeng
*@date 2020-8-10
*/
void VL53L0X_IIC_Init(void)
{
IIC_SDA = 1;//釋放IIC總線的資料線。
IIC_SCL = 1;//釋放IIC總線的時鐘線。
}
/****************************************************************
通訊起始信号:當 SCL 線是高電平時 SDA 線從高電平向低電平切換,表示通訊的開始;
*****************************************************************/
void VL53L0X_IIC_start(void)
{
IIC_SDA = 1;//拉高
IIC_SCL = 1;
IIC_Delay();
IIC_SDA = 0;
IIC_Delay();
IIC_SCL = 0; //拉低時鐘線,準備開始時鐘
}
/****************************************************************
通訊停止信号:當 SCL 是高電平時 SDA線由低電平向高電平切換,表示通訊的停止。
*****************************************************************/
void VL53L0X_IIC_stop(void)
{
IIC_SCL = 1;
IIC_SDA = 0;
IIC_Delay();
IIC_SDA = 1; //通訊停止
IIC_SCL = 0;
IIC_Delay();
}
/****************************************************************
//接收應答信号函數
*****************************************************************/
uint8_t VL53L0X_IIC_Get_ack(void)
{
uint16_t CNT;
IIC_SCL = 0; //拉低時鐘線。
IIC_Delay();
IIC_SCL = 1; //拉高時鐘線。
while((IIC_SDA) && (CNT < 100) )
{
CNT++;
if(CNT == 100)
{
return 0;
}
}
IIC_SCL = 0; //拉低時鐘線。
IIC_Delay();
return 1;
}
/****************************************************************
//發送應答信号函數
*****************************************************************/
void VL53L0X_IIC_ACK(void)
{
IIC_SDA = 0; //拉低資料線,應答
IIC_SCL = 1; //産生第九個時鐘信号。
IIC_Delay();
IIC_SCL = 0;
IIC_Delay();
}
//非應答
void VL53L0X_IIC_NACK(void)
{
IIC_SDA = 1; //拉高資料線,非應答
IIC_SCL = 1; //産生第九個時鐘信号。
IIC_Delay();
IIC_SCL = 0;
IIC_Delay();
}
/****************************************************************
//向IIC總線寫入一個位元組的資料
*****************************************************************/
void VL53L0X_IIC_write_byte(uint8_t Data)
{
uint8_t i;
for(i=0;i<8;i++)//八位資料
{
if((Data & 0x80) == 0x80)
{
IIC_SDA = 1;
}
else
{
IIC_SDA = 0;
}
IIC_Delay();
IIC_SCL = 1; //一個時鐘信号送入資料
IIC_Delay();
IIC_SCL = 0;
IIC_Delay();
Data = Data << 1;//資料左移一位,把次高位放在最高位,為寫入次高位做準備
}
IIC_SDA = 0; //應答處理前拉低,跳過應答
IIC_Delay();
VL53L0X_IIC_Get_ack();
}
/****************************************************************
//從IIC總線讀取一個位元組的資料函數
*****************************************************************/
uint8_t VL53L0X_IIC_read_byte(void)
{
uint8_t i;
uint8_t Data = 0; //定義一個緩沖寄存器。
IIC_SCL = 0; //先拉低時鐘線
IIC_SDA = 1; //再拉高資料線
for(i = 0;i < 8;i++)
{
Data = Data<<1; //将緩沖位元組的資料左移一位,準備讀取資料。
IIC_SCL = 1; //拉高時鐘線,開始讀取下一位資料
IIC_Delay();
if(IIC_SDA == 1) //如果資料線為高平電平。
{
Data = Data|0x01; //則給緩沖位元組的最低位寫1。
}
IIC_SCL = 0; //拉低時鐘線,一位讀取完成
IIC_Delay();
}
return Data; //傳回讀取的一個位元組資料。
}
四、部分代碼說明
1、接線引腳定義
需要自定義引腳可在此處更改,STM32要自定義引腳的話也要注意引腳時鐘使能的更改
1.1、STC89C52RC+VL53L0X子產品
//VL53L0X子產品引腳定義
IIC:
sbit IIC_SDA = P1^0; //資料線
sbit IIC_SCL = P1^1; //時鐘線
UART:
CT(TX) ---------------P3.0
DR(RX)----------------P3.1
//OLED0.96子產品引腳定義
sbit SCL=P1^3; //串行時鐘
sbit SDA=P1^2; //串行資料
1.2、STM32F103C8T6+VL53L0X子產品
//VL53L0X子產品引腳定義
IIC:
#define IIC_SDA_PIN GPIO_Pin_8 //
#define IIC_SCL_PIN GPIO_Pin_9 //
#define IIC_SDA_H GPIO_SetBits(GPIOB,IIC_SDA_PIN)
#define IIC_SDA_L GPIO_ResetBits(GPIOB,IIC_SDA_PIN)
#define IIC_SCL_H GPIO_SetBits(GPIOB,IIC_SCL_PIN)
#define IIC_SCL_L GPIO_ResetBits(GPIOB,IIC_SCL_PIN)
UART:
#define DEBUG_USART2_TX_GPIO_PORT GPIOA
#define DEBUG_USART2_TX_GPIO_PIN GPIO_Pin_2
#define DEBUG_USART2_RX_GPIO_PORT GPIOA
#define DEBUG_USART2_RX_GPIO_PIN GPIO_Pin_3
//OLED0.96子產品引腳定義
/*STM32F103C8T6晶片的硬體I2C: PB6 -- SCL; PB7 -- SDA */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;//I2C必須開漏輸出
GPIO_Init(GPIOB, &GPIO_InitStructure);
五、基礎知識學習與相關資料下載下傳
1、STC89C52RC程式下載下傳 直戳跳轉
2、STM32F103C8T6程式下載下傳
(1)序列槽下載下傳 直戳跳轉
(2)ST-LINK下載下傳 直戳跳轉
(3)J-LINK下載下傳 直戳跳轉
(4)DAP-LINK下載下傳 直戳跳轉
3、OLED0.96程式說明 直戳跳轉
4、序列槽助手下載下傳與使用
(1)安信可調試助手使用 直戳跳轉
(2) sscom33序列槽調試助手使用 直戳跳轉
(3)STC-ISP序列槽調試助手使用 直戳跳轉
六、視訊效果展示與程式資料擷取
視訊連接配接 直戳跳轉
資料擷取 ( 滑到最後添加個人号)
七、注意事項
1、VCC GND請勿接反,接反易燒
2、OLED顯示異常時,排除接線接觸不良
八、接線說明
STC89C52RC
UART:
/************************************************************************************
// 生成日期 : 2021-6-21
// 最近修改 : 2021-11-21
// 功能描述 : VL53L0X子產品(UART)測試程式
// 測試條件 : STC89C52RC 晶振11.0592
接線
VL53L0X(UART)--------------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
CT(TX) --------------------------------P3.0
DR(RX)---------------------------------P3.1
OLED0.96(IIC) -------------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
SCL------------------------------------P1^3
SDA------------------------------------P1^2
*************************************************************************************/
IIC:
/************************************************************************************
// 生成日期 : 2021-6-21
// 最近修改 : 2021-11-21
// 功能描述 : VL53L0X子產品(IIC)測試程式
// 測試條件 : STC89C52RC 晶振11.0592
接線
VL53L0X (IIC)--------------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
CT(SCL)--------------------------------P1.1
DR(SDA)--------------------------------P1.0
OLED0.96(IIC) -------------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
SCL------------------------------------P1.3
SDA------------------------------------P1.2
*************************************************************************************/
STM32F103C8T6
UART:
/************************************************************************************
// 生成日期 : 2021-6-21
// 最近修改 : 2021-11-21
// 功能描述 : VL53L0X子產品(UART)測試程式
// 測試條件 : STM32F103C8T6 晶振8M 系統時鐘72M
接線
VL53L0X子產品(UART)----------------------STM32F103C8T6
VCC------------------------------------5V
GND------------------------------------GND
CT(TX) --------------------------------PA3
DR(RX)---------------------------------PA2
OLED0.96-------------------------------STM32F103C8T6
VCC------------------------------------3.3V
GND------------------------------------GND
SCL -----------------------------------PB6
SDA------------------------------------PB7
*************************************************************************************/
IIC:
/************************************************************************************
// 生成日期 : 2021-6-21
// 最近修改 : 2021-11-21
// 功能描述 : VL53L0X子產品(IIC)測試程式
// 測試條件 : STM32F103C8T6 晶振8M 系統時鐘72M
接線
VL53L0X子產品(IIC)-----------------------STM32F103C8T6
VCC------------------------------------5V
GND------------------------------------GND
CT(SCL) -------------------------------PB9
DR(SDA)--------------------------------PB8
OLED0.96-------------------------------STM32F103C8T6
VCC------------------------------------3.3V
GND------------------------------------GND
SCL -----------------------------------PB6
SDA------------------------------------PB7
*************************************************************************************/